anchor.diff:              _ -> false
           end,
       case Check of
  -        false -> dependent(Trans1, Trans2, false, true);
  +        false -> dependent(Trans1, Trans2, ?DONT_CHECK_MSG, ?ONLY_INITIALLY);
           {Msgs1, Msgs2} ->
               Lids1 = ordsets:from_list(orddict:fetch_keys(Msgs1)),
               Lids2 = ordsets:from_list(orddict:fetch_keys(Msgs2)),
               case ordsets:intersection(Lids1, Lids2) of
  -                [] -> dependent(Trans1, Trans2, false, true);
  +                [] ->
  +                    dependent(Trans1, Trans2, ?DONT_CHECK_MSG, ?ONLY_INITIALLY);
                   [Key] ->
  +                    %% XXX: Can be refined
                       case {orddict:fetch(Key, Msgs1), orddict:fetch(Key, Msgs2)} of
                           {[V1], [V2]} ->
                               LockReleaseAtom = lock_release_atom(),
                               V1 =/= LockReleaseAtom andalso V2 =/= LockReleaseAtom;
                           _Else -> true
                       end;
  -                _ -> true
  +                _ -> true %% XXX: Can be refined
               end
       end;
   
  
positive.code:             lists:foldl(Fold, false, Keys)
      end;
  dependent_ets({insert_new, [_, _, _, _, _, false]},
                {insert_new, [_, _, _, _, _, false]}, false) ->
      false;
  dependent_ets({insert_new, [T, _, Keys1, KP, _Objects1, _Status1]},
                {insert_new, [T, _, Keys2, KP, _Objects2, _Status2]}, false) ->
      ordsets:intersection(Keys1, Keys2) =/= [];
  dependent_ets({insert_new, [T, _, Keys1, KP, _Objects1, _Status1]},
                {insert, [T, _, Keys2, KP, _Objects2, true]}, _Swap) ->
      ordsets:intersection(Keys1, Keys2) =/= [];
  dependent_ets({Insert, [T, _, Keys, _KP, _Objects1, true]},
                {lookup, [T, _, K]}, _Swap)
    when Insert =:= insert; Insert =:= insert_new ->
      ordsets:is_element(K, Keys);
  dependent_ets({delete, [T, _]}, {_, [T|_]}, _Swap) ->
      true;
  dependent_ets({new, [_Tid1, Name, Options1]},
                {new, [_Tid2, Name, Options2]}, false) ->
      lists:member(named_table, Options1) andalso
          lists:member(named_table, Options2);
  dependent_ets(Op1, Op2, false) ->
      dependent_ets(Op2, Op1, true);
  dependent_ets(_Op1, _Op2, true) ->
      false.
  
negative.code: %% Sending the message that triggered a receive's 'had_after'
  dependent({ Lid1,         Instr1, PreMsgs1} = Trans1,
            { Lid2, {Tag, Info},   _Msgs2} = Trans2,
            CheckMsg, AllowSwap) when
        Tag =:= 'after';
        (Tag =:= 'receive' andalso
         element(1, Info) =:= had_after andalso
  