anchor.diff:  			exit(Reason)
   	end.
   
  --spec add_subscriber(Identity, Password, Attributes) -> Result
  +-spec add_subscriber(Identity, Password, Product) -> Result
   	when
   		Identity :: string() | binary(),
   		Password :: string() | binary(),
  -		Attributes :: radius_attributes:attributes() | binary(),
  +		Product :: string(),
   		Result :: {ok, #subscriber{}} | {error, Reason},
   		Reason :: term().
  -%% @equiv add_subscriber(Identity, Password, Attributes, [], undefined, true, false)
  -add_subscriber(Identity, Password, Attributes) ->
  -	add_subscriber(Identity, Password, Attributes, [], undefined, true, false).
  -
  --spec add_subscriber(Identity, Password, Attributes, Buckets) -> Result
  +%% @equiv add_subscriber(Identity, Password, Product, [], [], true, false)
  +add_subscriber(Identity, Password, Product) ->
  +	add_subscriber(Identity, Password, Product, [], [], true, false).
  +
  +-spec add_subscriber(Identity, Password, Product, Buckets) -> Result
   	when 
   		Identity :: string() | binary(),
   		Password :: string() | binary(),
  -		Attributes :: radius_attributes:attributes() | binary(),
  +		Product :: string(),
   		Buckets :: [#bucket{}],
   		Result :: {ok, #subscriber{}} | {error, Reason},
   		Reason :: term().
  -%% @equiv add_subscriber(Identity, Password, Attributes, Buckets, Product, true, false)
  -add_subscriber(Identity, Password, Attributes, Buckets) ->
  -	add_subscriber(Identity, Password, Attributes, Buckets, undefined, true, false).
  -
  --spec add_subscriber(Identity, Password, Attributes,
  -		Buckets, Product, EnabledStatus, MultiSessions) -> Result
  +%% @equiv add_subscriber(Identity, Password, Product, Buckets, [], true, false)
  +add_subscriber(Identity, Password, Product, Buckets) ->
  +	add_subscriber(Identity, Password, Product, Buckets, [], true, false).
  +
  +-spec add_subscriber(Identity, Password, Product, Buckets, Attributes) -> Result
   	when 
  +		Identity :: string() | binary(),
  +		Password :: string() | binary(),
  +		Product :: string(),
  +		Buckets :: [#bucket{}],
  +		Attributes :: radius_attributes:attributes() | binary(),
  +		Result :: {ok, #subscriber{}} | {error, Reason},
  +		Reason :: term().
  +%% @equiv add_subscriber(Identity, Password, Product, Buckets, Attributes, true, false)
  +add_subscriber(Identity, Password, Product, Buckets, Attributes) ->
  +	add_subscriber(Identity, Password, Product, Buckets, Attributes, true, false).
  +
  +-spec add_subscriber(Identity, Password, Product,
  +		Buckets, Attributes, EnabledStatus, MultiSessions) -> Result
  +	when
   		Identity :: string() | binary() | undefined,
   		Password :: string() | binary() | undefined,
  -		Attributes :: radius_attributes:attributes() | binary(),
   		Product :: string() | undefined,
   		Buckets :: [#bucket{}] | undefined,
  +		Attributes :: radius_attributes:attributes() | binary(),
   		EnabledStatus :: boolean() | undefined,
   		MultiSessions :: boolean(),
   		Result :: {ok, #subscriber{}} | {error, Reason},
  
positive.code: %% 	An initial account `Bucket', `Product' key for product reference
  %%		`Enabled' status and `MultiSessions' status may be provided.
  %%
  add_subscriber(Identity, Password, Attributes, Buckets, Product, EnabledStatus, undefined) ->
  	add_subscriber(Identity, Password, Attributes, Buckets, Product, EnabledStatus, false);
  add_subscriber(Identity, Password, Attributes, Buckets, Product, undefined, MultiSession) ->
  	add_subscriber(Identity, Password, Attributes, Buckets, Product, true, MultiSession);
  add_subscriber(Identity, Password, Attributes, Buckets, undefined, EnabledStatus, MultiSession) ->
  	add_subscriber(Identity, Password, Attributes, Buckets, "", EnabledStatus, MultiSession);
  add_subscriber(Identity, Password, Attributes, undefined, Product, EnabledStatus, MultiSession) ->
  	add_subscriber(Identity, Password, Attributes, [], Product, EnabledStatus, MultiSession);
  add_subscriber(Identity, Password, undefined, Buckets, Product, EnabledStatus, MultiSession) ->
  	add_subscriber(Identity, Password, [], Buckets, Product, EnabledStatus, MultiSession);
  add_subscriber(Identity, undefined, Attributes, Buckets, Product, EnabledStatus, MultiSession) ->
  	add_subscriber(Identity, ocs:generate_password(),
  			Attributes, Buckets, Product, EnabledStatus, MultiSession);
  add_subscriber(Identity, Password, Attributes, Buckets, Product, EnabledStatus, MultiSession)
  		when is_list(Identity) ->
  	add_subscriber(list_to_binary(Identity), Password, Attributes, Buckets,
  			Product, EnabledStatus, MultiSession);
  add_subscriber(Identity, Password, Attributes, Buckets, Product, EnabledStatus, MultiSession)
  		when is_list(Password) ->
  	add_subscriber(Identity, list_to_binary(Password), Attributes, Buckets,
  			Product, EnabledStatus, MultiSession);
  add_subscriber(undefined, Password, Attributes, Buckets, Product, EnabledStatus, MultiSession)
  		when is_binary(Password), is_list(Attributes), is_list(Buckets), is_list(Product),
  		is_boolean(EnabledStatus), is_boolean(MultiSession) ->
  	F2 = fun() ->
  				case mnesia:read(product, Product, read) of
  
negative.code: 		{aborted, Reason} ->
  			{error, Reason}
  	end;
  add_subscriber(Identity, Password, Product, Buckets, Attributes, EnabledStatus, MultiSession)
  		when is_binary(Identity), is_binary(Password), is_list(Product),
  		is_list(Buckets), is_list(Attributes), is_boolean(EnabledStatus), is_boolean(MultiSession) ->
  	F1 = fun() ->
  				case mnesia:read(product, Product, read) of
  					[_] ->
  