anchor.diff:          bp_active(Message, State,
                     {Options, Slowest, {RemainingBPs, BPActive, HB_BP_Ops, BPStepped, StepperPid}}).
   
  +-spec wait_for_bp_leave(comm:message(), any(), component_state(), boolean())
  +                       -> component_state().
   wait_for_bp_leave(_Message, _State, ComponentState, _BP_Active = false) ->
       ComponentState;
   wait_for_bp_leave(Message, State, ComponentState, _BP_Active = true) ->
  
positive.code:             erlang:Level(Reason)
      end.
  
  try_loop(Module, On, State, {_Options, _Slowest, _BPState} = ComponentState) ->
      try loop(Module, On, State, ComponentState)
      catch Level:Reason ->
  
negative.code:            [UnknownMessage,Module,On,self(), pid_groups:group_and_name_of(self()), State]),
      {State, ComponentState}.
  
  -spec bp_state_new() -> bp_state().
  bp_state_new() ->
      {_BPs = [], _BPActive = false,
       _BP_HB_Q = [], _BPStepped = false,
       _BPStepperPid = unknown}.
  -spec bp_state_get_bps(bp_state()) -> [bp()].
  bp_state_get_bps(BPState) -> element(1, BPState).
  -spec bp_state_set_bps(bp_state(), [bp()]) -> bp_state().
  bp_state_set_bps(BPState, Val) -> setelement(1, BPState, Val).
  -spec bp_state_get_bpactive(bp_state()) -> boolean().
  bp_state_get_bpactive(BPState) -> element(2, BPState).
  -spec bp_state_set_bpactive(bp_state(), boolean()) -> bp_state().
  bp_state_set_bpactive(BPState, Val) -> setelement(2, BPState, Val).
  -spec bp_state_get_queue(bp_state()) -> [bp_message()].
  bp_state_get_queue(BPState) -> element(3, BPState).
  -spec bp_state_set_queue(bp_state(), [bp_message()]) -> bp_state().
  bp_state_set_queue(BPState, Val) -> setelement(3, BPState, Val).
  -spec bp_state_get_bpstepped(bp_state()) -> boolean().
  bp_state_get_bpstepped(BPState) -> element(4, BPState).
  -spec bp_state_set_bpstepped(bp_state(), boolean()) -> bp_state().
  bp_state_set_bpstepped(BPState, Val) -> setelement(4, BPState, Val).
  -spec bp_state_get_bpstepper(bp_state()) -> pid() | 'unknown'.
  bp_state_get_bpstepper(BPState) -> element(5, BPState).
  -spec bp_state_set_bpstepper(bp_state(), pid() | 'unknown') -> bp_state().
  bp_state_set_bpstepper(BPState, Val) -> setelement(5, BPState, Val).
  -spec bp_state_bp_set_cond(bp_state(), fun(), bp_name()) -> bp_state().
  bp_state_bp_set_cond(BPState, Cond, BPName) ->
      NewBPs = [ {bp_cond, Cond, BPName} | bp_state_get_bps(BPState)],
      bp_state_set_bps(BPState, NewBPs).
  
  -spec bp_state_bp_set(bp_state(), comm:message_tag(), bp_name()) -> bp_state().
  bp_state_bp_set(BPState, MsgTag, BPName) ->
      NewBPs = [ {bp, MsgTag, BPName} | bp_state_get_bps(BPState)],
      bp_state_set_bps(BPState, NewBPs).
  -spec bp_state_bp_del(bp_state(), bp_name()) -> bp_state().
  bp_state_bp_del(BPState, BPName) ->
      NewBPs = lists:keydelete(BPName, 3, bp_state_get_bps(BPState)),
      bp_state_set_bps(BPState, NewBPs).
  -spec bp_state_hold_back(bp_state(), bp_message()) -> bp_state().
  bp_state_hold_back(BPState, Message) ->
      NewQueue = lists:append(bp_state_get_queue(BPState), [Message]),
      bp_state_set_queue(BPState, NewQueue).
  
  %% @doc release the bp_step function when we executed a bp_step
  -spec bp_step_done(module(), atom(), comm:message(), component_state())
                    -> component_state().
  bp_step_done(Module, On, Message, ComponentState) ->
      {Options, Slowest, BPState} = ComponentState,
      case {bp_state_get_bpactive(BPState),
  