anchor.diff:          _ -> false
       end.
   
  --spec can_use_compression(escalus_users:user_spec(), features()) -> boolean().
  +-spec can_use_compression(user_spec(), features()) -> boolean().
   can_use_compression(Props, Features) ->
       can_use(compression, Props, Features).
   
  +-spec can_use_stream_management(user_spec(), features()) -> boolean().
   can_use_stream_management(Props, Features) ->
       can_use(stream_management, Props, Features).
   
   can_use_carbons(Props, _Features) ->
       false /= proplists:get_value(carbons, Props, false).
   
  -can_use_amp(Props, Features) ->
  +-spec can_use_amp(user_spec(), features()) -> boolean().
  +can_use_amp(_Props, Features) ->
       false /= proplists:get_value(advanced_message_processing, Features).
   
   can_use(Feature, Props, Features) ->
       false /= proplists:get_value(Feature, Props, false) andalso
       false /= proplists:get_value(Feature, Features).
  -
  -
   
   %%%===================================================================
   %%% New style connection initiation
  
positive.code:         %% TODO: someday maybe lzw too
      end.
  
  session(Conn, Props) ->
      escalus_connection:send(Conn, escalus_stanza:session()),
      SessionReply = escalus_connection:get_stanza(Conn, session_reply),
      escalus:assert(is_iq_result, SessionReply),
      Props.
  
  use_ssl(Props, Features) ->
      UserNeedsSSL = proplists:get_value(starttls, Props, false),
      StreamAllowsSSL = proplists:get_value(starttls, Features),
  
negative.code: %%% Public API
  %%%===================================================================
  
  -spec start_stream(client(), user_spec()) -> {user_spec(), features()}.
  start_stream(Conn, Props) ->
      {server, Server} = lists:keyfind(server, 1, Props),
      XMLNS = case proplists:get_value(endpoint, Props) of
  