protected void Application_Error(object sender, EventArgs eventArgs)
		{
			var httpException = this.Server.GetLastError() as HttpException ??
			                    new HttpException((int) HttpStatusCode.InternalServerError, 
									"Unexpected Application Error", this.Server.GetLastError());

			/* TODO: Specific controller actions dependent on http status code ?
			var httpStatusCode = (HttpStatusCode) httpException.GetHttpCode();
			var routeAction = "Index";

			switch (httpStatusCode)
			{
				case HttpStatusCode.BadRequest:		routeAction = "BadRequest"; break;
				case HttpStatusCode.Unauthorized:	routeAction = "Unauthorised"; break;
				case HttpStatusCode.Forbidden:		routeAction = "Forbidden"; break;
				case HttpStatusCode.NotFound:		routeAction = "NotFound"; break;
				case HttpStatusCode.RequestTimeout:	routeAction = "RequestTimeout"; break;
				case HttpStatusCode.Conflict:		routeAction = "Conflict"; break;
				case HttpStatusCode.NotImplemented:	routeAction = "NotImplemented"; break;
				default: routeAction = "InternalServerError"; break;
			}*/

			this.Context.ClearError();
			this.Context.Response.Clear();
			this.Context.Response.TrySkipIisCustomErrors = true;
			this.Context.Response.StatusCode = httpException.GetHttpCode();
			
			var routeData = new RouteData();

			routeData.Values["controller"] = "Error";
			routeData.Values["action"] = "Index"; // TODO: routeAction; ?
			routeData.Values["exception"] = httpException;

			IController errorController = new ErrorController();

			errorController.Execute(new RequestContext(new HttpContextWrapper(this.Context), routeData));
        }
        protected void Application_EndRequest(Object sender,
                                                   EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            if (context.Response.Status.Substring(0, 3).Equals("401"))
            {
                this.Context.ClearError();
                this.Context.Response.Clear();
                this.Context.Response.TrySkipIisCustomErrors = true;
                //this.Context.Response.StatusCode = 200; // Note this makes the browser think it is already authenticated

                var routeData = new RouteData();

                routeData.Values["controller"] = "Error";
                routeData.Values["action"] = "Index";
                routeData.Values["exception"] = new HttpException(401, "You are not authorised to access this application.");

                IController errorController = new ErrorController();

                errorController.Execute(new RequestContext(new HttpContextWrapper(this.Context), routeData));
            }
        }