   `{:executed, {out, rc, ref}}` is send to the current process, to inform
   about the resut of the asynchronous running BaumeisterFile execution process.
   """
-  @spec execute(pid, String.t, Baumeister.BaumeisterFile.t) :: {:ok, reference}
-  def execute(pid, url, bmf) do
-    GenServer.call(pid, {:execute, url, bmf})
+  @spec execute(pid, Coordinate.t, Baumeister.BaumeisterFile.t) :: {:ok, reference}
+  def execute(pid, %Coordinate{} = coordinate, bmf) do
+    GenServer.call(pid, {:execute, coordinate, bmf})
   end
 
   ##############################################################################

  If the parameter `workspace` is missing, it is set to
  directory `baumeister_workspace` in the system's temp dir.
  """
  @spec execute_bmf(String.t, Baumeister.BaumeisterFile.t, String.t) :: {String.t, integer}
  def execute_bmf(url, bmf) do
    tmpdir = System.tmp_dir!()
    workspace = Path.join(tmpdir, "baumeister_workspace")
    execute_bmf(url, bmf, workspace)
  end
  def execute_bmf(url, bmf, workspace) do
    # make workspace dir
    :ok = File.mkdir_p!(workspace)
    # extract from `url`
    # cd into workspace ==> siehe System.cmd!
    # execute command
    {shell, arg1}  = case bmf.os do
      :windows -> {"cmd.exe", "/c"}
      _unix -> {"/bin/sh", "-c"}
    end
    {out, rc} = System.cmd(shell, [arg1, bmf.command], [cd: workspace, stderr_to_stdout: true])
    # remove the directory
    :ok = File.rmdir! workspace
    {out, rc}
  end



  alias Baumeister.Coordinator
  alias Baumeister.EventCenter
  alias Baumeister.Observer.Coordinate

  @type t :: %__MODULE__{
    coordinator: nil | pid,
