anchor.diff:  %% Returns : Spec
   %%--------------------------------------------------------------------
   yxa_init() ->
  -    Modules = sipserver:get_env(userdb_modules, [sipuserdb_mnesia]),
  +    Modules = sipserver:get_env(userdb_modules, ?DEFAULT_MODULES),
       Res = lists:foldl(fun(M, Acc) ->
   			      Acc ++ apply(M, yxa_init, [])
   		      end, [], Modules),
       Res.
   
  -%% Looks up exactly one user with an Address. Used
  -%% for example in REGISTER. If there are multiple
  -%% users with an address, this function returns {error}.
  +%%--------------------------------------------------------------------
  +%% Function: get_user_with_address(Address)
  +%%           Address = string(), an address in string format.
  +%% Descrip.: Looks up exactly one user with an Address. Used for
  +%%           example in REGISTER. If there are multiple users with
  +%%           this address in our database, this function returns
  +%%           'error'.
  +%% Returns:  Username               |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Username = string()
  +%%--------------------------------------------------------------------
   get_user_with_address(Address) ->
       {Src, Res} = module_apply(get_user_with_address, [Address]),
       logger:log(debug, "Userdb: ~p:get_user_with_address ~p -> ~p", [Src, Address, Res]),
       Res.
   
  -%% Looks up all users with a given address. Used
  -%% to find out to which users we should send a request.
  +%%--------------------------------------------------------------------
  +%% Function: get_users_for_address_of_record(Address)
  +%%           Address = string(), an address in string format.
  +%% Descrip.: Get all usernames of users matching an address. Used to
  +%%           find out to which users we should send a request.
  +%% Returns : Users                  |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Users = list() of string() 
  +%%--------------------------------------------------------------------
   get_users_for_address_of_record(Address) ->
       {Src, Res} = module_apply(get_users_for_address_of_record, [Address]),
       logger:log(debug, "Userdb: ~p:get_users_for_address_of_record ~p -> ~p", [Src, Address, Res]),
       Res.
   
  +%%--------------------------------------------------------------------
  +%% Function: get_users_for_addresses_of_record(Addresses)
  +%%           Addresses = list() of string(), addresses in string
  +%%                       format.
  +%% Descrip.: Iterate over a list of addresses of record, return
  +%%           all users matching one or more of the addresses,
  +%%           without duplicates.
  +%% Returns : Users                  |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Users = list() of string() 
  +%%--------------------------------------------------------------------
   get_users_for_addresses_of_record(Addresses) ->
       {Src, Res} = module_apply(get_users_for_addresses_of_record, [Addresses]),
       logger:log(debug, "Userdb: ~p:get_users_for_addresses_of_record ~p -> ~p", [Src, Addresses, Res]),
       Res.
   
  -%% Gets all addresses for a user. Used for example
  -%% to check if a request from a user has an acceptable
  -%% From: header.
  +%%--------------------------------------------------------------------
  +%% Function: get_addresses_for_user(User)
  +%%           User = string()
  +%% Descrip.: Get all possible addresses of a user. Both configured
  +%%           ones, and implicit ones. Used for example to check if a
  +%%           request from a user has an acceptable From: header.
  +%% Returns : Addresses              |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Addresses = list() of string()
  +%%--------------------------------------------------------------------
   get_addresses_for_user(User) ->
       {Src, Res} = module_apply(get_addresses_for_user, [User]),
       logger:log(debug, "Userdb: ~p:get_addresses_for_user ~p -> ~p", [Src, User, Res]),
       Res.
   
  +%%--------------------------------------------------------------------
  +%% Function: get_addresses_for_users(UserList)
  +%%           UserList = list() of string(), usernames
  +%% Descrip.: Iterate over a list of users, return all their
  +%%           addresses without duplicates.
  +%% Returns : Addresses |
  +%%           nomatch   |
  +%%           throw({siperror, ...})
  +%%           error
  +%%           Addresses = list() of string()
  +%%--------------------------------------------------------------------
   get_addresses_for_users(Users) ->
       {Src, Res} = module_apply(get_addresses_for_users, [Users]),
       logger:log(debug, "Userdb: ~p:get_addresses_for_users ~p -> ~p", [Src, Users, Res]),
       Res.
   
   
  -%% Gets all users for an URL. Used to route incoming requests.
  +%%--------------------------------------------------------------------
  +%% Function: get_users_for_url(URL)
  +%%           URL = sipurl record()
  +%% Descrip.: Given an URL that is typically the Request-URI of an
  +%%           incoming request, make a list of implicit user
  +%%           addresses and return a list of all users matching any
  +%%           of these addresses. This is located in here since
  +%%           user database backends can have their own way of
  +%%           deriving addresses from a Request-URI.
  +%% Returns : Usernames              |
  +%%           nomatch                |
  +%%           throw({siperror, ...})
  +%%           Usernames = list() of string()
  +%%--------------------------------------------------------------------
   get_users_for_url(URL) ->
       {Src, Res} = module_apply(get_users_for_url, [URL]),
       logger:log(debug, "Userdb: ~p:get_users_for_url ~p -> ~p", [Src, sipurl:print(URL), Res]),
  
positive.code: 	]).
  
  -export([behaviour_info/1]).
  
  %%--------------------------------------------------------------------
  %% Function: behaviour_info(callbacks)
  
negative.code: %% Attribute fetching functions :
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  %%--------------------------------------------------------------------
  %% Function: get_password_for_user(Username)
  %%           Username = string()
  %% Descrip.: Returns the password for a user.
  %% Returns : Password               |
  %%           nomatch                |
  %%           throw({siperror, ...})
  %%           Password = string()
  %%--------------------------------------------------------------------
  get_password_for_user(User) ->
      {Src, Res} = module_apply(get_password_for_user, [User]),
      ResStr = case Res of
  