diff --git a/modules/webjournal/lib/webjournal_webinterface.py b/modules/webjournal/lib/webjournal_webinterface.py
index e4268be31..0a64c908b 100644
--- a/modules/webjournal/lib/webjournal_webinterface.py
+++ b/modules/webjournal/lib/webjournal_webinterface.py
@@ -1,490 +1,512 @@
 # -*- coding: utf-8 -*-
 ## $Id$
 ##
 ## This file is part of CDS Invenio.
 ## Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 CERN.
 ##
 ## CDS 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.
 ##
 ## CDS 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 CDS Invenio; if not, write to the Free Software Foundation, Inc.,
 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 
 """WebJournal Web Interface."""
 
 __revision__ = "$Id$"
 
 __lastupdated__ = """$Date$"""
 
 import urllib
 from invenio.webinterface_handler import wash_urlargd, WebInterfaceDirectory
 from invenio.access_control_engine import acc_authorize_action
 from invenio.config import CFG_SITE_URL, CFG_SITE_LANG
 from invenio.webuser import getUid
 from invenio.urlutils import redirect_to_url
 from invenio.errorlib import register_exception
 from invenio.webjournal_config import \
      InvenioWebJournalNoJournalOnServerError, \
      InvenioWebJournalNoNameError, \
      InvenioWebJournalNoCurrentIssueError, \
      InvenioWebJournalIssueNumberBadlyFormedError, \
      InvenioWebJournalArchiveDateWronglyFormedError, \
      InvenioWebJournalJournalIdNotFoundDBError, \
      InvenioWebJournalNoArticleNumberError, \
      InvenioWebJournalNoPopupRecordError, \
      InvenioWebJournalNoCategoryError
 from invenio.webjournal_utils import \
      get_xml_from_config, \
      get_current_issue, \
      guess_journal_name, \
      get_current_issue, \
      get_journal_id, \
      get_recid_from_legacy_number
 from invenio.webjournal_washer import \
      wash_category, \
      wash_issue_number, \
      wash_journal_name, \
      wash_journal_language, \
      wash_article_number, \
      wash_popup_record, \
      wash_archive_date
 from invenio.webjournal import \
      perform_request_index, \
      perform_request_article, \
      perform_request_popup, \
      perform_request_search
 
 import invenio.template
 webjournal_templates = invenio.template.load('webjournal')
 
 class WebInterfaceJournalPages(WebInterfaceDirectory):
     """Defines the set of /journal pages."""
 
     journal_name = None
     journal_issue_year = None
     journal_issue_number = None
     category = None
     article_id = None
 
     _exports = ['popup', 'search']
 
     def _lookup(self, component, path):
         """ This handler is invoked for the dynamic URLs """
         if component in ['article', 'issue_control', 'edit_article', 'alert',
                          'feature_record', 'regenerate', 'administrate']:
             return WebInterfaceJournalPagesLegacy(), [component]
 
         return self, []
 
     def __call__(self, req, form):
         """ Maybe resolve the final / of a directory """
         path = req.uri[1:].split('/')
         journal_name = None
         journal_issue_year = None
         journal_issue_number = None
         category = None
         article_id = None
         if len(path) > 1:
             journal_name = path[1]
         if len(path) > 2:
             journal_issue_year = path[2]
         if len(path) > 3:
             journal_issue_number = path[3]
         if len(path) > 4:
             category = urllib.unquote(path[4])
         if len(path) > 5 and path[5].isdigit():
             article_id = path[5]
 
         ## Support for legacy journal/[empty]?(args*) urls. There are
         ## these parameters only in that case
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'issue': (str, ""),
                                    'category': (str, ""),
                                    'ln': (str, CFG_SITE_LANG),
                                    'number': (int, None),
                                    'verbose': (int, 0)}
                             )
 
         if 'name' in form.keys() or \
             'issue' in form.keys() or \
             'category' in form.keys():
             ln = wash_journal_language(argd['ln'])
