     iex> Callee.start_link("com.spell.rpc.sum")
     """
     require Logger
-    defstruct [:callee, :procedure, timeout: 1000]
+    defstruct [:callee, :reg_id, timeout: 1000]
 
     # Public Functions
 


      # `Spell.cast_register` receive the callee and the procedure where it
      # has to be registered
      {:ok, _register_id} = Spell.cast_register(callee, procedure)

      %__MODULE__{callee: callee,
                  procedure: procedure}
        |> struct(options)
        |> loop()
    end

    defp loop(state) do
      receive do
        :stop -> :ok
        {Spell.Peer, _pid, message} -> handle_message(state, message)
        _ -> {:error, :wrong_message}
      after
        state.timeout -> {:error, :timeout}

      loop(state)
    end

    defp handle_message(state, %Spell.Message{args: [_request, reg_id], type: :registered}) do
      Logger.info("<Callee: #{inspect(state.callee)}> registered")
      %{state | reg_id: reg_id}
    end

    defp handle_message((%{callee: callee, reg_id: reg_id}) = state, %Spell.Message{args: [request, reg_id, _msg, params], type: :invocation}) do
      Logger.info("<Callee: #{inspect(callee)}> received #{inspect(params)} on #{reg_id}")
      Spell.cast_yield(callee, request, [arguments_kw: %{result: Math.sum(params, 0)}])
      state
    end
  end

  # Public Interface
