Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 291393) +++ apps/app_voicemail.c (working copy) @@ -11396,7 +11396,7 @@ { struct ast_vm_user *current; struct ast_config *cfg, *ucfg; - char *cat; + char *cat, *mailbox, *vmcontext; struct ast_variable *var; const char *val; char *q, *stringp, *tmp; @@ -11940,10 +11940,22 @@ for (cat = ast_category_browse(ucfg, NULL); cat ; cat = ast_category_browse(ucfg, cat)) { if (!ast_true(ast_config_option(ucfg, cat, "hasvoicemail"))) continue; - if ((current = find_or_create(userscontext, cat))) { + mailbox = cat; + vmcontext = userscontext; + /* override mailbox name when 'mailbox' config option is found */ + if ((tmp = (char *)ast_config_option(ucfg, cat, "mailbox"))) { + if (strchr(tmp, '@')) { /* split into mailbox & context */ + mailbox = strsep(&tmp, "@"); + vmcontext = tmp; + } else { /* no '@' char, only mailbox given */ + mailbox = tmp; + } + } + + if ((current = find_or_create(vmcontext, mailbox))) { populate_defaults(current); apply_options_full(current, ast_variable_browse(ucfg, cat)); - ast_copy_string(current->context, userscontext, sizeof(current->context)); + ast_copy_string(current->context, vmcontext, sizeof(current->context)); if (!ast_strlen_zero(current->password) && current->passwordlocation == OPT_PWLOC_VOICEMAILCONF) { current->passwordlocation = OPT_PWLOC_USERSCONF; }