-            journal_name = wash_journal_name(ln, argd['name'])
+            try:
+                journal_name = wash_journal_name(ln, argd['name'])
+            except InvenioWebJournalNoJournalOnServerError, e:
+                register_exception(req=req)
+                return e.user_box()
+            except InvenioWebJournalNoNameError, e:
+                register_exception(req=req)
+                return e.user_box()
             try:
                 issue = wash_issue_number(ln, journal_name,
                                           argd['issue'])
                 issue_year = issue.split('/')[1]
                 issue_number = issue.split('/')[0]
             except InvenioWebJournalIssueNumberBadlyFormedError, e:
                 register_exception(req=req)
                 return e.user_box()
+            except InvenioWebJournalJournalIdNotFoundDBError, e:
+                register_exception(req=req)
+                return e.user_box()
             category = wash_category(ln, argd['category'], journal_name)
             redirect_to_url(req, CFG_SITE_URL + '/journal/%(name)s/%(issue_year)s/%(issue_number)s/%(category)s/?ln=%(ln)s' % \
                             {'name': journal_name,
                              'issue_year': issue_year,
                              'issue_number': issue_number,
                              'category': category,
                              'ln': ln})
 
         ## End support for legacy urls
 
         # Check that given journal name exists.
         if journal_name:
             try:
                 get_journal_id(journal_name)
             except InvenioWebJournalJournalIdNotFoundDBError, e:
                 register_exception(req=req)
                 return e.user_box()
 
         # If some parameters are missing, deduce them and
         # redirect
         if not journal_name or \
            not journal_issue_year or \
            not journal_issue_number or \
            not category:
             if not journal_name:
                 try:
                     journal_name = guess_journal_name(argd['ln'])
                 except InvenioWebJournalNoJournalOnServerError, e:
                     register_exception(req=req)
                     return e.user_box()
                 except InvenioWebJournalNoNameError, e:
                     register_exception(req=req)
                     return e.user_box()
             if not journal_issue_year or not journal_issue_number:
                 journal_issue = get_current_issue(argd['ln'], journal_name)
                 journal_issue_year = journal_issue.split('/')[1]
                 journal_issue_number = journal_issue.split('/')[0]
 
             if not category:
                 config_strings = get_xml_from_config(["index", "rule", "issue_number"],
                                                      journal_name)
                 rule_list = config_strings["rule"]
                 category = rule_list[0].split(",")[0]
             redirect_to_url(req, CFG_SITE_URL + '/journal/%(name)s/%(issue_year)s/%(issue_number)s/%(category)s/?ln=%(ln)s' % \
                             {'name': journal_name,
                              'issue_year': journal_issue_year,
                              'issue_number': journal_issue_number,
                              'category': category,
                              'ln': argd['ln']})
 
         journal_issue = ""
         if journal_issue_year is not None and \
            journal_issue_number is not None:
             journal_issue = journal_issue_number + '/' + \
                             journal_issue_year
 
         try:
             journal_name = wash_journal_name(argd['ln'], journal_name)
             issue = wash_issue_number(argd['ln'], journal_name, journal_issue)
             category = wash_category(argd['ln'], category, journal_name)
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalIssueNumberBadlyFormedError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCategoryError, e:
             register_exception(req=req)
             return e.user_box()
