                         if( time + dt > t_output)
                             dt = t_output-time;
                         if( p.timestepper == "adaptive")
-                            adapt.step( feltor, time, y0, time, y0, dt,
-                                dg::pid_control, dg::l2norm, rtol, atol);
-                        else if ( p.timestepper == "adaptive-imex")
-                            adapt_ark.step( feltor, implicit, time, y0, time,
-                                y0, dt, dg::pid_control, dg::l2norm, rtol, atol);
-                        DG_RANK0 std::cout << "## time "<<time<<" dt "<<dt<<" t_out "<<t_output<<" step "<<step<<" failed "<<var.nfailed<<"\n";
-                        if( dt < 1e-6)
-                            throw dg::Error(dg::Message(_ping_)<<"Adaptive failed to converge! dt = "<<std::scientific<<dt);
-                        if( adapt.failed())
                         {
-                            var.nfailed++;
-                            continue;
-                        }
-                        step++;
-                    }
-                    t_output += deltaT;
-                }
-                else
-                    for( unsigned k=0; k<p.inner_loop; k++)
-                    {
-                        if( p.timestepper == "adaptive")
+                            double dt_old;
                             do{
+                                dt_old = dt;
                                 adapt.step( feltor, time, y0, time, y0, dt,
                                         dg::pid_control, dg::l2norm, rtol,
                                         atol);

                double max_ue = dg::blas1::reduce(
                    feltor.velocity(0), 0., dg::AbsMax<double>() );
                std::cout << "\tMaximum ue "<<max_ue<<"\n";
                if( p.timestepper == "adaptive")
                {
                    std::cout << "\tdt "<<dt<<"\n";
                    std::cout << "\tfailed "<<var.nfailed<<"\n";

    dg::Adaptive< dg::ARKStep< std::array<std::array<dg::x::DVec,2>,2>,
        feltor::ImplicitSolver< dg::x::CylindricalGrid3d, dg::x::IDMatrix,
            dg::x::DMatrix, dg::x::DVec> > > adapt_ark;
    dg::ImplicitRungeKutta< std::array<std::array<dg::x::DVec,2>,2>,
        feltor::ImplicitSolver< dg::x::CylindricalGrid3d, dg::x::IDMatrix,
            dg::x::DMatrix, dg::x::DVec> > dirk;
    double rtol = 0., atol = 0., dt = 0.;
    if( p.timestepper == "multistep")
    {
