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

                        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")
                            do{
                                adapt.step( feltor, time, y0, time, y0, dt,
                                        dg::pid_control, dg::l2norm, rtol,
                                        atol);

    else if (p.timestepper == "adaptive")
    {
        adapt.construct( p.tableau, y0);
        adapt.stepper().ignore_fsal();
        double eps_time = js[ "timestepper"]["eps_time"].asDouble( 1e-10);
        dirk.construct( "Midpoint (implicit)", feltor, eps_time);
        rtol = js[ "timestepper"][ "rtol"].asDouble( 1e-7);
        atol = js[ "timestepper"][ "atol"].asDouble( 1e-10);
        dt = 1e-5; //that should be a small enough initial guess
