         Process.delete(:iex_server)
       end
 
-      cond do
-        is_nil(evaluator) ->
-          Process.delete(:iex_evaluator)
-
-        evaluator != :ack ->
-          # Ensure propagation to non-root level evaluators
-          send(self(), {:done, server})
-
-        true ->
-          :ok
+      if old_evaluator do
+        Process.put(:iex_evaluator, old_evaluator)
+      else
+        Process.delete(:iex_evaluator)
       end
 
       :ok

      env: env,
      server: server,
      history: history,
      stacktrace: stacktrace
    }

    case opts[:dot_iex_path] do

    end
  end

  defp loop(%{server: server, ref: ref} = state) do
    receive do
      {:eval, ^server, code, iex_state} ->
        {result, state} = eval(code, iex_state, state)
