anchor.diff:                end, Acc, vmq_session).
   
   
  --spec add_subscriber(topic(), qos(), subscriber_id()) -> ok.
  -add_subscriber(Topic, QoS, SubscriberId) ->
  +-spec add_subscriber([{topic(), qos()}], subscriber_id()) -> ok.
  +add_subscriber(Topics, SubscriberId) ->
       NewSubs =
       case plumtree_metadata:get(?SUBSCRIBER_DB, SubscriberId) of
           undefined ->
  -            [{Topic, QoS, node()}];
  +            [{Topic, QoS, node()} || {Topic, QoS} <- Topics];
           Subs ->
  -            lists:usort([{Topic, QoS, node()}|Subs])
  +            lists:foldl(fun({Topic, QoS}, NewSubsAcc) ->
  +                                NewSub = {Topic, QoS, node()},
  +                                case lists:member(NewSub, NewSubsAcc) of
  +                                    true -> NewSubsAcc;
  +                                    false ->
  +                                        [NewSub|NewSubsAcc]
  +                                end
  +                        end, Subs, Topics)
       end,
       plumtree_metadata:put(?SUBSCRIBER_DB, SubscriberId, NewSubs).
   
  
positive.code: del_subscriber(SubscriberId) ->
      plumtree_metadata:delete(?SUBSCRIBER_DB, SubscriberId).
  
  -spec del_subscriber(topic() | '_' , subscriber_id()) -> ok.
  del_subscriber(Topic, SubscriberId) ->
      Subs = plumtree_metadata:get(?SUBSCRIBER_DB, SubscriberId, [{default, []}]),
      NewSubs = [Sub || {T, _, N} = Sub <- Subs, (T /= Topic) and (N /= node())],
      plumtree_metadata:put(?SUBSCRIBER_DB, SubscriberId, NewSubs).
  
  -spec remap_subscription(subscriber_id(), atom()) -> ok | {error, overloaded}.
  
negative.code: unsubscribe_op(User, SubscriberId, Topics) ->
      rate_limited_op(
        fun() ->
                del_subscriptions(Topics, SubscriberId)
        end,
        fun(_) ->
                _ = [vmq_exo:decr_subscription_count() || _ <- Topics],
  