anchor.diff:      init_metrics(),
       case config:get_scenario_settings(?ALL_PARAMETERS) of
           {ok, Settings} ->
  +            http_req:start(),
  +
               config:store_scenario_settings(Settings), config:dump_settings(),
   
  -            [PublicationRate, RoomCreationRate] = [proplists:get_value(Key, Settings) ||
  -                Key <- [publication_rate, room_creation_rate]],
  +            [PublicationRate, RoomCreationRate, GDPRRemovalRate] =
  +                [proplists:get_value(Key, Settings) ||
  +                    Key <- [publication_rate, room_creation_rate, gdpr_removal_rate]],
               amoc_throttle:start(?ROOM_CREATION_THROTTLING, RoomCreationRate),
               amoc_throttle:start(?PUBLICATION_THROTTLING, PublicationRate),
  +            amoc_throttle:start(?REMOVAL_THROTTLING, GDPRRemovalRate),
   
               start_coordinator(Settings),
               {ok, Settings};
  
positive.code: %% Coordinator
  %%------------------------------------------------------------------------------------------------
  start_coordinator(Settings) ->
      pg2:create(?GROUP_NAME),
      Coordinator = spawn(fun() -> coordinator_fn(Settings) end),
      pg2:join(?GROUP_NAME, Coordinator).
  
  coordinator_fn(Settings) ->
      lager:debug("coordinator process ~p", [self()]),
      config:store_scenario_settings(Settings),
      config:dump_settings(),
      coordinator_loop([]).
  
  coordinator_loop(AllPids) ->
      N = get_room_size(),
      case wait_for_n_clients([], N) of
          {timeout, []} when AllPids =:= [] -> coordinator_loop([]);
          {timeout, Pids} ->
              activate_users(Pids, n_rooms),
              activate_users(Pids ++ AllPids, all_rooms),
              lager:error("Waited too long for the new user!"),
              coordinator_loop([]);
          {ok, Pids} ->
              activate_users(Pids, n_rooms),
              coordinator_loop(Pids ++ AllPids)
      end.
  
  wait_for_n_clients(PidsAndJids, 0) ->
      make_full_rooms(PidsAndJids),
      Pids = [Pid || {Pid, _} <- PidsAndJids],
      {ok, Pids};
  wait_for_n_clients(PidsAndJids, N) ->
      receive
          {new_client, NewPid, NewJid} ->
              lager:debug("Coordinator received ~p~n", [NewJid]),
              wait_for_n_clients([{NewPid, NewJid} | PidsAndJids], N - 1)
      after ?COORDINATOR_TIMEOUT ->
          Pids = [Pid || {Pid, _} <- PidsAndJids],
          make_full_rooms(PidsAndJids),
          {timeout, Pids}
      end.
  
  make_full_rooms(PidsAndJids) ->
      [begin
           MemberJids = [Jid || {_, Jid} <- PidsAndJids, Jid =/= OwnerJid],
           OwnerPid ! {add_users, MemberJids}
  
negative.code: update_message_ttd(Time, Now) ->
      Interval = Now - Time,
      amoc_metrics:update_time(message_ttd, Interval).
  
  remove_self(Client) ->
      UserName = escalus_client:username(Client),
      UserServer = escalus_client:server(Client),
      Path = list_to_binary(["/api/users/", UserServer, "/", UserName]),
      Host = get_parameter(mim_rest_endpoint),
      {ok, R} = http_req:request(Host, Path, <<"DELETE">>, []),
      lager:debug("removing user ~p:~n~p", [UserName,R]),
      ?STOP_USER.
  
  %%------------------------------------------------------------------------------------------------
  %% User connection
  