anchor.diff:                protocol_role_map=ProtocolRoleMap, % Roles for each protocol
                 monitors=orddict:new(), % Monitors for each role we play in each protocol
                 current_protocol=undefined}. % The currently-active protocol.
  -
  -
  -% TODO: Change this
  -freshen_state(OldState) ->
  -  ActorPid = OldState#conv_state.actor_pid,
  -  ActorTypeName = OldState#conv_state.actor_type_name,
  -  ProtocolRoleMap = OldState#conv_state.protocol_role_map,
  -  fresh_state(ActorPid, ActorTypeName, ProtocolRoleMap).
   
   % Initialises the basic monitor state with some default values.
   init([ActorPid, ActorTypeName, ProtocolRoleMap]) ->
  
positive.code:       {reply, {error, Err}, StateData}
    end.
  
  handle_terminate_conversation(ConversationID, State) ->
    ActorName = State#conv_state.actor_type_name,
    ActorPID = State#conv_state.actor_pid,
    ActiveProtocols = State#conv_state.active_protocols,
    NewActiveProtocols = bidirectional_map:remove_right(ConversationID),
    NewState = State#conv_state{active_protocols=NewActiveProtocols},
    error_logger:info_msg("INFO: Actor ~w with PID ~p exiting conversation ~p.~n",
                         [ActorName, ActorPID, ConversationID]),
  
negative.code:   RecipientPID = StateData#conv_state.actor_pid,
    gen_server:cast(RecipientPID, Msg).
  
  % Handles an incoming message. Checks whether we're in the correct conversation,
  % then grabs the monitor, then checks / updates the monitor state.
  handle_incoming_message(Msg = {message, MessageData}, ConversationID, StateData) ->
    Monitors = StateData#conv_state.monitors,
    % Get the protocol name for the conversation
  