anchor.diff:                      {nop, []}
               end
       end.
  +
  +sanitize_callback(Element, Context) when is_tuple(Context), element(1, Context) =:= context ->
  +    z_notifier:foldl(sanitize_element, Element, Context);
  +sanitize_callback(Element, Options) ->
  +    case proplists:get_value(element, Options) of
  +        undefined -> Element;
  +        F when is_function(F) -> F(Element);
  +        {M,F,A} -> erlang:apply(M, F, [Element|A])
  +    end.
  +
   
   %% @doc Flatten the sanitized html tree to a binary 
   flatten(B) when is_binary(B) ->
  
positive.code:             Tag = { Elt, 
                      Attrs1,
                      [ sanitize(Encl, Stack1, ExtraElts, ExtraAttrs, Options) || Encl <- Enclosed ]},
              case Options of
                  T when is_tuple(T), element(1, T) =:= context -> 
                      z_notifier:foldl(sanitize_element, Tag, Options);
                  _ ->
                      case proplists:get_value(element, Options) of
                          undefined -> Tag;
                          F when is_function(F) -> F(Tag);
                          {M,F,A} -> erlang:apply(M, F, [Tag|A])
                      end
              end;
          false ->
              case skip_contents(Elt) of
                  false ->
  
negative.code:     Sanitized = sanitize(Parsed, [], ExtraElts, ExtraAttrs, Options),
      flatten(Sanitized).
  
  sanitize(B, _Stack, _ExtraElts, _ExtraAttrs, Options) when is_binary(B) ->
      case sanitize_callback({'TextNode', B}, Options) of
          {'TextNode', B1} -> escape(iolist_to_binary(B1));
          Other -> Other
      end; 
  sanitize({comment, _Text} = Comment, _Stack, _ExtraElts, _ExtraAttrs, Options) ->
      sanitize_callback(Comment, Options);
  sanitize({pi, _Raw}, _Stack, _ExtraElts, _ExtraAttrs, _Options) ->
      <<>>;
  sanitize({pi, _Tag, _Attrs}, _Stack, _ExtraElts, _ExtraAttrs, _Options) ->
  