diff --git a/invenio/base/templates/_macros.html b/invenio/base/templates/_macros.html
new file mode 100644
index 000000000..19f996a6d
--- /dev/null
+++ b/invenio/base/templates/_macros.html
@@ -0,0 +1,29 @@
+{#
+## This file is part of Invenio.
+## Copyright (C) 2014 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.
+#}
+
+{%- macro messages() -%}
+  {% block messages %}
+    {% for category, msg in get_flashed_messages(with_categories=True, category_filter=['', 'info', 'error', 'warning', 'success']) %}
+      <div class="alert alert-{{ category }}">
+        <a class="close" data-dismiss="alert" href="#">×</a>
+        {{ msg|safe }}
+      </div>
+    {% endfor %}
+  {% endblock messages %}
+{% endmacro %}
\ No newline at end of file
diff --git a/invenio/base/templates/page_base.html b/invenio/base/templates/page_base.html
index e54cc8b11..f389badd9 100644
--- a/invenio/base/templates/page_base.html
+++ b/invenio/base/templates/page_base.html
@@ -1,206 +1,201 @@
 {#
 ## This file is part of Invenio.
 ## Copyright (C) 2012, 2013 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.
 #}
 
+{% from "_macros.html" import messages %}
+
 {# Global CSS #}
 {% block global_css %}
   {%- css 'css/bootstrap.css', '00-invenio' -%}
   {%- css 'css/typeahead.js-bootstrap.css', '00-invenio' -%}
   {%- css 'css/token-input.css', '00-invenio' -%}
   {%- css 'css/token-input-facebook.css', '00-invenio' -%}
   {%- css url_for('static', filename='css/base.css'), '00-invenio' -%}
   {%- css url_for('webtag.static', filename='css/tags/popover.css'), '00-invenio' -%}
   {%- if config.CFG_WEBSTYLE_TEMPLATE_SKIN != 'default' %}
     {%- css 'css/'+config.CFG_WEBSTYLE_TEMPLATE_SKIN, '00-invenio' -%}
   {%- endif %}
 {% endblock global_css %}
 
 {# Global Javascript files #}
 {% block global_javascript %}
   {%- js 'js/jquery.min.js', '00-invenio' -%}
   {%- js 'js/bootstrap.js', '00-invenio' -%}
   {%- js 'js/jquery.tokeninput.js', '00-invenio' -%}
   {%- js 'js/hogan.js', '00-invenio' -%}
   {%- js 'js/jquery.jeditable.mini.js', '00-invenio' -%}
   {%- js 'js/invenio.js', '00-invenio' -%}
   {%- js 'js/translate.js', '00-invenio' -%}
   {%- js 'js/typeahead.js', '00-invenio' -%}
 {% endblock global_javascript %}
 
 {%- if not no_pageheader -%}
 <!DOCTYPE html>
 <html lang="{{ ln|safe }}" {% if is_language_rtl(g.ln) %}dir="rtl"{% endif %}>
 <head>
   <meta charset="utf-8">
   <title>{{ title+' - ' if title }}{{ config.CFG_SITE_NAME_INTL[g.ln] }}</title>
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta name="description" content="">
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta http-equiv="Content-Language" content="{{ g.ln|safe }}" />
   <meta name="description" content="{{ description }}" />
   <meta name="keywords" content="{{ keywords }}" />
   <meta name="author" content="">
   <link rev="made" href="mailto:{{ config.CFG_SITE_SUPPORT_EMAIL }}" />
   <link rel="canonical" href="{{ canonical_url }}" />
   {% for alt_ln, alternate_url in alternate_urls.iteritems() %}
   <link rel="alternate" hreflang="{{ alt_ln }}" href="{{ alternate_url }}" />
   {% endfor %}
   <link rel="alternate" type="application/rss+xml" title="{{ config.CFG_SITE_NAME }} RSS" href="{{ url_for('rss') }}" />
   <link rel="search" type="application/opensearchdescription+xml" href="{{ url_for('opensearchdescription') }}" title="{{ config.CFG_SITE_NAME }}" />
   <link rel="unapi-server" type="application/xml" title="unAPI" href="{{ url_for('unapi') }}" />
   {{ linkbackTrackbackLink }}
   <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
   <!--[if lt IE 9]>
     <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
   <![endif]-->
 
   <!-- Le fav and touch icons -->
   <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
   {% for size in [144, 114, 72, 57] %}
     {% set icon_name = 'apple-touch-icon-%d-precomposed.png'|format(size) %}
   <link rel="apple-touch-icon-precomposed" sizes="{{ size }}x{{ size }}"
         href="{{ url_for('static', filename=icon_name) }}">
   {% endfor %}
 
   {% block header %}
     {{ metaheaderadd|safe }}
     {% block metaheader %}
     {% endblock metaheader %}
   {% endblock header %}
   {% for bundle in get_css_bundle(iterate=True) %}
   {% assets bundle %}
     <link rel="stylesheet" type="text/css" href="{{ ASSET_URL }}"></link>
   {% endassets %}
   {% endfor %}
   {% block _top_assets %}{% endblock _top_assets %}
   {% block css %}{% endblock css %}
   <style>
 
     legend [class*="icon-"] { vertical-align: baseline; }
     a.label, a.label:hover, .label a, .label a:hover { color: white;}
     .htmlbrief .media-heading { font-weight: 200; }
     .icon.muted { opacity: 0.6; }
 
     /*
     ----------------------- Stick footer ----------------------- */
     html,
     body {
       height: 100%;
     }
 
     {% set footer_height = '150px' -%}
     /* Wrapper for page content to push down footer */
     #wrap {
       min-height: 100%;
       height: auto !important;
       height: 100%;
       /* Negative indent footer by it's height */
       margin: 0 auto -{{ footer_height }};
     }
 
     /* Set the fixed height of the footer here */
     #push,
     footer {
       min-height: {{ footer_height }};
     }
 
     #push {
       margin-top: 60px;
     }
 
     footer a, footer a:hover {
       color: #666;
     }
     footer, footer p {
       font-size: 11px;
       color: #333;
     }
 
     /* Lastly, apply responsive CSS fixes as necessary */
     @media (max-width: 767px) {
       footer {
         margin-left: -20px;
         margin-right: -20px;
         padding-left: 20px;
         padding-right: 20px;
       }
     }
 
     /* --------------- */
   </style>
 </head>
 <body class="{{ body_css_classes|join(' ') if body_css_classes }}"
       lang="{{ g.ln.split('_', 1)[0]|safe }}" {{ rtl_direction|safe }}>
   <div id="wrap">
     <header>
       <!-- replaced page header -->
       {% block headerbox %}
         {% include 'header.html' %}
       {% endblock headerbox %}
       <!-- end replaced page header -->
       {% block breadcrumb %}
       {%- include 'breadcrumbs.html' -%}
       {% endblock breadcrumb %}
       {% block pageheaderadd %}{{ pageheaderadd|safe }}{% endblock pageheaderadd %}
     </header>
 {%- endif -%}
 {%- if not no_pagebody -%}
 {%- block page_body -%}
     <div class="container">
       {% block title %}
-      {% if title %}
-        <div class="page-header">
-          <h1>{{ title }}</h1>
-        </div>
-      {% endif %}
-      {% endblock title %}
-      {% block messages %}
-        {% for category, msg in get_flashed_messages(with_categories=True, category_filter=['', 'info', 'error', 'warning', 'success']) %}
-          <div class="alert alert-{{ category }}">
-            <a class="close" data-dismiss="alert" href="#">×</a>
-            {{ msg|safe }}
+        {% if title %}
+          <div class="page-header">
+            <h1>{{ title }}</h1>
           </div>
-        {% endfor %}
-        {% endblock messages %}
-        {% block body %}
+        {% endif %}
+      {% endblock title %}
+      {{ messages() }}
+      {% block body %}
         {{ body }}
-        {% endblock body %}
+      {% endblock body %}
     </div>
 {%- endblock page_body -%}
 {%- endif -%}
 {%- if not no_pagefooter -%}
     <div id="push"></div>
   </div>{# end wrap #}
 <footer>
   <div class="container">
     {% block pagefooteradd %}{{ pagefooteradd|safe }}{% endblock pagefooteradd %}
   </div>
   <!-- replaced page footer -->
   {%- include 'footer.html' -%}
 </footer>
 {% block _bottom_assets %}
 {% for bundle in get_js_bundle(iterate=True) %}
 {% assets bundle %}
   <script type="text/javascript" src="{{ ASSET_URL }}"></script>
 {% endassets %}
 {% endfor %}
 {% endblock _bottom_assets %}
 {% block javascript %}{% endblock javascript %}
 </body>
 </html>
 {%- endif -%}