anchor.diff:          {'receive', Info} when
                 Info =:= unblocked;
                 Info =:= had_after ->
  -            {case Info of
  -                 unblocked -> Backtrack;
  -                 had_after -> ordsets:add_element(Lid, Backtrack)
  -             end,
  +            {NewBacktrack, NewSleepSet} =
  +                case Info of
  +                    unblocked -> {Backtrack, SleepSet};
  +                    had_after ->
  +                        case ordsets:is_element(Lid, SleepSet) of
  +                            true ->
  +                                {Backtrack,
  +                                 ordsets:del_element(Lid, SleepSet)};
  +                            false ->
  +                                {ordsets:add_element(Lid, Backtrack),
  +                                 SleepSet}
  +                        end
  +                end,
  +            {NewBacktrack,
  +             NewSleepSet,
                ordsets:del_element(Lid, Pollable),
                ordsets:del_element(Lid, Blocked),
                ordsets:add_element(Lid, Enabled),
  
positive.code:           trace       = []    :: [trace_state()],
            must_replay = false :: boolean(),
            proc_before = []    :: [pid()],
            fake_dpor   = false :: boolean()
           }).
  
  %% STUB
  interleave_dpor(Target, _PreBound, DporFake) ->
      ?f_debug("Interleave dpor!\n"),
      Procs = processes(),
      %% To be able to clean up we need to be trapping exits...
  
negative.code:      TraceTop#trace_state{pollable = NewPollable,
                            blocked = NewBlocked,
                            enabled = NewEnabled,
                            sleep_set = NewSleepSet,
                            nexts = NewNexts}}.
  
  poll_all(Lid, {Backtrack, SleepSet, Pollable, Blocked, Enabled, Nexts} = Original) ->
      ?f_debug("Poll ~p: ",[Lid]),
      Res = poll(Lid),
      ?f_debug("~p\n",[Res]),
  