anchor.diff:                  end,
               NewOutPorts = lists:usort(lists:map(fun fc_utils:id_to_port_no/1, OutPorts)
                                         ++ ExistingOutports),
  +            DecodedMatches = dofl_identifier:decode_matches(Matches),
               {SwitchId, ?OF_VERSION,
  -             {Matches,
  +             {DecodedMatches,
                 [{apply_actions,
                   [{output, OutPort, no_buffer} || OutPort <- NewOutPorts]}],
                 %% XXX: should we take priority of existing rule into account?
  
positive.code:     OutPortNo = fc_utils:id_to_port_no(OutPort),
      %% First, check if there is already a flow rule with the same
      %% match.
      ExistingFlowRule =
          dby:search(
            fun(Id, _NodeMetadata, [], Acc) when Id =:= SwitchId ->
                    %% Starting point. Go on.
  
negative.code:               [{apply_actions,
                  [{output, fc_utils:id_to_port_no(OutPort), no_buffer} || OutPort <- OutPorts]}],
                [{table_id, 0}, {cookie, unique_cookie()}, {priority, DefaultPriority}]}};
          {EncodedCookie, Matches, Instructions} ->
              Cookie = decode_cookie(EncodedCookie),
              ExistingOutports =
                  case [Instruction ||
                           Instruction = #{<<"instruction">> := <<"apply_actions">>} <- Instructions] of
  