diff --git a/modules/webmessage/lib/webmessage.py b/modules/webmessage/lib/webmessage.py
index 223e1851e..6bb3e7fd1 100644
--- a/modules/webmessage/lib/webmessage.py
+++ b/modules/webmessage/lib/webmessage.py
@@ -1,481 +1,481 @@
 # -*- coding: utf-8 -*-
 ##
 ## This file is part of Invenio.
 ## Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 CERN.
 ##
 ## Invenio is free software; you can redistribute it and/or
 ## modify it under the terms of the GNU General Public License as
 ## published by the Free Software Foundation; either version 2 of the
 ## License, or (at your option) any later version.
 ##
 ## Invenio is distributed in the hope that it will be useful, but
 ## WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 ## General Public License for more details.
 ##
 ## You should have received a copy of the GNU General Public License
 ## along with Invenio; if not, write to the Free Software Foundation, Inc.,
 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 
 """ WebMessage module, messaging system"""
 
 __revision__ = "$Id$"
 
 import invenio.webmessage_dblayer as db
 from invenio.webmessage_config import CFG_WEBMESSAGE_STATUS_CODE, \
                                       CFG_WEBMESSAGE_RESULTS_FIELD, \
                                       CFG_WEBMESSAGE_SEPARATOR, \
                                       CFG_WEBMESSAGE_ROLES_WITHOUT_QUOTA, \
                                       InvenioWebMessageError
 from invenio.config import CFG_SITE_LANG, \
      CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE
 from invenio.messages import gettext_set_language
 from invenio.dateutils import datetext_default, get_datetext
 from invenio.htmlutils import escape_html
 from invenio.webuser import list_users_in_roles
 try:
     import invenio.template
     webmessage_templates = invenio.template.load('webmessage')
 except:
     pass
 from invenio.errorlib import register_exception
 
 def perform_request_display_msg(uid, msgid, ln=CFG_SITE_LANG):
     """
     Displays a specific message
     @param uid:   user id
     @param msgid: message id
 
     @return: body
     """
     _ = gettext_set_language(ln)
 
     body = ""
 
     if (db.check_user_owns_message(uid, msgid) == 0):
         # The user doesn't own this message
         try:
             raise InvenioWebMessageError(_('Sorry, this message in not in your mailbox.'))
         except InvenioWebMessageError, exc:
             register_exception()
             body = webmessage_templates.tmpl_error(exc.message, ln)
             return body
     else:
         (msg_id,
          msg_from_id, msg_from_nickname,
          msg_sent_to, msg_sent_to_group,
          msg_subject, msg_body,
          msg_sent_date, msg_received_date,
          msg_status) = db.get_message(uid, msgid)
 
         if (msg_id == ""):
             # The message exists in table user_msgMESSAGE
             # but not in table msgMESSAGE => table inconsistency
             try:
                 raise InvenioWebMessageError('This message does not exist.')
             except InvenioWebMessageError, exc:
                 register_exception()
                 body = webmessage_templates.tmpl_error(exc.message, ln)
                 return body
         else:
             if (msg_status == CFG_WEBMESSAGE_STATUS_CODE['NEW']):
                 db.set_message_status(uid, msgid,
                                       CFG_WEBMESSAGE_STATUS_CODE['READ'])
             body = webmessage_templates.tmpl_display_msg(
                                                 msg_id,
                                                 msg_from_id,
                                                 msg_from_nickname,
                                                 msg_sent_to,
                                                 msg_sent_to_group,
                                                 msg_subject,
                                                 msg_body,
                                                 msg_sent_date,
                                                 msg_received_date,
                                                 ln)
     return body
 
 def perform_request_display(uid, warnings=[], infos=[], ln=CFG_SITE_LANG):
     """
     Displays the user's Inbox
     @param uid:   user id
 
     @return: body with warnings
     """
     body = ""
     rows = []
     rows = db.get_all_messages_for_user(uid)
     nb_messages = db.count_nb_messages(uid)
     no_quota_users = list_users_in_roles(CFG_WEBMESSAGE_ROLES_WITHOUT_QUOTA)
     no_quota = False
     if uid in no_quota_users:
         no_quota = True
     body = webmessage_templates.tmpl_display_inbox(messages=rows,
                                                    infos=infos,
                                                    warnings=warnings,
                                                    nb_messages=nb_messages,
                                                    no_quota=no_quota,
                                                    ln=ln)
     return body
 
 def perform_request_delete_msg(uid, msgid, ln=CFG_SITE_LANG):
     """
     Delete a given message from user inbox
     @param uid: user id (int)
     @param msgid: message id (int)
     @param ln: language
     @return: body with warnings
     """
     _ = gettext_set_language(ln)
 
     warnings = []
     infos = []
     body = ""
 
     if (db.check_user_owns_message(uid, msgid) == 0):
         # The user doesn't own this message
         try:
             raise InvenioWebMessageError(_('Sorry, this message in not in your mailbox.'))
         except InvenioWebMessageError, exc:
             register_exception()
             body = webmessage_templates.tmpl_error(exc.message, ln)
             return body
     else:
         if (db.delete_message_from_user_inbox(uid, msgid) == 0):
             warnings.append(_("The message could not be deleted."))
         else:
             infos.append(_("The message was successfully deleted."))
     return perform_request_display(uid, warnings, infos, ln)
 
 def perform_request_delete_all(uid, confirmed=False, ln=CFG_SITE_LANG):
     """
     Delete every message for a given user
     @param uid: user id (int)
     @param confirmed: 0 will produce a confirmation message
     @param ln: language
     @return: body with warnings
     """
     infos = []
     warnings = []
     _ = gettext_set_language(ln)
     if confirmed:
         db.delete_all_messages(uid)
         infos = [_("Your mailbox has been emptied.")]
         return perform_request_display(uid, warnings, infos, ln)
     else:
         body = webmessage_templates.tmpl_confirm_delete(ln)
         return body
 
 def perform_request_write(uid,
                           msg_reply_id="",
                           msg_to="",
                           msg_to_group="",
                           msg_subject="",
                           msg_body="",
                           ln=CFG_SITE_LANG):
     """
     Display a write a message page.
 
     @param uid: user id.
     @type uid: int
     @param msg_reply_id: if this message is a reply to another, other's ID.
     @type msg_reply_id: int
     @param msg_to: comma separated usernames.
     @type msg_to: string
     @param msg_to_group: comma separated groupnames.
     @type msg_to_group: string
     @param msg_subject: message subject.
     @type msg_subject: string
     @param msg_body: message body.
     @type msg_body: string
     @param ln: language.
     @type ln: string
     @return: body with warnings.
     """
     warnings = []
     body = ""
     _ = gettext_set_language(ln)
     msg_from_nickname = ""
     msg_id = 0
     if (msg_reply_id):
         if (db.check_user_owns_message(uid, msg_reply_id) == 0):
             # The user doesn't own this message
             try:
                 raise InvenioWebMessageError(_('Sorry, this message in not in your mailbox.'))
             except InvenioWebMessageError, exc:
                 register_exception()
                 body = webmessage_templates.tmpl_error(exc.message, ln)
                 return body
         else:
             # dummy == variable name to make pylint and pychecker happy!
             (msg_id,
              msg_from_id, msg_from_nickname,
              dummy, dummy,
              msg_subject, msg_body,
              dummy, dummy, dummy) = db.get_message(uid, msg_reply_id)
             if (msg_id == ""):
                 # The message exists in table user_msgMESSAGE
                 # but not in table msgMESSAGE => table inconsistency
                 try:
                     raise InvenioWebMessageError('This message does not exist.')
                 except InvenioWebMessageError, exc:
                     register_exception()
                     body = webmessage_templates.tmpl_error(exc.message, ln)
                     return body
             else:
                 msg_to = msg_from_nickname or str(msg_from_id)
 
     body = webmessage_templates.tmpl_write(msg_to=msg_to,
                                            msg_to_group=msg_to_group,
                                            msg_id=msg_id,
                                            msg_subject=msg_subject,
                                            msg_body=msg_body,
                                            warnings=[],
                                            ln=ln)
     return body
 
 def perform_request_write_with_search(
                         uid,
                         msg_to_user="",
                         msg_to_group="",
                         msg_subject="",
                         msg_body="",
                         msg_send_year=0,
                         msg_send_month=0,
                         msg_send_day=0,
                         names_selected=[],
                         search_pattern="",
                         results_field=CFG_WEBMESSAGE_RESULTS_FIELD['NONE'],
                         add_values=0,
                         ln=CFG_SITE_LANG):
     """
     Display a write message page, with prefilled values
     @param msg_to_user: comma separated usernames (str)
     @param msg_to_group: comma separated groupnames (str)
     @param msg_subject: message subject (str)
     @param msg_bidy: message body (string)
     @param msg_send_year: year to send this message on (int)
     @param_msg_send_month: month to send this message on (int)
     @param_msg_send_day: day to send this message on (int)
     @param users_to_add: list of usernames ['str'] to add to msg_to_user
     @param groups_to_add: list of groupnames ['str'] to add to msg_to_group
     @param user_search_pattern: will search users with this pattern (str)
     @param group_search_pattern: will search groups with this pattern (str)
     @param mode_user: if 1 display user search box, else group search box
     @param add_values: if 1 users_to_add will be added to msg_to_user field..
     @param ln: language
     @return: body with warnings
     """
     warnings = []
     search_results_list = []
     def cat_names(name1, name2):
         """ name1, name2 => 'name1, name2' """
         return name1 + CFG_WEBMESSAGE_SEPARATOR + " " + name2
 
     if results_field == CFG_WEBMESSAGE_RESULTS_FIELD['USER']:
         if add_values and len(names_selected):
             usernames_to_add = reduce(cat_names, names_selected)
             if msg_to_user:
                 msg_to_user = cat_names(msg_to_user, usernames_to_add)
             else:
                 msg_to_user = usernames_to_add
 
         users_found = db.get_nicknames_like(search_pattern)
         if users_found:
             for user_name in users_found:
                 search_results_list.append((user_name[0],
                                             user_name[0] in names_selected))
 
     elif results_field == CFG_WEBMESSAGE_RESULTS_FIELD['GROUP']:
         if add_values and len(names_selected):
             groupnames_to_add = reduce(cat_names, names_selected)
             if msg_to_group:
                 msg_to_group = cat_names(msg_to_group, groupnames_to_add)
             else:
                 msg_to_group = groupnames_to_add
         groups_dict = db.get_groupnames_like(uid, search_pattern)
         groups_found = groups_dict.values()
         if groups_found:
             for group_name in groups_found:
                 search_results_list.append((group_name,
                                             group_name in names_selected))
 
     body = webmessage_templates.tmpl_write(
                             msg_to=msg_to_user,
                             msg_to_group=msg_to_group,
                             msg_subject=msg_subject,
                             msg_body=msg_body,
                             msg_send_year=msg_send_year,
                             msg_send_month=msg_send_month,
                             msg_send_day=msg_send_day,
                             warnings=warnings,
                             search_results_list=search_results_list,
                             search_pattern=search_pattern,
                             results_field=results_field,
                             ln=ln)
     return body
 
 def perform_request_send(uid,
                          msg_to_user="",
                          msg_to_group="",
                          msg_subject="",
                          msg_body="",
                          msg_send_year=0,
                          msg_send_month=0,
                          msg_send_day=0,
                          ln=CFG_SITE_LANG,
                          use_email_address = 0):
     """
     send a message. if unable return warnings to write page
     @param uid: id of user from (int)
     @param msg_to_user: comma separated usernames (recipients) (str)
     @param msg_to_group: comma separated groupnames (recipeints) (str)
     @param msg_subject: subject of message (str)
     @param msg_body: body of message (str)
     @param msg_send_year: send this message on year x (int)
     @param msg_send_month: send this message on month y (int)
     @param msg_send_day: send this message on day z (int)
     @param ln: language
-    @return: body with warnings
+    @return: (body with warnings, title, navtrail)
     """
     _ = gettext_set_language(ln)
 
     def strip_spaces(text):
         """suppress spaces before and after x (str)"""
         return text.strip()
     # wash user input
     users_to = map(strip_spaces, msg_to_user.split(CFG_WEBMESSAGE_SEPARATOR))
     groups_to = map(strip_spaces, msg_to_group.split(CFG_WEBMESSAGE_SEPARATOR))
 
     if users_to == ['']:
         users_to = []
     if groups_to == ['']:
         groups_to = []
 
     warnings = []
     infos = []
     problem = None
 
     users_to_str = CFG_WEBMESSAGE_SEPARATOR.join(users_to)
     groups_to_str = CFG_WEBMESSAGE_SEPARATOR.join(groups_to)
 
     send_on_date = get_datetext(msg_send_year, msg_send_month, msg_send_day)
     if (msg_send_year == msg_send_month == msg_send_day == 0):
         status = CFG_WEBMESSAGE_STATUS_CODE['NEW']
     else:
         status = CFG_WEBMESSAGE_STATUS_CODE['REMINDER']
         if send_on_date == datetext_default:
             warning = \
             _("The chosen date (%(x_year)i/%(x_month)i/%(x_day)i) is invalid.")
             warning = warning % {'x_year': msg_send_year,
                                  'x_month': msg_send_month,
                                  'x_day': msg_send_day}
             warnings.append(warning)
             problem = True
 
     if not(users_to_str or groups_to_str):
         # <=> not(users_to_str) AND not(groups_to_str)
         warnings.append(_("Please enter a user name or a group name."))
         problem = True
 
     if len(msg_body) > CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE:
         warnings.append(_("Your message is too long, please edit it. Maximum size allowed is %i characters.") % \
                             (CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE,))
         problem = True
 
     if use_email_address == 0:
         users_dict = db.get_uids_from_nicks(users_to)
         users_to = users_dict.items() # users_to=[(nick, uid),(nick2, uid2)]
     elif use_email_address == 1:
         users_dict = db.get_uids_from_emails(users_to)
         users_to = users_dict.items() # users_to=[(email, uid),(email2, uid2)]
     groups_dict = db.get_gids_from_groupnames(groups_to)
     groups_to = groups_dict.items()
     gids_to = []
     for (group_name, group_id) in groups_to:
         if not(group_id):
             warnings.append(_("Group %s does not exist.") % \
                             (escape_html(group_name)))
             problem = 1
         else:
             gids_to.append(group_id)
 
     # Get uids from gids
     uids_from_group = db.get_uids_members_of_groups(gids_to)
     # Add the original uids, and make sure  there is no double values.
     tmp_dict = {}
     for uid_receiver in uids_from_group:
         tmp_dict[uid_receiver] = None
     for (user_nick, user_id) in users_to:
         if user_id:
             if user_id not in tmp_dict:
                 uids_from_group.append(user_id)
                 tmp_dict[user_id] = None
         else:
             if type(user_nick) == int or \
                type(user_nick) == str and user_nick.isdigit():
                 user_nick = int(user_nick)
                 if db.user_exists(user_nick) and user_nick not in tmp_dict:
                     uids_from_group.append(user_nick)
                     tmp_dict[user_nick] = None
             else:
                 warnings.append(_("User %s does not exist.")% \
                                 (escape_html(user_nick)))
                 problem = True
     if problem:
         body = webmessage_templates.tmpl_write(msg_to=users_to_str,
                                                msg_to_group=groups_to_str,
                                                msg_subject=msg_subject,
                                                msg_body=msg_body,
                                                msg_send_year=msg_send_year,
                                                msg_send_month=msg_send_month,
                                                msg_send_day=msg_send_day,
                                                warnings=warnings,
                                                ln=ln)
         title =  _("Write a message")
         navtrail = get_navtrail(ln, title)
         return (body, title, navtrail)
     else:
         msg_id = db.create_message(uid,
                                    users_to_str, groups_to_str,
                                    msg_subject, msg_body,
                                    send_on_date)
         uid_problem = db.send_message(uids_from_group, msg_id, status)
         if len(uid_problem) > 0:
             usernames_problem_dict = db.get_nicks_from_uids(uid_problem)
             usernames_problem = usernames_problem_dict.values()
             def listing(name1, name2):
                 """ name1, name2 => 'name1, name2' """
                 return str(name1) + ", " + str(name2)
             warning = _("Your message could not be sent to the following recipients due to their quota:") + " "
             warnings.append(warning + reduce(listing, usernames_problem))
 
         if len(uids_from_group) != len(uid_problem):
             infos.append(_("Your message has been sent."))
         else:
             db.check_if_need_to_delete_message_permanently([msg_id])
         body = perform_request_display(uid, warnings,
                                        infos, ln)
         title = _("Your Messages")
         return (body, title, get_navtrail(ln))
 
 def account_new_mail(uid, ln=CFG_SITE_LANG):
     """
     display new mail info for myaccount.py page.
     @param uid: user id (int)
     @param ln: language
     @return: html body
     """
     nb_new_mail = db.get_nb_new_messages_for_user(uid)
     total_mail = db.get_nb_readable_messages_for_user(uid)
     return webmessage_templates.tmpl_account_new_mail(nb_new_mail,
                                                       total_mail, ln)
 
 def get_navtrail(ln=CFG_SITE_LANG, title=""):
     """
     gets the navtrail for title...
     @param title: title of the page
     @param ln: language
     @return: HTML output
     """
     navtrail = webmessage_templates.tmpl_navtrail(ln, title)
     return navtrail