anchor.diff:  
   %%--------------------------------------------------------------------
   %% @doc
  +%% Creates label with part used to choose node.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec create_label(binary(), binary()) -> binary().
  +create_label(HashPart, Tail) ->
  +    <<?HASH_SEPARATOR, HashPart/binary, Tail/binary>>.
  +
  +%%--------------------------------------------------------------------
  +%% @doc
  +%% Gets part of the label used to choose node.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec get_label_hash_part(binary()) -> binary() | undefined.
  +get_label_hash_part(Label) ->
  +    case binary:split(Label, ?HASH_SEPARATOR_BIN) of
  +        [_, Hash | _] ->
  +            binary:part(Hash, 0, ?HASH_LENGTH);
  +        _ ->
  +            undefined
  +    end.
  +
  +%%--------------------------------------------------------------------
  +%% @doc
  +%% Verifies whether Label has hash part (part used to choose node) defined.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec has_hash_part(term()) -> boolean().
  +has_hash_part(Label) when is_binary(Label) ->
  +    get_label_hash_part(Label) =/= undefined;
  +has_hash_part(_Label) ->
  +    false.
  +
  +%%--------------------------------------------------------------------
  +%% @doc
   %% Get number of bytes used to generate Index for binary labels.
   %% @end
   %%--------------------------------------------------------------------
  --spec get_label_gen_size() -> non_neg_integer().
  -get_label_gen_size() ->
  -    6.
  +-spec get_hash_part_length() -> non_neg_integer().
  +get_hash_part_length() ->
  +    ?HASH_LENGTH.
   
   %%%===================================================================
   %%% Internal functions
   %%%===================================================================
  +
  +%%--------------------------------------------------------------------
  +%% @private
  +%% @doc
  +%% Get key used to choose node.
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec get_key(term()) -> term().
  +get_key(Label) when is_binary(Label) ->
  +    case get_label_hash_part(Label) of
  +        undefined -> Label;
  +        Hash -> Hash
  +    end;
  +get_key(Label) ->
  +    Label.
   
   %%--------------------------------------------------------------------
   %% @private
  
positive.code: 
  %% API
  -export([init/1, cleanup/0, get_chash_ring/0, set_chash_ring/1, get_node/1,
      get_nodes/2, get_all_nodes/0, get_label_gen_size/0]).
  
  -define(SINGLE_NODE_CHASH(Node), Node).
  -define(IS_SINGLE_NODE_CHASH(CHash), is_atom(CHash)).
  
  %%%===================================================================
  %%% API
  
negative.code:             error(chash_ring_not_initialized);
          Node when ?IS_SINGLE_NODE_CHASH(Node) ->
              [Node];
          CHash ->
              Index = chash:key_of(get_key(Label)),
              lists:map(fun({_, Node}) -> Node end, chash:successors(Index, CHash, NodesNum))
      end.
  
  