diff --git a/rhodecode/apps/_base/__init__.py b/rhodecode/apps/_base/__init__.py
--- a/rhodecode/apps/_base/__init__.py
+++ b/rhodecode/apps/_base/__init__.py
@@ -56,13 +56,14 @@ class BaseAppView(object):
             setattr(c, k, v)
 
     def _get_template_context(self, tmpl_args):
-
         self._register_global_c(tmpl_args)
 
-        return {
+        local_tmpl_args = {
             'defaults': {},
             'errors': {},
         }
+        local_tmpl_args.update(tmpl_args)
+        return local_tmpl_args
 
     def load_default_context(self):
         """
diff --git a/rhodecode/apps/login/views.py b/rhodecode/apps/login/views.py
--- a/rhodecode/apps/login/views.py
+++ b/rhodecode/apps/login/views.py
@@ -30,6 +30,7 @@ from pyramid.httpexceptions import HTTPF
 from pyramid.view import view_config
 from recaptcha.client.captcha import submit
 
+from rhodecode.apps._base import BaseAppView
 from rhodecode.authentication.base import authenticate, HTTP_TYPE
 from rhodecode.events import UserRegistered
 from rhodecode.lib import helpers as h
@@ -105,20 +106,13 @@ def get_came_from(request):
     return came_from or url('home')
 
 
-class LoginView(object):
+class LoginView(BaseAppView):
 
-    def __init__(self, context, request):
-        self.request = request
-        self.context = context
-        self.session = request.session
-        self._rhodecode_user = request.user
-
-    def _get_template_context(self):
-        return {
-            'came_from': get_came_from(self.request),
-            'defaults': {},
-            'errors': {},
-        }
+    def load_default_context(self):
+        c = self._get_local_tmpl_context()
+        c.came_from = get_came_from(self.request)
+        self._register_global_c(c)
+        return c
 
     def _get_captcha_data(self):
         settings = SettingsModel().get_all_settings()
@@ -132,12 +126,13 @@ class LoginView(object):
         route_name='login', request_method='GET',
         renderer='rhodecode:templates/login.mako')
     def login(self):
-        came_from = get_came_from(self.request)
-        user = self.request.user
+        c = self.load_default_context()
+        auth_user = self._rhodecode_user
 
         # redirect if already logged in
-        if user.is_authenticated and not user.is_default and user.ip_allowed:
-            raise HTTPFound(came_from)
+        if (auth_user.is_authenticated and
+                not auth_user.is_default and auth_user.ip_allowed):
+            raise HTTPFound(c.came_from)
 
         # check if we use headers plugin, and try to login using it.
         try:
@@ -147,18 +142,18 @@ class LoginView(object):
             if auth_info:
                 headers = _store_user_in_session(
                     self.session, auth_info.get('username'))
-                raise HTTPFound(came_from, headers=headers)
+                raise HTTPFound(c.came_from, headers=headers)
         except UserCreationError as e:
             log.error(e)
             self.session.flash(e, queue='error')
 
-        return self._get_template_context()
+        return self._get_template_context(c)
 
     @view_config(
         route_name='login', request_method='POST',
         renderer='rhodecode:templates/login.mako')
     def login_post(self):
-        came_from = get_came_from(self.request)
+        c = self.load_default_context()
 
         login_form = LoginForm()()
 
@@ -170,13 +165,13 @@ class LoginView(object):
                 self.session,
                 username=form_result['username'],
                 remember=form_result['remember'])
-            log.debug('Redirecting to "%s" after login.', came_from)
-            raise HTTPFound(came_from, headers=headers)
+            log.debug('Redirecting to "%s" after login.', c.came_from)
+            raise HTTPFound(c.came_from, headers=headers)
         except formencode.Invalid as errors:
             defaults = errors.value
             # remove password from filling in form again
             defaults.pop('password', None)
-            render_ctx = self._get_template_context()
+            render_ctx = self._get_template_context(c)
             render_ctx.update({
                 'errors': errors.error_dict,
                 'defaults': defaults,
@@ -189,13 +184,13 @@ class LoginView(object):
             # with user creation, explanation should be provided in
             # Exception itself
             self.session.flash(e, queue='error')
-            return self._get_template_context()
+            return self._get_template_context(c)
 
     @CSRFRequired()
     @view_config(route_name='logout', request_method='POST')
     def logout(self):
-        user = self.request.user
-        log.info('Deleting session for user: `%s`', user)
+        auth_user = self._rhodecode_user
+        log.info('Deleting session for user: `%s`', auth_user)
         self.session.delete()
         return HTTPFound(url('home'))
 
@@ -205,6 +200,7 @@ class LoginView(object):
         route_name='register', request_method='GET',
         renderer='rhodecode:templates/register.mako',)
     def register(self, defaults=None, errors=None):
+        c = self.load_default_context()
         defaults = defaults or {}
         errors = errors or {}
 
@@ -214,7 +210,7 @@ class LoginView(object):
         auto_active = 'hg.register.auto_activate' in User.get_default_user()\
             .AuthUser.permissions['global']
 
-        render_ctx = self._get_template_context()
+        render_ctx = self._get_template_context(c)
         render_ctx.update({
             'defaults': defaults,
             'errors': errors,