     {:reply, :ok, {:suspend, state}}
   end
 
-  def handle_call(:get_status, _from, {status, _} = state) do
-    {:reply, status, state}
+  def handle_call(:resume, _from, {:suspend, state}) do
+    tick(state)
+    {:reply, :ok, {:cont, state}}
+  end
+
+  def handle_call(:resume, _from, state) do
+    {:reply, :ok, state}
   end
 
   def handle_call(request, from, state) do


  @type state :: State.t

  # Client

  def start_link(%State{} = state, opts \\ []) do
    state = State.on_start(state)
    GenServer.start_link(__MODULE__, {:suspend, state}, opts)
  end

  def resume(pid) do
    GenServer.call(pid, :resume)
  end

  def pause(pid) do
    GenServer.call(pid, :pause)
  end

  def next(pid) do
    GenServer.call(pid, :next)
  end

  def prev(pid) do
    GenServer.call(pid, :prev)
  end

  def get_status(pid) do
    GenServer.call(pid, :get_status)
  end

  # Server (callbacks)

  # Calls
  def handle_call(:pause, _from, {:cont, state}) do
    {:reply, :ok, {:suspend, state}}
  end

  # calling pause on an already paused or stopped game has no effect
  def handle_call(:pause, _from, state) do
    {:reply, :ok, state}
  end

  def handle_call(:resume, _from, {:suspend, state}) do
    tick(state)
    {:reply, :ok, {:cont, state}}
  end

  # calling resume on an already running game or stopped game doesn't do
    # anything
  def handle_call(:resume, _from, state) do
    {:reply, :ok, state}
  end

  def handle_call(:next, _from, {:halted, state}) do

  def handle_call(:next, _from, {_, state}) do
    state = step(state)
    {:reply, :ok, {:suspend, state}}
  end

  def handle_call(:on_change, _from, {status, state}) do
    state = State.on_change(state)
    {:reply, :ok, {status, state}}
  end

  def handle_call(:on_done, _from, {status, state}) do
    state = State.on_done(state)
    {:reply, :ok, {status, state}}
  end

  def handle_call(:on_start, _from, {status, state}) do
    state = State.on_start(state)
    {:reply, :ok, {status, state}}
  end

  def handle_call(:pause, _from, {:cont, state}) do
    {:reply, :ok, {:suspend, state}}
  end

  def handle_call(:pause, _from, state) do
    {:reply, :ok, state}
  end

  def handle_call(:prev, _from, {:halted, state}) do
