anchor.diff:      Port = proplists:get_value(port, Args, 5280),
       Path = proplists:get_value(path, Args, <<"/http-bind">>),
       HostStr = binary_to_list(Host),
  +    {MS, S, MMS} = now(),
  +    InitRid = MS * 1000000 * 1000000 + S * 1000000 + MMS,
       {ok, Parser} = exml_stream:new_parser(),
       {ok, #state{owner = Owner,
                   url = {HostStr, Port, binary_to_list(Path)},
  -                parser = Parser}}.
  +                parser = Parser, rid=InitRid}}.
   
   handle_call(get_transport, _From, State) ->
       {reply, transport(State), State};
   handle_call(stop, _From, #state{url = Socket} = State) ->
       StreamEnd = lxmppc_stanza:stream_end(),
  -    send(Socket, exml:to_iolist(StreamEnd)),
  +    send0(transport(State), exml:to_iolist(StreamEnd), State),
       {stop, normal, ok, State}.
   
  -handle_cast({send, Transport, Elem}, #state{owner=Owner} = State) when
  +handle_cast({send, Transport, Elem}, #state{owner=Owner, rid=Rid} = State) when
           is_record(Elem, xmlstreamstart) ->
  -        [InitBody] = send0(Transport, Elem, State),
  -        NewState = State#state{sid = exml_query:attr(InitBody, <<"sid">>)},
  +        InitBody = send0(Transport, Elem, State),
  +        NewState = State#state{rid=Rid+1,
  +                               sid = exml_query:attr(InitBody, <<"sid">>)},
           %%fake stanza with features, clients waits for it
  -        Owner ! {stanza, transport(State), #xmlelement{
  -            name = <<"stream:features">>,
  -            attrs= [], body = []}},
           {noreply, NewState};
   handle_cast({send, Transport, Elem}, State) ->
  -    spawn(fun() ->
  -            send0(Transport, Elem, State)
  -    end),
  -    {noreply, State};
  +    send0(Transport, Elem, State),
  +    {noreply, State#state{rid=State#state.rid+1}};
   handle_cast(reset_parser, #state{parser = Parser} = State) ->
       {ok, NewParser} = exml_stream:reset_parser(Parser),
       {noreply, State#state{parser = NewParser}}.
  
positive.code: -define(WAIT_FOR_SOCKET_CLOSE_TIMEOUT, 200).
  -define(SERVER, ?MODULE).
  
  -record(state, {owner, url, parser, sid = nil}).
  
  %%%===================================================================
  %%% API
  
negative.code: %%%===================================================================
  %%% Helpers
  %%%===================================================================
  send0(#transport{socket = {Host, Port, Path}} = Transport, Elem0, #state{parser = Parser} = State) ->
      Headers = [{"Content-Type", "text/xml; charset-utf-8"}],
      Elem = wrap_elem(Elem0, State),
      {ok, {{StatusCode, Reason}, Hdrs, RespBody}} =
          lhttpc:request(Host, Port, false, Path, 'POST',
              Headers, exml:to_iolist(Elem), infinity, []),
      handle_data(RespBody, State).
  
  handle_data(Data, #state{owner = Owner,
                                   parser = Parser} = State) ->
      {ok, Body} = exml:parse(Data),
      Stanzas = unwrap_elem(Body),
      lists:foreach(fun(Stanza) ->
          Owner ! {stanza, transport(State), Stanza}
      end, Stanzas),
      Body.
  
  transport(#state{url = Url}) ->
      #transport{module = ?MODULE,
  