anchor.diff:      self() ! {force_subscribe, Topic1, Qos}.
   
   start_keepalive(0) -> ignore;
  +
   start_keepalive(Sec) when Sec > 0 ->
       self() ! {keepalive, start, round(Sec * 1.5)}.
   
  
positive.code:             send(?SUBACK_PACKET(PacketId, GrantedQos), State#proto_state{session = NewSession})
      end;
  
  handle({subscribe, Topic, Qos}, State = #proto_state{clientid = ClientId, session = Session}) ->
      {ok, NewSession, _GrantedQos} = emqttd_session:subscribe(Session, [{Topic, Qos}]),
      {ok, State#proto_state{session = NewSession}};
  
  
negative.code: 
  %%TODO: will be fixed in 0.8
  force_subscribe(ClientId) ->
      [force_subscribe(ClientId, {Topic, Qos}) || {Topic, Qos} <- 
          proplists:get_value(forced_subscriptions, emqttd:env(mqtt, client), [])].
  
  force_subscribe(ClientId, {Topic, Qos}) when is_list(Topic) ->
      force_subscribe(ClientId, {list_to_binary(Topic), Qos});
  