+        except InvenioWebJournalJournalIdNotFoundDBError, e:
+            register_exception(req=req)
+            return e.user_box()
 
         editor = False
         if acc_authorize_action(getUid(req), 'cfgwebjournal',
                                 name="%s" % journal_name)[0] == 0:
             editor = True
 
         if article_id is None:
             html = perform_request_index(req,
                                          journal_name,
                                          journal_issue,
                                          argd['ln'],
                                          category,
                                          editor,
                                          verbose=argd['verbose'])
         else:
             #req.journal_defaults["editor"] = editor
             html = perform_request_article(req,
                                            journal_name,
                                            journal_issue,
                                            argd['ln'],
                                            category,
                                            article_id,
                                            editor,
                                            verbose=argd['verbose'])
         return html
 
     def popup(self, req, form):
         """
         simple pass-through function that serves as a checker for popups.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'record': (str, ""),
                                    'ln': (str, "")
                                    })
         try:
             ln = wash_journal_language(argd['ln'])
             journal_name = wash_journal_name(ln, argd['name'])
             record = wash_popup_record(ln, argd['record'], journal_name)
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoPopupRecordError, e:
             register_exception(req=req)
             return e.user_box()
 
         html = perform_request_popup(req, ln, journal_name, record)
 
         return html
 
     def search(self, req, form):
         """
         Display search interface
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'issue': (str, ""),
                                    'archive_year': (str, ""),
                                    'archive_issue': (str, ""),
                                    'archive_select': (str, "False"),
                                    'archive_date': (str, ""),
                                    'archive_search': (str, "False"),
                                    'ln': (str, CFG_SITE_LANG),
                                    'verbose': (int, 0)})
         try:
             ln = wash_journal_language(argd['ln'])
             journal_name = wash_journal_name(ln, argd['name'])
             archive_issue = wash_issue_number(ln, journal_name,
                                               argd['archive_issue'])
             archive_date = wash_archive_date(ln, journal_name,
                                              argd['archive_date'])
             archive_select = argd['archive_select']
             archive_search = argd['archive_search']
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCurrentIssueError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalIssueNumberBadlyFormedError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalArchiveDateWronglyFormedError, e:
             register_exception(req=req)
             return e.user_box()
+        except InvenioWebJournalJournalIdNotFoundDBError, e:
+            register_exception(req=req)
+            return e.user_box()
 
         html = perform_request_search(req=req,
                                       journal_name=journal_name,
                                       ln=ln,
                                       archive_issue=archive_issue,
                                       archive_select=archive_select,
                                       archive_date=archive_date,
                                       archive_search=archive_search,
                                       verbose=argd['verbose'])
         return html
 
 
     index = __call__
 
 
 class WebInterfaceJournalPagesLegacy(WebInterfaceDirectory):
     """Defines the set of /journal pages."""
 
     _exports = ['', 'article', 'issue_control', 'edit_article', 'alert',
                 'feature_record', 'regenerate', 'administrate']
 
     def index(self, req, form):
         """
         Index page.
         Washes all the parameters and stores them in journal_defaults dict
         for subsequent format_elements.
         Passes on to logic function and eventually returns HTML.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                     'issue': (str, ""),
                                     'category': (str, ""),
                                     'ln': (str, "")}
                             )
         try:
             ln = wash_journal_language(argd['ln'])
             journal_name = wash_journal_name(ln, argd['name'])
             issue_number = wash_issue_number(ln, journal_name,
                                              argd['issue'])
             category = wash_category(ln, argd['category'], journal_name)
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCurrentIssueError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalIssueNumberBadlyFormedError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCategoryError, e:
             register_exception(req=req)
             return e.user_box()
+        except InvenioWebJournalJournalIdNotFoundDBError, e:
+            register_exception(req=req)
+            return e.user_box()
         # the journal_defaults will be used by format elements that have no
         # direct access to the params here, no more checking needed
         req.journal_defaults = {"name": journal_name,
                                 "issue": issue_number,
                                 "ln": ln,
                                 "category": category}
 
         html = perform_request_index(req, journal_name, issue_number, ln,
                               category)
         return html
 
     def article(self, req, form):
         """
         Article page.
         Washes all the parameters and stores them in journal_defaults dict
         for subsequent format_elements.
         Passes on to logic function and eventually returns HTML.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                     'issue': (str, ""),
                                     'category': (str, ""),
                                     'number': (str, ""),
                                     'ln': (str, ""),
                                    }
                             )
         try:
             ln = wash_journal_language(argd['ln'])
             journal_name = wash_journal_name(ln, argd['name'])
             issue = wash_issue_number(ln, journal_name,
                                       argd['issue'])
             issue_year = issue.split('/')[1]
             issue_number = issue.split('/')[0]
             category = wash_category(ln, argd['category'], journal_name)
             number = wash_article_number(ln, argd['number'], journal_name)
             recid = get_recid_from_legacy_number(issue, category, int(number))
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCurrentIssueError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalIssueNumberBadlyFormedError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoArticleNumberError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoCategoryError, e:
             register_exception(req=req)
             return e.user_box()
