   def cast_call(peer, procedure, options \\ []) do
     {:ok, %{args: [call_id | _]} = register} =
       new_call_message(procedure, options)
-    :ok = Peer.send_message(peer, register)
+    :ok = Peer.call(peer, __MODULE__, {:send, register})
     {:ok, call_id}
   end
 


  def get_features(_options), do: {:caller, %{}}

  def handle_message(%Message{type: :result} = result, peer, state) do
    :ok = Peer.send_to_owner(peer, result)
    {:ok, state}
  end

  def handle_message(message, peer, state) do
    super(message, peer, state)
  end

  # Private Functions

  alias Spell.Message
  alias Spell.Peer

  defstruct [call_requests: HashDict.new()]

  @doc """
  Using `peer` asynchronously call `procedure` with `options`.
