function step!(cache::ImplicitExplicitRungeKuttaCache, solution::AbstractRungeKuttaSolution, rhs::SplitRightHandSide{ğ�‘�, ğ�‘€}, solver::ImplicitExplicitRungeKuttaSolver) where {ğ�‘�<:NonlinearRightHandSide, ğ�‘€<:NonlinearRightHandSide}
    @â†“ n, e, v, Uáµ¢, ká´µ, ká´±, J = cache
    @â†“ u, t = solution
    @â†“ stiff, nonstiff = rhs
    @â†“ Df! = stiff
    @â†“ implicitableau, explicitableau, stepsize, newton = solver
    @â†“ Aá´µ â†� A, bá´µ â†� b, cá´µ â†� c, s = implicitableau
    @â†“ Aá´± â†� A, bá´± â†� b, cá´± â†� c = explicitableau
    @â†“ h = stepsize
    @â†“ Îµáµ£, Mâ‚™ = newton

    # Stages:
    Df!(J, v, u[n], t[n])
    for i = 1:s
        # Eáµ¢ = u[n] + h * sum(Aá´µ[i,j] * ká´µ[j] + Aá´±[i,j] * ká´±[j] for j = 1:i-1)
        zero!(v)
        for j in 1:i-1
            if Aá´µ[i,j] â‰  0.0
                @. v += Aá´µ[i,j] * ká´µ[j]
            end
            if Aá´±[i,j] â‰  0.0
                @. v += Aá´±[i,j] * ká´±[j]
            end
        end
        @. v = u[n] + h * v

        # Simplified Newton:
        l = 1
        zero!(Uáµ¢)
        Î”Uáµ¢ = ká´±[i] # to avoid allocs
        # Fáµ¢' = I - h * Aá´µ[i,i] * L
        M = factorize(I - h * Aá´µ[i,i] * J)
        for l = 1:Mâ‚™
            # ká´µ[i] = fâ‚›(t[n] + h * cá´µ[i], Uáµ¢)
            stiff(ká´µ[i], Uáµ¢, t[n] + h * cá´µ[i])
            # Fáµ¢ = Eáµ¢ + h * Aá´µ[i,i] * ká´µ[i] - Uáµ¢
            @. Î”Uáµ¢ = v + h * Aá´µ[i,i] * ká´µ[i] - Uáµ¢
            # Î”Uáµ¢ = Fáµ¢' \ Fáµ¢
            ldiv!(M, Î”Uáµ¢)
            # Uáµ¢ += Î”Uáµ¢
            @. Uáµ¢ += Î”Uáµ¢
            if norm(Î”Uáµ¢) < Îµáµ£ * norm(Uáµ¢)
                break
            end
        end

        # ká´±[i] = fâ‚™â‚›(t[n] + h * cá´±[i], Uáµ¢)
        nonstiff(ká´±[i], Uáµ¢, t[n] + h * cá´±[i])
    end

    # Step:
    # u[n+1] = u[n] + h * sum(bá´µ[i] * ká´µ[i] + bá´±[i] * ká´±[i] for i = 1:s)
    zero!(v)
    for i = 1:s
        if bá´µ[i] â‰  0.0
            @. v += bá´µ[i] * ká´µ[i]
        end
        if bá´±[i] â‰  0.0
            @. v += bá´±[i] * ká´±[i]
        end
    end
    @. u[n+1] = u[n] + h * v
    # t[n+1] = t[n] + h
    t[n+1] = kahansum(t[n], h, e)

    return u[n+1], t[n+1]
end

function step!(cache::ImplicitExplicitRungeKuttaCache, solution::AbstractRungeKuttaSolution, rhs::SplitRightHandSide{ğ��¿, ğ�‘�}, solver::ImplicitExplicitRungeKuttaSolver) where {ğ��¿<:LinearRightHandSide, ğ�‘�<:NonlinearRightHandSide}
    @â†“ n, v, ká´µ, ká´±, Uáµ¢, J, e = cache
    @â†“ u, t = solution
    @â†“ stiff, nonstiff = rhs
    @â†“ L, g! = stiff
    @â†“ implicitableau, explicitableau, stepsize = solver
    @â†“ Aá´µ â†� A, bá´µ â†� b, cá´µ â†� c, s = implicitableau
    @â†“ Aá´± â†� A, bá´± â†� b, cá´± â†� c = explicitableau
    @â†“ h = stepsize

    # Stages:
    for i = 1:s
        # Eáµ¢ = u[n] + h * sum(Aá´µ[i,j] * ká´µ[j] + Aá´±[i,j] * ká´±[j] for j = 1:i-1)
        zero!(v)
        for j in 1:i-1
            if Aá´µ[i, j] â‰  0.0
                @. v += Aá´µ[i,j] * ká´µ[j]
            end
            if Aá´±[i, j] â‰  0.0
                @. v += Aá´±[i,j] * ká´±[j]
            end
        end
        @. v = u[n] + h * v
        # Fáµ¢' = I - h * Aá´µ[i,i] * L
        M = factorize(I - h * Aá´µ[i,i] * L)
        # Fáµ¢ = Eáµ¢ + h * Aá´µ[i,i] * g(t[n] + h * cá´µ[i])
        g! isa Nothing ? zero!(Uáµ¢) : g!(Uáµ¢, t[n] + h * cá´µ[i])
        @. Uáµ¢ = v + h * Aá´µ[i,i] * Uáµ¢
        # Uáµ¢ = Fáµ¢' \ Fáµ¢
        ldiv!(M, Uáµ¢)
        # ká´µ[i] = L * Uáµ¢ + g(t[n] + h * cá´µ[i])
        stiff(ká´µ[i], Uáµ¢, t[n] + h * cá´µ[i])
        # ká´±[i] = fâ‚™â‚›(t[n] + h * cá´±[i], U)
        nonstiff(ká´±[i], Uáµ¢, t[n] + h * cá´±[i])
    end

    # Step:
    # u[n+1] = u[n] + h * sum(bá´µ[i] * ká´µ[i] + bá´±[i] * ká´±[i] for i = 1:s)
    zero!(v)
    for i = 1:s
        if bá´µ[i] â‰  0.0
            @. v += bá´µ[i] * ká´µ[i]
        end
        if bá´±[i] â‰  0.0
            @. v += bá´±[i] * ká´±[i]
        end
    end
    @. u[n+1] = u[n] + h * v
    # t[n+1] = t[n] + h
    t[n+1] = kahansum(t[n], h, e)

    return u[n+1], t[n+1]
end
