diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9ea11daf2bbb6d642d2323959021b8cfdad48ace..a299a83b96ecae3a09f6d051b7106602821f75fe 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -11,19 +11,17 @@ class ApplicationController < ActionController::Base
   helper_method :abilities, :can?
 
   rescue_from Gitlab::Gitolite::AccessDenied do |exception|
-    render "errors/gitolite", layout: "error", status: 500
+    render "errors/gitolite", layout: "errors", status: 500
   end
 
   rescue_from Encoding::CompatibilityError do |exception|
-    render "errors/encoding", layout: "error", status: 500
+    render "errors/encoding", layout: "errors", status: 500
   end
 
   rescue_from ActiveRecord::RecordNotFound do |exception|
-    render "errors/not_found", layout: "error", status: 404
+    render "errors/not_found", layout: "errors", status: 404
   end
 
-  layout :layout_by_resource
-
   protected
 
   def check_token_auth
@@ -51,14 +49,6 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  def layout_by_resource
-    if devise_controller?
-      "devise_layout"
-    else
-      "application"
-    end
-  end
-
   def set_current_user_for_mailer
     MailerObserver.current_user = current_user
   end
@@ -93,15 +83,15 @@ class ApplicationController < ActionController::Base
   end
 
   def access_denied!
-    render "errors/access_denied", layout: "error", status: 404
+    render "errors/access_denied", layout: "errors", status: 404
   end
 
   def not_found!
-    render "errors/not_found", layout: "error", status: 404
+    render "errors/not_found", layout: "errors", status: 404
   end
 
   def git_not_found!
-    render "errors/git_not_found", layout: "error", status: 404
+    render "errors/git_not_found", layout: "errors", status: 404
   end
 
   def method_missing(method_sym, *arguments, &block)
diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb
index 9f60c64590ef72521f7f28688158df2558c91135..e998d72365c761e678fc73b1786e0758d94e98d3 100644
--- a/app/controllers/errors_controller.rb
+++ b/app/controllers/errors_controller.rb
@@ -1,6 +1,4 @@
 class ErrorsController < ApplicationController
-  layout "error"
-
   def githost
     render "errors/gitolite"
   end
diff --git a/app/controllers/profile_controller.rb b/app/controllers/profile_controller.rb
index 7ddbfe1128dd100301235c97de34ba7769867d97..2b8e18f6286afb432fa3d7c503aa255fff401465 100644
--- a/app/controllers/profile_controller.rb
+++ b/app/controllers/profile_controller.rb
@@ -1,5 +1,4 @@
 class ProfileController < ApplicationController
-  layout "profile"
   before_filter :user
 
   def show
diff --git a/app/controllers/project_controller.rb b/app/controllers/project_controller.rb
index 84c81ce2a171eeb06f1b5b0016913dc44084a35d..de4f317a7bd572749dfe7718d00bbaa8ee236c53 100644
--- a/app/controllers/project_controller.rb
+++ b/app/controllers/project_controller.rb
@@ -2,15 +2,4 @@ class ProjectController < ApplicationController
   before_filter :project
   # Authorize
   before_filter :add_project_abilities
-
-  layout :determine_layout
-
-  protected
-  def determine_layout
-    if @project && !@project.new_record?
-      'project'
-    else
-      'application'
-    end
-  end
 end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 2a11611e84b4d70e4037844817758d2a28ac7fe4..81c267a8ede1845889bfe5f32292f4150b9099ff 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -8,6 +8,8 @@ class ProjectsController < ProjectController
   before_filter :authorize_admin_project!, only: [:edit, :update, :destroy]
   before_filter :require_non_empty_project, only: [:blob, :tree, :graph]
 
+  layout 'application', only: [:new, :create]
+
   def new
     @project = Project.new
   end
diff --git a/app/views/layouts/error.html.haml b/app/views/layouts/errors.html.haml
similarity index 100%
rename from app/views/layouts/error.html.haml
rename to app/views/layouts/errors.html.haml
diff --git a/config/application.rb b/config/application.rb
index 27de3fa2436b3f0e2b865ce2399d74d9826fbd9c..fd0dd019ca14698dc64bea4e57739ab08b948134 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -53,5 +53,9 @@ module Gitlab
 
     # Add fonts
     config.assets.paths << "#{Rails.root}/app/assets/fonts"
+
+    config.to_prepare do
+      Devise::SessionsController.layout 'devise_layout'
+    end
   end
 end