anchor.diff:      end.
   
   join_labels(Labels) ->
  -    <<$., Dname/binary>> = << <<$., L/binary>> || L <- Labels >>,
  +    <<_, Dname/binary>> = << <<$., (escape_label(L))/binary>> || L <- Labels >>,
       Dname.
  +
  +escape_label(Label) -> escape_label(<<>>, Label).
  +escape_label(Label, <<>>) -> Label;
  +escape_label(Label, <<C, Rest/binary>>) ->
  +    NewLabel = case C of
  +		   $. -> <<Label/binary, $\\, $.>>;
  +		   _ -> <<Label/binary, C>>
  +	       end,
  +    escape_label(NewLabel, Rest).
   
   build_cuts(ZoneName, RRs) -> build_cuts(ZoneName, RRs, []).
   
  
positive.code: match_qtype(#ctx{}, _Type, #dnsxd_rr{}) -> false.
  
  match_down(#ctx{cuts = Cuts, names = Names, rr = RRs} = Q,
  	   LastDname, [Label]) ->
      LabelSize = byte_size(Label),
      Name = <<Label:LabelSize/binary, $., LastDname/binary>>,
      WName = <<"*.", LastDname/binary>>,
  
negative.code: 	false -> nomatch
      end;
  match_down(#ctx{cuts = Cuts, names = Names, rr = RRs} = Q, LastDname,
  	   [RawLabel|Labels]) ->
      Label = escape_label(RawLabel),
      LabelSize = byte_size(Label),
      Name = <<Label:LabelSize/binary, $., LastDname/binary>>,
      NameIsCut = lists:member(Name, Cuts),
  