+        except InvenioWebJournalJournalIdNotFoundDBError, e:
+            register_exception(req=req)
+            return e.user_box()
 
         if recid != -1:
             # Found a corresponding record
             redirect_to_url(req, CFG_SITE_URL + \
                             '/journal/' + journal_name + '/' + issue_year + \
                             '/' + issue_number + '/' + category + \
                             '/' + str(recid) + '?ln=' + ln)
         else:
             # Corresponding record not found. Display index
             redirect_to_url(req, CFG_SITE_URL + \
                             '/journal/' + journal_name + '/' + issue_year + \
                             '/' + issue_number + '/' + category + \
                             '?ln=' + ln)
 
     def administrate(self, req, form):
         """Index page."""
         argd = wash_urlargd(form, {'name': (str, ""),
                                     'ln': (str, "")
                                     })
         try:
             ln = wash_journal_language(argd['ln'])
             journal_name = wash_journal_name(ln, argd['name'])
         except InvenioWebJournalNoJournalOnServerError, e:
             register_exception(req=req)
             return e.user_box()
         except InvenioWebJournalNoNameError, e:
             register_exception(req=req)
             return e.user_box()
         redirect_to_url(req, CFG_SITE_URL + \
                         '/admin/webjournal/webjournaladmin.py/administrate?journal_name=' + \
                         journal_name + '&ln=' + ln)
 
     def feature_record(self, req, form):
         """
         Interface to feature a record. Will be saved in a flat file.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'recid': (str, "init"),
                                    'url': (str, "init"),
                                    'ln': (str, "")})
 
         redirect_to_url(req, CFG_SITE_URL + \
                         '/admin/webjournal/webjournaladmin.py/feature_record?journal_name=' + \
                         argd['name'] + '&ln=' + argd['ln'] + '&recid='+ argd['recid'] + '&url='+ argd['url'])
 
     def regenerate(self, req, form):
         """
         Clears the cache for the issue given.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'issue': (str, ""),
                                    'ln': (str, "")})
 
         redirect_to_url(req, CFG_SITE_URL + \
                         '/admin/webjournal/webjournaladmin.py/regenerate?journal_name=' + \
                         argd['name'] + '&ln=' + argd['ln'] + '&issue=' + argd['issue'])
 
     def alert(self, req, form):
         """
         Alert system.
         Sends an email alert, in HTML/PlainText or only PlainText to a mailing
         list to alert for new journal releases.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'sent': (str, "False"),
                                    'plainText': (str, ''),
                                    'htmlMail': (str, ""),
                                    'recipients': (str, ""),
                                    'subject': (str, ""),
                                    'ln': (str, ""),
                                    'issue': (str, ""),
                                    'force': (str, "False")})
 
         redirect_to_url(req, CFG_SITE_URL + \
                         '/admin/webjournal/webjournaladmin.py/alert?journal_name=' + \
                         argd['name'] + '&ln=' + argd['ln'] + '&issue=' + argd['issue'] + \
                         '&sent=' + argd['sent'] + '&plainText=' + argd['plainText'] + \
                         '&htmlMail=' + argd['htmlMail'] + '&recipients=' + argd['recipients'] + \
                         '&force=' + argd['force'] + '&subject=' + argd['subject'])
 
     def issue_control(self, req, form):
         """
         page that allows full control over creating, backtracing, adding to,
         removing from issues.
         """
         argd = wash_urlargd(form, {'name': (str, ""),
                                    'add': (str, ""),
                                    'action_publish': (str, "cfg"),
                                    'issue_number': (list, []),
                                    'ln': (str, "")})
         redirect_to_url(req, CFG_SITE_URL + \
                         '/admin/webjournal/webjournaladmin.py/issue_control?journal_name=' + \
                         argd['name'] + '&ln=' + argd['ln'] + '&issue=' + argd['issue_number'] + \
                         '&action=' + argd['action_publish'])