anchor.diff:      {stop, Reason :: term()} | ignore).
   init([ConnPid,ClientId,CleanSession]) ->
       self() ! {async_init,ClientId},
  -    {ok, #state{sender_pid = ConnPid, session = mqtt_session:new(ClientId,CleanSession)}}.
  +    {ok, #state{sender = ConnPid, session = mqtt_session:new(ClientId,CleanSession)}}.
   
   %%--------------------------------------------------------------------
   %% @private
  
positive.code: handle_call({pub_rec,PacketId}, _From,  S = #state{session = SO}) ->
      NewSession =
          case mqtt_session:message_pub_rec(SO,PacketId) of
              {ok,S01} ->   maybe_persist(S01);
              duplicate ->  SO
          end,
      %% ALWAYS respond with PubRel
  
negative.code:     {stop, Reason :: term(), Reply :: term(), NewState :: #state{}} |
      {stop, Reason :: term(), NewState :: #state{}}).
  
  handle_call({push_reliable, CTRPacket,QoS}, _From, S = #state{session = SO, sender = Sender})
      when QoS =:= 1; QoS =:= 2 ->
      error_logger:info_msg("Pushing packet ~p with QoS = ~p~n",[CTRPacket,QoS]),
      {Result,SO1} = maybe_push_msg(SO,Sender,CTRPacket,false,QoS),
      {reply,Result,S#state{session = SO1}};
  
  handle_call({append_comp,Ref}, _From,  S = #state{session = SO}) ->
      SO1 = mqtt_session:append_message_comp(SO,Ref),
  