anchor.diff:        {reply, {error, Err}, StateData}
     end.
   
  +% Handle termination of a conversation -- remove from the conversation
   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),
  +  NewActiveProtocols = bidirectional_map:remove_right(ConversationID, ActiveProtocols),
     NewState = State#conv_state{active_protocols=NewActiveProtocols},
     error_logger:info_msg("INFO: Actor ~w with PID ~p exiting conversation ~p.~n",
                          [ActorName, ActorPID, ConversationID]),
  
positive.code:                      monitors, % Monitors for each role we play in each protocol
                       current_protocol}). % The currently-active protocol.
  
  
  % TODO:::::
  % I've misunderstood this a bit, and am going to have to make a few changes.
  % Basically, we can be involved with multiple protocols, but only one role
  % in each.
  % This will change the FSM / state a fair bit.
  %
  % Instead, we should always wait for synchronous invitation messages in
  % whichever state we're in, and accept if we're not involved in that
  % protocol type already.
  %
  % Really, we should move from gen_fsm to gen_server.
  % Each actor can only play one role per protocol, but can partake in multiple
  % protocols. This means that basically what we'll have to do is change
  % available_roles to available_protocols, where each entry is a
  % {ProtocolName, RoleName} pair.
  %
  % New state:
  % Actor PID (as before)
  % Actor type name (as before)
  % Protocol <-|-> Conversation ID mapping (as we can be involved in mult protocols)
  
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
  