anchor.diff:      escape_props(V, Options);
   escape_props1(K, V, Options) ->
       Type = lists:last(binary:split(K, <<"_">>, [global])),
  -    case Type of
  -        <<"html">> -> sanitize(V, Options);
  -        <<"uri">> -> escape_value(sanitize_uri(V));
  -        <<"url">> -> escape_value(sanitize_uri(V));
  -        _ -> escape_value(V)
  -    end.
  -
  +    sanitize_type(Type, V, Options).
  +
  +sanitize_type(<<"html">>, V, Options) -> sanitize(V, Options);
  +sanitize_type(<<"uri">>, V, _Options) -> escape_value(sanitize_uri(V));
  +sanitize_type(<<"url">>, V, _Options) -> escape_value(sanitize_uri(V));
  +sanitize_type(<<"list">>, V, Options) -> sanitize_list(V, Options);
  +sanitize_type(<<"int">>, V, _Options) -> sanitize_int(V);
  +sanitize_type(_, V, _Options) -> escape_value(V).
  +
  +sanitize_list(L, Options) when is_list(L) ->
  +    lists:map(
  +        fun
  +            ({P, V}) ->
  +                P1 = z_convert:to_binary(P),
  +                V1 = escape_props1(P1, V, Options),
  +                {P1, V1};
  +            (V) ->
  +                escape_value(V)
  +        end,
  +        L);
  +sanitize_list(Map, Options) when is_map(Map) ->
  +    sanitize_list(maps:to_list(Map), Options);
  +sanitize_list(undefined, _Options) ->
  +    undefined;
  +sanitize_list(V, Options) ->
  +    sanitize_list([V], Options).
  +
  +sanitize_int(V) ->
  +    try
  +        z_convert:to_integer(V)
  +    catch
  +        _:_ -> undefined
  +    end.
  +
  +escape_value(undefined) -> undefined;
  +escape_value(null) -> null;
  +escape_value(V) when is_boolean(V) -> V;
  +escape_value(V) when is_number(V) -> V;
  +escape_value(V) when is_atom(V) ->
  +    escape( atom_to_binary(V, utf8) );
   escape_value({trans, _Ts} = Tr) ->
       escape(Tr);
   escape_value(V) when is_list(V) ->
       try
  -        escape_value(iolist_to_binary(V))
  +        escape_value(unicode:characters_to_binary(V))
       catch _:_ ->
           V
       end;
  
positive.code:         end,
          Props).
  
  escape_props1(_K, V, _Options) when is_float(V); is_integer(V); is_atom(V) ->
      V;
  escape_props1(<<"body", _/binary>>, V, Options) ->
      sanitize(V, Options);
  escape_props1(<<"summary">>, Summary, _Options) ->
  
negative.code:     escape(B);
  escape_value(V) ->
      V.
  
  %% @doc Checks if all properties are properly escaped
  -spec escape_props_check(list() | map()) -> list() | map().
  