diff --git a/CHANGELOG b/CHANGELOG
index a98c911f1aae6ab0fe7b7818cde8904052cf2f7b..9b8d0cb250cd4183dfdeeff1f9af8dc60af0afe2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 
 v 7.11.0 (unreleased)
   - Don't allow a merge request to be merged when its title starts with "WIP".
+  - Add a page title to every page.
   - Get Gitorious importer to work again.
   - Fix clone URL field and X11 Primary selection (Dmitry Medvinsky)
   - Ignore invalid lines in .gitmodules
diff --git a/app/controllers/admin/application_controller.rb b/app/controllers/admin/application_controller.rb
index fe5456f820caec82e5060fb4e841dade4860e957..cfbeb035c0ea1ca0c6a2a975de4aa54f4dfba23a 100644
--- a/app/controllers/admin/application_controller.rb
+++ b/app/controllers/admin/application_controller.rb
@@ -2,10 +2,16 @@
 #
 # Automatically sets the layout and ensures an administrator is logged in
 class Admin::ApplicationController < ApplicationController
-  layout 'admin'
   before_action :authenticate_admin!
+  before_action :set_title
 
   def authenticate_admin!
     return render_404 unless current_user.is_admin?
   end
+
+  def set_title
+    @title      = "Admin area"
+    @title_url  = admin_root_path
+    @sidebar    = "admin"
+  end
 end
diff --git a/app/controllers/dashboard/application_controller.rb b/app/controllers/dashboard/application_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0a0af3d4ce2a99d346ed5952287de045e35e65e2
--- /dev/null
+++ b/app/controllers/dashboard/application_controller.rb
@@ -0,0 +1,11 @@
+class Dashboard::ApplicationController < ApplicationController
+  before_action :set_title
+
+  private
+
+  def set_title
+    @title      = "Dashboard"
+    @title_url  = root_path
+    @sidebar    = "dashboard"
+  end
+end
diff --git a/app/controllers/dashboard/groups_controller.rb b/app/controllers/dashboard/groups_controller.rb
index ed14f4e1f3baa9689c8d000381dc67179560a7f3..3bc94ff218747c10c310952971dd61dbf8be6f99 100644
--- a/app/controllers/dashboard/groups_controller.rb
+++ b/app/controllers/dashboard/groups_controller.rb
@@ -1,4 +1,4 @@
-class Dashboard::GroupsController < ApplicationController
+class Dashboard::GroupsController < Dashboard::ApplicationController
   def index
     @group_members = current_user.group_members.page(params[:page]).per(PER_PAGE)
   end
diff --git a/app/controllers/dashboard/milestones_controller.rb b/app/controllers/dashboard/milestones_controller.rb
index 33227e7f1d8bc6ec1e8e3d352a5310b685ce4814..53896d4f2c73a356334d9e88b36f96b22c3aa71b 100644
--- a/app/controllers/dashboard/milestones_controller.rb
+++ b/app/controllers/dashboard/milestones_controller.rb
@@ -1,4 +1,4 @@
-class Dashboard::MilestonesController < ApplicationController
+class Dashboard::MilestonesController < Dashboard::ApplicationController
   before_action :load_projects
 
   def index
diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb
index 426bc6154153053a82ffa0e54a59e1a22c34c3ac..da96171e88568e7c5bb8ce55e3e350763f58c420 100644
--- a/app/controllers/dashboard/projects_controller.rb
+++ b/app/controllers/dashboard/projects_controller.rb
@@ -1,4 +1,4 @@
-class Dashboard::ProjectsController < ApplicationController
+class Dashboard::ProjectsController < Dashboard::ApplicationController
   before_action :event_filter
 
   def starred
diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 40b5de1295a0447005f585e5bc19c9d4bbc37f75..17ddde68f93efc0a4db76e8ebc55114d00094de7 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -1,8 +1,8 @@
-class DashboardController < ApplicationController
-  respond_to :html
-
+class DashboardController < Dashboard::ApplicationController
   before_action :load_projects, except: [:projects]
   before_action :event_filter, only: :show
+  
+  respond_to :html
 
   def show
     @projects = @projects.includes(:namespace)
diff --git a/app/controllers/explore/application_controller.rb b/app/controllers/explore/application_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8d94fd238a6a20a9ab9fb955c4ba3150a6fa1a34
--- /dev/null
+++ b/app/controllers/explore/application_controller.rb
@@ -0,0 +1,11 @@
+class Explore::ApplicationController < ApplicationController
+  before_action :set_title
+
+  private
+
+  def set_title
+    @title      = "Explore GitLab"
+    @title_url  = explore_root_path
+    @sidebar    = "explore"
+  end
+end
diff --git a/app/controllers/explore/groups_controller.rb b/app/controllers/explore/groups_controller.rb
index a7250b799f352141d412f47efe062dd0d2a4fb6a..55cda0cff17bada4f7cbc701bf1c4b7aba27b971 100644
--- a/app/controllers/explore/groups_controller.rb
+++ b/app/controllers/explore/groups_controller.rb
@@ -1,9 +1,7 @@
-class Explore::GroupsController < ApplicationController
+class Explore::GroupsController < Explore::ApplicationController
   skip_before_action :authenticate_user!,
                      :reject_blocked, :set_current_user_for_observers
 
-  layout "explore"
-
   def index
     @groups = GroupsFinder.new.execute(current_user)
     @groups = @groups.search(params[:search]) if params[:search].present?
diff --git a/app/controllers/explore/projects_controller.rb b/app/controllers/explore/projects_controller.rb
index b1b0a2514dc0858ff30ffcb74dd10ec1e2e6232f..e9bcb44f6b3967489443f96cc477a7560890217f 100644
--- a/app/controllers/explore/projects_controller.rb
+++ b/app/controllers/explore/projects_controller.rb
@@ -1,9 +1,7 @@
-class Explore::ProjectsController < ApplicationController
+class Explore::ProjectsController < Explore::ApplicationController
   skip_before_action :authenticate_user!,
                      :reject_blocked
 
-  layout 'explore'
-
   def index
     @projects = ProjectsFinder.new.execute(current_user)
     @tags = @projects.tags_on(:tags)
diff --git a/app/controllers/groups/application_controller.rb b/app/controllers/groups/application_controller.rb
index 469a6813ee22a5e80f262705b3ed7208b3964c4c..e0fd4befae9abd1ac7466efdfef37477983dbc84 100644
--- a/app/controllers/groups/application_controller.rb
+++ b/app/controllers/groups/application_controller.rb
@@ -1,4 +1,5 @@
 class Groups::ApplicationController < ApplicationController
+  before_action :set_title
 
   private
   
@@ -18,11 +19,9 @@ class Groups::ApplicationController < ApplicationController
     end
   end
 
-  def determine_layout
-    if current_user
-      'group'
-    else
-      'public_group'
-    end
+  def set_title
+    @title      = group.name
+    @title_url  = group_path(group)
+    @sidebar    = "group"
   end
 end
diff --git a/app/controllers/groups/avatars_controller.rb b/app/controllers/groups/avatars_controller.rb
index 38071410f404a12b4b40ace7b181f6a5b12bb0fd..6aa64222f7789601cfbfbca55ed02ee5b69d8cb1 100644
--- a/app/controllers/groups/avatars_controller.rb
+++ b/app/controllers/groups/avatars_controller.rb
@@ -1,6 +1,4 @@
 class Groups::AvatarsController < ApplicationController
-  layout "profile"
-
   def destroy
     @group = Group.find_by(path: params[:group_id])
     @group.remove_avatar!
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index 41564b04a92482bd297e042d4e9029daf8aab23a..669f7f3126df188bb34056a3cd7246506e5f9b1a 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -1,6 +1,4 @@
-class Groups::MilestonesController < ApplicationController
-  layout 'group'
-
+class Groups::MilestonesController < Groups::ApplicationController
   before_action :authorize_group_milestone!, only: :update
 
   def index
diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb
index 294af0b170450ef6a198a0b11e00bf4bd4813aed..66e92abff8d045695fd25a231296eacc17bdb96e 100644
--- a/app/controllers/groups_controller.rb
+++ b/app/controllers/groups_controller.rb
@@ -11,9 +11,6 @@ class GroupsController < Groups::ApplicationController
   # Load group projects
   before_action :load_projects, except: [:new, :create, :projects, :edit, :update]
   before_action :event_filter, only: :show
-  before_action :set_title, only: [:new, :create]
-
-  layout :determine_layout
 
   def new
     @group = Group.new
@@ -120,16 +117,10 @@ class GroupsController < Groups::ApplicationController
   end
 
   def set_title
-    @title = 'New Group'
-  end
-
-  def determine_layout
     if [:new, :create].include?(action_name.to_sym)
-      'navless'
-    elsif current_user
-      'group'
+      @title = 'New Group'
     else
-      'public_group'
+      super
     end
   end
 
diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb
index 35ece5b270b95c119292704452884f888e1ad650..b405cc7e689f965de124c64985107410699b3aae 100644
--- a/app/controllers/help_controller.rb
+++ b/app/controllers/help_controller.rb
@@ -3,12 +3,12 @@ class HelpController < ApplicationController
   end
 
   def show
-    category = clean_path_info(path_params[:category])
-    file = path_params[:file]
+    @category = clean_path_info(path_params[:category])
+    @file = path_params[:file]
 
     respond_to do |format|
       format.any(:markdown, :md, :html) do
-        path = Rails.root.join('doc', category, "#{file}.md")
+        path = Rails.root.join('doc', @category, "#{@file}.md")
 
         if File.exist?(path)
           @markdown = File.read(path)
@@ -22,7 +22,7 @@ class HelpController < ApplicationController
 
       # Allow access to images in the doc folder
       format.any(:png, :gif, :jpeg) do
-        path = Rails.root.join('doc', category, "#{file}.#{params[:format]}")
+        path = Rails.root.join('doc', @category, "#{@file}.#{params[:format]}")
 
         if File.exist?(path)
           send_file(path, disposition: 'inline')
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb
index a29c03395f42ca43a94cf61d7a473efc32500c87..eb3c82335308692bf86d90b424d7167313d75be2 100644
--- a/app/controllers/invites_controller.rb
+++ b/app/controllers/invites_controller.rb
@@ -4,8 +4,6 @@ class InvitesController < ApplicationController
 
   respond_to :html
 
-  layout 'navless'
-
   def show
 
   end
diff --git a/app/controllers/oauth/applications_controller.rb b/app/controllers/oauth/applications_controller.rb
index ea256de2c3e53ce6f59b4745fb29a906ef27d97f..f30a85564d448954b1b68ec72ffefd736213a3db 100644
--- a/app/controllers/oauth/applications_controller.rb
+++ b/app/controllers/oauth/applications_controller.rb
@@ -1,6 +1,6 @@
 class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
   before_action :authenticate_user!
-  layout "profile"
+  before_action :set_title
 
   def index
     head :forbidden and return
@@ -36,4 +36,10 @@ class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
   rescue_from ActiveRecord::RecordNotFound do |exception|
     render "errors/not_found", layout: "errors", status: 404
   end
+
+  def set_title
+    @title      = "Profile"
+    @title_url  = profile_path
+    @sidebar    = "profile"
+  end
 end
diff --git a/app/controllers/oauth/authorizations_controller.rb b/app/controllers/oauth/authorizations_controller.rb
index 6d3c1a320db1d0ca1ee30e86ada197c4c8c89ff9..c62890ba85b86a9c65b646c14552e2a7d6ffc88a 100644
--- a/app/controllers/oauth/authorizations_controller.rb
+++ b/app/controllers/oauth/authorizations_controller.rb
@@ -1,6 +1,6 @@
 class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
   before_action :authenticate_resource_owner!
-  layout "profile"
+  before_action :set_title
 
   def new
     if pre_auth.authorizable?
@@ -54,4 +54,10 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
   def strategy
     @strategy ||= server.authorization_request(pre_auth.response_type)
   end
+  
+  def set_title
+    @title      = "Profile"
+    @title_url  = profile_path
+    @sidebar    = "profile"
+  end
 end
diff --git a/app/controllers/oauth/authorized_applications_controller.rb b/app/controllers/oauth/authorized_applications_controller.rb
index 0b27ce7da7291db743126bae189f107e948652d5..6d0bf9889e64b9e7e70716330dac0682ed5901f8 100644
--- a/app/controllers/oauth/authorized_applications_controller.rb
+++ b/app/controllers/oauth/authorized_applications_controller.rb
@@ -1,8 +1,16 @@
 class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicationsController
-  layout "profile"
+  before_filter :set_title
 
   def destroy
     Doorkeeper::AccessToken.revoke_all_for(params[:id], current_resource_owner)
     redirect_to applications_profile_url, notice: I18n.t(:notice, scope: [:doorkeeper, :flash, :authorized_applications, :destroy])
   end
+
+  private
+  
+  def set_title
+    @title      = "Profile"
+    @title_url  = profile_path
+    @sidebar    = "profile"
+  end
 end
diff --git a/app/controllers/profiles/accounts_controller.rb b/app/controllers/profiles/accounts_controller.rb
index 9bd34fe22613ea5401ab2408887a3e277414ef47..175afbf84259fa09434ce6da423a14d90d7a9b3f 100644
--- a/app/controllers/profiles/accounts_controller.rb
+++ b/app/controllers/profiles/accounts_controller.rb
@@ -1,6 +1,4 @@
-class Profiles::AccountsController < ApplicationController
-  layout "profile"
-
+class Profiles::AccountsController < Profiles::ApplicationController
   def show
     @user = current_user
   end
diff --git a/app/controllers/profiles/application_controller.rb b/app/controllers/profiles/application_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8373ff7a758acf6b47c65d777ef5ea42f122baa1
--- /dev/null
+++ b/app/controllers/profiles/application_controller.rb
@@ -0,0 +1,11 @@
+class Profiles::ApplicationController < ApplicationController
+  before_action :set_title
+
+  private
+
+  def set_title
+    @title      = "Profile"
+    @title_url  = profile_path
+    @sidebar    = "profile"
+  end
+end
diff --git a/app/controllers/profiles/avatars_controller.rb b/app/controllers/profiles/avatars_controller.rb
index 57f3bbf0627ad4d79fe4e712b2f8504ec5c3cf46..f193adb46b488734c3e7c294823714ac92062f6e 100644
--- a/app/controllers/profiles/avatars_controller.rb
+++ b/app/controllers/profiles/avatars_controller.rb
@@ -1,6 +1,4 @@
-class Profiles::AvatarsController < ApplicationController
-  layout "profile"
-
+class Profiles::AvatarsController < Profiles::ApplicationController
   def destroy
     @user = current_user
     @user.remove_avatar!
diff --git a/app/controllers/profiles/emails_controller.rb b/app/controllers/profiles/emails_controller.rb
index 954c98c0d9ff6775ba75fa3d9d9090a2787088de..3e904700de5fb9607660ea952d1e0e4d94b145a4 100644
--- a/app/controllers/profiles/emails_controller.rb
+++ b/app/controllers/profiles/emails_controller.rb
@@ -1,6 +1,4 @@
-class Profiles::EmailsController < ApplicationController
-  layout "profile"
-
+class Profiles::EmailsController < Profiles::ApplicationController
   def index
     @primary = current_user.email
     @public_email = current_user.public_email
diff --git a/app/controllers/profiles/keys_controller.rb b/app/controllers/profiles/keys_controller.rb
index b0a5a631c63e3282a4aed088b7ad2749a7ad7581..f3224148fda5b478a9091e3671b45c65dfc6c3e3 100644
--- a/app/controllers/profiles/keys_controller.rb
+++ b/app/controllers/profiles/keys_controller.rb
@@ -1,5 +1,4 @@
-class Profiles::KeysController < ApplicationController
-  layout "profile"
+class Profiles::KeysController < Profiles::ApplicationController
   skip_before_action :authenticate_user!, only: [:get_keys]
 
   def index
diff --git a/app/controllers/profiles/notifications_controller.rb b/app/controllers/profiles/notifications_controller.rb
index 3fdcbbab61b531633827a36f336393e9d185f137..22423651c1747c9928f32999f009fc78f7c0cf1f 100644
--- a/app/controllers/profiles/notifications_controller.rb
+++ b/app/controllers/profiles/notifications_controller.rb
@@ -1,6 +1,4 @@
-class Profiles::NotificationsController < ApplicationController
-  layout 'profile'
-
+class Profiles::NotificationsController < Profiles::ApplicationController
   def show
     @user = current_user
     @notification = current_user.notification
diff --git a/app/controllers/profiles/passwords_controller.rb b/app/controllers/profiles/passwords_controller.rb
index b719a7fe9a9ca495c522542243ce653fb2056637..94ac62cb32cc5350214ec074ccc7e29d8eeafb46 100644
--- a/app/controllers/profiles/passwords_controller.rb
+++ b/app/controllers/profiles/passwords_controller.rb
@@ -1,6 +1,4 @@
 class Profiles::PasswordsController < ApplicationController
-  layout :determine_layout
-
   skip_before_action :check_password_expiration, only: [:new, :create]
 
   before_action :set_user
@@ -67,14 +65,10 @@ class Profiles::PasswordsController < ApplicationController
   end
 
   def set_title
-    @title = "New password"
-  end
-
-  def determine_layout
     if [:new, :create].include?(action_name.to_sym)
-      'navless'
+      @title = "New password"
     else
-      'profile'
+      super
     end
   end
 
diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb
index eb001e8d73955ed5b8028e06e34cc3c5b74b06e5..f4366c18e7be0be077632b107d43154a9d912d94 100644
--- a/app/controllers/profiles_controller.rb
+++ b/app/controllers/profiles_controller.rb
@@ -1,12 +1,10 @@
-class ProfilesController < ApplicationController
+class ProfilesController < Profiles::ApplicationController
   include ActionView::Helpers::SanitizeHelper
 
   before_action :user
   before_action :authorize_change_username!, only: :update_username
   skip_before_action :require_email, only: [:show, :update]
 
-  layout 'profile'
-
   def show
   end
 
diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb
index f7a28e920d190d139444d713509e04396ff4af85..ee88d49b40036a6fa125e74dcd0dd1a6f3bd048a 100644
--- a/app/controllers/projects/application_controller.rb
+++ b/app/controllers/projects/application_controller.rb
@@ -1,7 +1,7 @@
 class Projects::ApplicationController < ApplicationController
   before_action :project
   before_action :repository
-  layout :determine_layout
+  layout 'project'
 
   def authenticate_user!
     # Restrict access to Projects area only
@@ -17,14 +17,6 @@ class Projects::ApplicationController < ApplicationController
     super
   end
 
-  def determine_layout
-    if current_user
-      'projects'
-    else
-      'public_projects'
-    end
-  end
-
   def require_branch_head
     unless @repository.branch_names.include?(@ref)
       redirect_to(
diff --git a/app/controllers/projects/avatars_controller.rb b/app/controllers/projects/avatars_controller.rb
index 22a12c4b9ae025e4d4d2f6ebd495e3648095c0f3..9c3763d5934e0245cc7e8133b2e136fdd7510fa1 100644
--- a/app/controllers/projects/avatars_controller.rb
+++ b/app/controllers/projects/avatars_controller.rb
@@ -1,6 +1,4 @@
 class Projects::AvatarsController < Projects::ApplicationController
-  layout 'project'
-
   before_action :project
 
   def show
diff --git a/app/controllers/projects/forks_controller.rb b/app/controllers/projects/forks_controller.rb
index 01a079d2e6593d9a3bdb6e05d5d9bd3778d655e7..9e72597ea87f3296183ab325ab22e64637e3de23 100644
--- a/app/controllers/projects/forks_controller.rb
+++ b/app/controllers/projects/forks_controller.rb
@@ -18,7 +18,6 @@ class Projects::ForksController < Projects::ApplicationController
         notice: 'Project was successfully forked.'
       )
     else
-      @title = 'Fork project'
       render :error
     end
   end
diff --git a/app/controllers/projects/uploads_controller.rb b/app/controllers/projects/uploads_controller.rb
index e2d0b0d945908c9746c7a94e4de8422b98ea675a..71ecc20dd95ea7fe681e5b9ed5ef378974eeb8e6 100644
--- a/app/controllers/projects/uploads_controller.rb
+++ b/app/controllers/projects/uploads_controller.rb
@@ -1,6 +1,4 @@
 class Projects::UploadsController < Projects::ApplicationController
-  layout 'project'
-
   skip_before_action :authenticate_user!, :reject_blocked!, :project,
     :repository, if: -> { action_name == 'show' && image? }
 
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 883e5865a21060a040d6d8ec5b6e2f7b98ec2293..da6b0c3c91aea22cb87da00ae94de4cfe1cc4350 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -9,14 +9,14 @@ class ProjectsController < ApplicationController
   before_action :set_title, only: [:new, :create]
   before_action :event_filter, only: :show
 
-  layout 'navless', only: [:new, :create, :fork]
+  layout :determine_layout
 
   def new
     @project = Project.new
   end
 
   def edit
-    render 'edit', layout: 'project_settings'
+    render 'edit'
   end
 
   def create
@@ -46,7 +46,7 @@ class ProjectsController < ApplicationController
         end
         format.js
       else
-        format.html { render 'edit', layout: 'project_settings' }
+        format.html { render 'edit' }
         format.js
       end
     end
@@ -72,13 +72,13 @@ class ProjectsController < ApplicationController
       format.html do
         if @project.repository_exists?
           if @project.empty_repo?
-            render 'projects/empty', layout: user_layout
+            render 'projects/empty'
           else
             @last_push = current_user.recent_push(@project.id) if current_user
-            render :show, layout: user_layout
+            render :show
           end
         else
-          render 'projects/no_repo', layout: user_layout
+          render 'projects/no_repo'
         end
       end
 
@@ -164,8 +164,14 @@ class ProjectsController < ApplicationController
     @title = 'New Project'
   end
 
-  def user_layout
-    current_user ? 'projects' : 'public_projects'
+  def determine_layout
+    if [:new, :create].include?(action_name.to_sym)
+      'application'
+    elsif [:edit, :update].include?(action_name.to_sym)
+      'project_settings'
+    else
+      'project'
+    end
   end
 
   def load_events
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index ad9e9e8487e75004ad3f73fd1bac9e68cf08081c..ba6f2a41fdce1fa1d6100388fd17ae9114a4222e 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -1,6 +1,8 @@
 class SearchController < ApplicationController
   include SearchHelper
 
+  before_action :set_title
+
   def show
     return if params[:search].nil? || params[:search].blank?
 
@@ -55,4 +57,11 @@ class SearchController < ApplicationController
 
     render json: search_autocomplete_opts(term).to_json
   end
+
+  private
+
+  def set_title
+    @title      = "Search"
+    @title_url  = search_path
+  end
 end
diff --git a/app/controllers/snippets_controller.rb b/app/controllers/snippets_controller.rb
index a5259466cb8d2b6853b07c27375cbb9e8235235c..c960724b47a26e48febdf5a8a0b55da1cc94c1bb 100644
--- a/app/controllers/snippets_controller.rb
+++ b/app/controllers/snippets_controller.rb
@@ -13,8 +13,6 @@ class SnippetsController < ApplicationController
 
   respond_to :html
 
-  layout :determine_layout
-
   def index
     if params[:username].present?
       @user = User.find_by(username: params[:username])
@@ -99,15 +97,12 @@ class SnippetsController < ApplicationController
   end
 
   def set_title
-    @title = 'Snippets'
-    @title_url = snippets_path
+    @title      = 'Snippets'
+    @title_url  = snippets_path
+    @sidebar    = "snippets"
   end
 
   def snippet_params
     params.require(:personal_snippet).permit(:title, :content, :file_name, :private, :visibility_level)
   end
-
-  def determine_layout
-    current_user ? 'snippets' : 'public_users'
-  end
 end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 460cc868b35cee1b7aef1942d4dda40408fc9779..7285098435b23c00a01389fea20448ec2a0f2329 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1,7 +1,6 @@
 class UsersController < ApplicationController
   skip_before_action :authenticate_user!
   before_action :set_user
-  layout :determine_layout
 
   def show
     @contributed_projects = contributed_projects.joined(@user).
@@ -51,14 +50,6 @@ class UsersController < ApplicationController
     render 'calendar_activities', layout: false
   end
 
-  def determine_layout
-    if current_user
-      'navless'
-    else
-      'public_users'
-    end
-  end
-
   private
 
   def set_user
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 6e86400a4f6e4c3bd9a5d4db8bf3508b5a01688a..399e49e352dd1d4b354b583456629d24f6702f86 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -332,4 +332,12 @@ module ApplicationHelper
       end
     "#{entity_title}#{count}"
   end
+
+  def page_title(*titles)
+    @page_title ||= []
+
+    @page_title.push(*titles.compact) if titles.any?
+
+    @page_title.join(" | ")
+  end
 end
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index add0a776a6366885eefac034113589c891d2eb5b..3569ac2af635537c852a8d110ae7a42cf5597c79 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -19,24 +19,6 @@ module GroupsHelper
     end
   end
 
-  def group_head_title
-    title = @group.name
-
-    title = if current_action?(:issues)
-              "Issues - " + title
-            elsif current_action?(:merge_requests)
-              "Merge requests - " + title
-            elsif current_action?(:members)
-              "Members - " + title
-            elsif current_action?(:edit)
-              "Settings - " + title
-            else
-              title
-            end
-
-    title
-  end
-
   def group_settings_page?
     if current_controller?('groups')
       current_action?('edit') || current_action?('projects')
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index c2a7732e6f03dddcc2e2601dc17127088eedbad4..96d2606f1a1ae765492ac37fdf199cd7235ada0d 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -192,46 +192,6 @@ module ProjectsHelper
     'unknown'
   end
 
-  def project_head_title
-    title = @project.name_with_namespace
-
-    title = if current_controller?(:tree)
-              "#{@project.path}\/#{@path} at #{@ref} - " + title
-            elsif current_controller?(:issues)
-              if current_action?(:show)
-                "Issue ##{@issue.iid} - #{@issue.title} - " + title
-              else
-                "Issues - " + title
-              end
-            elsif current_controller?(:blob)
-              if current_action?(:new) || current_action?(:create)
-                "New file at #{@ref}"
-              elsif current_action?(:show)
-                "#{@blob.path} at #{@ref}"
-              elsif @blob
-                "Edit file #{@blob.path} at #{@ref}"
-              end
-            elsif current_controller?(:commits)
-              "Commits at #{@ref} - " + title
-            elsif current_controller?(:merge_requests)
-              if current_action?(:show)
-                "Merge request ##{@merge_request.iid} - " + title
-              else
-                "Merge requests - " + title
-              end
-            elsif current_controller?(:wikis)
-              "Wiki - " + title
-            elsif current_controller?(:network)
-              "Network graph - " + title
-            elsif current_controller?(:graphs)
-              "Graphs - " + title
-            else
-              title
-            end
-
-    title
-  end
-
   def default_url_to_repo(project = nil)
     project = project || @project
     current_user ? project.url_to_repo : project.http_url_to_repo
diff --git a/app/views/admin/application_settings/show.html.haml b/app/views/admin/application_settings/show.html.haml
index 39b66647a5a878754f9afc1ac642ab387d9c91db..1632dd8affa286d298fbe94f1587b3d86920164f 100644
--- a/app/views/admin/application_settings/show.html.haml
+++ b/app/views/admin/application_settings/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Settings"
 %h3.page-title Application settings
 %hr
 = render 'form'
diff --git a/app/views/admin/applications/edit.html.haml b/app/views/admin/applications/edit.html.haml
index e408ae2f29d0647bae76bf1c039e33ec525ff34a..c596866bde210980094f6bc80ce6440e350dfdcf 100644
--- a/app/views/admin/applications/edit.html.haml
+++ b/app/views/admin/applications/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @application.name, "Applications"
 %h3.page-title Edit application
 - @url = admin_application_path(@application)
-= render 'form', application: @application
\ No newline at end of file
+= render 'form', application: @application
diff --git a/app/views/admin/applications/index.html.haml b/app/views/admin/applications/index.html.haml
index d550278710ebeaf8555308eb868cf9e34f83d55b..fc921a966f3fe7f139ecfb04c9aaf75c97ce259e 100644
--- a/app/views/admin/applications/index.html.haml
+++ b/app/views/admin/applications/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Applications"
 %h3.page-title
   System OAuth applications
 %p.light
diff --git a/app/views/admin/applications/new.html.haml b/app/views/admin/applications/new.html.haml
index 7c62425f19c94bd3bee5c05d9ed9a944b0a2b1a4..2884ee93d5218fa4a5565fb3818e85bbe00bbc61 100644
--- a/app/views/admin/applications/new.html.haml
+++ b/app/views/admin/applications/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New application"
 %h3.page-title New application
 - @url = admin_applications_path
-= render 'form', application: @application
\ No newline at end of file
+= render 'form', application: @application
diff --git a/app/views/admin/applications/show.html.haml b/app/views/admin/applications/show.html.haml
index 2abe390ce13e7b853e11d7c6f28766375dd2c1d6..0ea2ffeda9976b5909d9631b0f397dc1b4b5c9cb 100644
--- a/app/views/admin/applications/show.html.haml
+++ b/app/views/admin/applications/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @application.name, "Applications"
 %h3.page-title
   Application: #{@application.name}
 
diff --git a/app/views/admin/background_jobs/show.html.haml b/app/views/admin/background_jobs/show.html.haml
index 4ef8e878a7f1c419f8c89c641842d4739a46a17e..3a01e1151098e8bc3d553ae2e6e9f68a74f428b5 100644
--- a/app/views/admin/background_jobs/show.html.haml
+++ b/app/views/admin/background_jobs/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Background Jobs"
 %h3.page-title Background Jobs
 %p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing
 
diff --git a/app/views/admin/broadcast_messages/index.html.haml b/app/views/admin/broadcast_messages/index.html.haml
index 7e29311bf42c6f8d7cf8a6f18f362a11af4ef902..267c9a5292104e39f341fceca1e64c8ccf148c19 100644
--- a/app/views/admin/broadcast_messages/index.html.haml
+++ b/app/views/admin/broadcast_messages/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Broadcast Messages"
 %h3.page-title
   Broadcast Messages
 %p.light
diff --git a/app/views/admin/deploy_keys/index.html.haml b/app/views/admin/deploy_keys/index.html.haml
index 2ae83ab95f7ffe7df832ce3bf3d5a6b7e02964ed..367d25cd6a1a975902fa6bbb29ff290e757297c7 100644
--- a/app/views/admin/deploy_keys/index.html.haml
+++ b/app/views/admin/deploy_keys/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Deploy Keys"
 .panel.panel-default
   .panel-heading
     Public deploy keys (#{@deploy_keys.count})
diff --git a/app/views/admin/deploy_keys/new.html.haml b/app/views/admin/deploy_keys/new.html.haml
index c00049424c58180927c409f7b7dd7fd1317f5e34..5b46b3222a9cc5a5ffcdf21c72451a0f739f39be 100644
--- a/app/views/admin/deploy_keys/new.html.haml
+++ b/app/views/admin/deploy_keys/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New Deploy Key"
 %h3.page-title New public deploy key
 %hr
 
diff --git a/app/views/admin/deploy_keys/show.html.haml b/app/views/admin/deploy_keys/show.html.haml
index cfa2adf92eefb0ab6bf5f9bb8951600768a7d8a4..ea361ca4bdbc471af88e3dcb74643d9b16f35bf4 100644
--- a/app/views/admin/deploy_keys/show.html.haml
+++ b/app/views/admin/deploy_keys/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @deploy_key.title, "Deploy Keys"
 .row
   .col-md-4
     .panel.panel-default
diff --git a/app/views/admin/groups/edit.html.haml b/app/views/admin/groups/edit.html.haml
index 824e51c1cf1340ca4ab2244ea376600257ff4f83..eb09a6328ed39d16d1a2a355899b848c4ac75633 100644
--- a/app/views/admin/groups/edit.html.haml
+++ b/app/views/admin/groups/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @group.name, "Groups"
 %h3.page-title Edit group: #{@group.name}
 %hr
 = render 'form'
diff --git a/app/views/admin/groups/index.html.haml b/app/views/admin/groups/index.html.haml
index 4c53ff55708790a7d5e5a9e47df5c3fe91086668..e00b23ad99f5fcea21433abbb73867822a47881d 100644
--- a/app/views/admin/groups/index.html.haml
+++ b/app/views/admin/groups/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Groups"
 %h3.page-title
   Groups (#{@groups.total_count})
   = link_to 'New Group', new_admin_group_path, class: "btn btn-new pull-right"
diff --git a/app/views/admin/groups/new.html.haml b/app/views/admin/groups/new.html.haml
index f46f45c5514853c563a4515d52bbda61ba975a41..9dccda1f76e3cfc9c8dc9b0f04d9ee18eabcbfeb 100644
--- a/app/views/admin/groups/new.html.haml
+++ b/app/views/admin/groups/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New group"
 %h3.page-title New group
 %hr
 = render 'form'
diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml
index 427f38018b0b67a9244214b3bfb21af5d52c506d..187314872de54c851e4cff2f5c287edcac017863 100644
--- a/app/views/admin/groups/show.html.haml
+++ b/app/views/admin/groups/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @group.name, "Groups"
 %h3.page-title
   Group: #{@group.name}
 
diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml
index 7a9dc113f2a93df806c6aa1d3c6b28c69020f8e1..e74e1e85f4165251dc1f8f7d1cf988c01584397c 100644
--- a/app/views/admin/hooks/index.html.haml
+++ b/app/views/admin/hooks/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "System Hooks"
 %h3.page-title
   System hooks
 
diff --git a/app/views/admin/keys/show.html.haml b/app/views/admin/keys/show.html.haml
index 5b23027b3abdbee6c68b0589bf846054c37a5b5e..9ee77c77398bb0d59a79514e04a76efd10c23958 100644
--- a/app/views/admin/keys/show.html.haml
+++ b/app/views/admin/keys/show.html.haml
@@ -1 +1,2 @@
+- page_title @key.title, "Keys"
 = render "profiles/keys/key_details", admin: true
diff --git a/app/views/admin/logs/show.html.haml b/app/views/admin/logs/show.html.haml
index 384c6ee9af5e4fe063a5b32d23946d809fec79c1..1484baa78e0aad795d536599e42fe7ef2f90bcd3 100644
--- a/app/views/admin/logs/show.html.haml
+++ b/app/views/admin/logs/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Logs"
 - loggers = [Gitlab::GitLogger, Gitlab::AppLogger,
              Gitlab::ProductionLogger, Gitlab::SidekiqLogger]
 %ul.nav.nav-tabs.log-tabs
diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml
index 0a13791029d4662a5e69326b51b78078f4b64590..f43d46356fa4c85524499343bed5b5e10f8e095a 100644
--- a/app/views/admin/projects/index.html.haml
+++ b/app/views/admin/projects/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Projects"
 = render 'shared/show_aside'
 
 .row
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
index 78684c692c7e1468b5dc85c81622e2fc9ce8b7ed..4c2865ac3f223d1e946feadbeec82fef1cf12ba2 100644
--- a/app/views/admin/projects/show.html.haml
+++ b/app/views/admin/projects/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @project.name_with_namespace, "Projects"
 %h3.page-title
   Project: #{@project.name_with_namespace}
   = link_to edit_project_path(@project), class: "btn pull-right" do
diff --git a/app/views/admin/services/edit.html.haml b/app/views/admin/services/edit.html.haml
index bcc5832792fea10b70d29a9fb15633f06e001dd0..53d970e33c175c104d06f94d45ecee3ba8c36adf 100644
--- a/app/views/admin/services/edit.html.haml
+++ b/app/views/admin/services/edit.html.haml
@@ -1 +1,2 @@
+- page_title @service.title, "Service Templates"
 = render 'form'
diff --git a/app/views/admin/services/index.html.haml b/app/views/admin/services/index.html.haml
index 0093fb97765b7aa30666f1540a3c8ff74688eb4f..e2377291142f1273697a258e0e350e621f003543 100644
--- a/app/views/admin/services/index.html.haml
+++ b/app/views/admin/services/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Service Templates"
 %h3.page-title Service templates
 %p.light Service template allows you to set default values for project services
 
diff --git a/app/views/admin/users/edit.html.haml b/app/views/admin/users/edit.html.haml
index d71d8189c51274626eb34781fc8ecc462964f0a7..a8837d74dd97043adb8300c71d37f04190e892a8 100644
--- a/app/views/admin/users/edit.html.haml
+++ b/app/views/admin/users/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @user.name, "Users"
 %h3.page-title
   Edit user: #{@user.name}
 .back-link
diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml
index 23a9d76963956e025e0fa6803b94b2222bf8fcf5..fe6484702333c52873e4217bb81ec7e455922413 100644
--- a/app/views/admin/users/index.html.haml
+++ b/app/views/admin/users/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Users"
 = render 'shared/show_aside'
 
 .row
diff --git a/app/views/admin/users/new.html.haml b/app/views/admin/users/new.html.haml
index 8fbb757f42455c1673a7d25681ee513c07740f62..cabce1f516fe0445db49d2bd3bf8ca7aa9550cbe 100644
--- a/app/views/admin/users/new.html.haml
+++ b/app/views/admin/users/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New user"
 %h3.page-title
   New user
 %hr
diff --git a/app/views/admin/users/show.html.haml b/app/views/admin/users/show.html.haml
index 3524f04c5ed5862b12adffb43dfec1f507a8a9fb..7fc85206109d2472d77e8a9c84de192544e8e954 100644
--- a/app/views/admin/users/show.html.haml
+++ b/app/views/admin/users/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @user.name, "Users"
 %h3.page-title
   User:
   = @user.name
diff --git a/app/views/dashboard/groups/index.html.haml b/app/views/dashboard/groups/index.html.haml
index 0cb7f764fab43acc98833a0a3e5381ef3ad9a4ad..5ecd53cff8443c00f3589107336b6a59d70ed2f1 100644
--- a/app/views/dashboard/groups/index.html.haml
+++ b/app/views/dashboard/groups/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Groups"
 %h3.page-title
   Group Membership
   - if current_user.can_create_group?
diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml
index 62cc80a30dc866d706c7468df14a816c63e5cb2b..dfdf0d68c8f426f4e04c12bec9d1ef22664e2419 100644
--- a/app/views/dashboard/issues.html.haml
+++ b/app/views/dashboard/issues.html.haml
@@ -1,3 +1,4 @@
+- page_title "Issues"
 = content_for :meta_tags do
   - if current_user
     = auto_discovery_link_tag(:atom, issues_dashboard_url(format: :atom, private_token: current_user.private_token), title: "#{current_user.name} issues")
diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml
index 97a42461b4e0f54d32a91c139bf1ac3818f1f46b..a7e1b08a0a4e38a6d5065026a662e7ceab96d572 100644
--- a/app/views/dashboard/merge_requests.html.haml
+++ b/app/views/dashboard/merge_requests.html.haml
@@ -1,3 +1,4 @@
+- page_title "Merge Requests"
 %h3.page-title
   Merge Requests
 
diff --git a/app/views/dashboard/milestones/index.html.haml b/app/views/dashboard/milestones/index.html.haml
index 9944c0df8152abe335797699479d9e1175b3e9bf..9a9a5e139a44f72333c0043cd3b615f2d7dcace0 100644
--- a/app/views/dashboard/milestones/index.html.haml
+++ b/app/views/dashboard/milestones/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Milestones"
 %h3.page-title
   Milestones
   %span.pull-right #{@dashboard_milestones.count} milestones
diff --git a/app/views/dashboard/milestones/show.html.haml b/app/views/dashboard/milestones/show.html.haml
index 57cce9ab749ec85fe3e65118a0864c01311c4b72..24f0bcb60d5c9d29ffd8bca42ab30644b67089cb 100644
--- a/app/views/dashboard/milestones/show.html.haml
+++ b/app/views/dashboard/milestones/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @dashboard_milestone.title, "Milestones"
 %h4.page-title
   .issue-box{ class: "issue-box-#{@dashboard_milestone.closed? ? 'closed' : 'open'}" }
     - if @dashboard_milestone.closed?
diff --git a/app/views/dashboard/projects/starred.html.haml b/app/views/dashboard/projects/starred.html.haml
index 67943f2267b2037c2b9addbf7f646ccc36b00a4e..8aaa0a7f071582794bbe9fbcc2179b7bcedd8829 100644
--- a/app/views/dashboard/projects/starred.html.haml
+++ b/app/views/dashboard/projects/starred.html.haml
@@ -1,3 +1,4 @@
+- page_title "Starred Projects"
 - if @projects.any?
   = render 'shared/show_aside'
 
diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml
index d3e37f7494c99a4455b05e95bf2aa4804a307dde..42cfbbf84f2b731d4f16e1a5c8f79820149cac0d 100644
--- a/app/views/devise/registrations/new.html.haml
+++ b/app/views/devise/registrations/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Sign up"
 = render 'devise/shared/signup_box'
 
-= render 'devise/shared/sign_in_link'
\ No newline at end of file
+= render 'devise/shared/sign_in_link'
diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.html.haml
index 89e4e229ac0dd3d1b5c91d65b03f037a23cc79ec..dbc8eda61961b8cae837da916870e0a67d47f51f 100644
--- a/app/views/devise/sessions/new.html.haml
+++ b/app/views/devise/sessions/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Sign in"
 %div
   - if signin_enabled? || ldap_enabled?
     = render 'devise/shared/signin_box'
diff --git a/app/views/doorkeeper/applications/edit.html.haml b/app/views/doorkeeper/applications/edit.html.haml
index 61584eb9c498af026e0e0f97767639830a5c3555..fb6aa30acee484c715027673468ff9b1f3083a3c 100644
--- a/app/views/doorkeeper/applications/edit.html.haml
+++ b/app/views/doorkeeper/applications/edit.html.haml
@@ -1,2 +1,3 @@
+- page_title "Edit", @application.name, "Applications"
 %h3.page-title Edit application
-= render 'form', application: @application
\ No newline at end of file
+= render 'form', application: @application
diff --git a/app/views/doorkeeper/applications/index.html.haml b/app/views/doorkeeper/applications/index.html.haml
index e5be4b4bcac03d41252ecc84df4bc7ee5ce6f577..3b0b19107ca53612bb61fced036d43bea48b1b4f 100644
--- a/app/views/doorkeeper/applications/index.html.haml
+++ b/app/views/doorkeeper/applications/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Applications"
 %h3.page-title Your applications
 %p= link_to 'New Application', new_oauth_application_path, class: 'btn btn-success'
 %table.table.table-striped
@@ -13,4 +14,4 @@
         %td= link_to application.name, oauth_application_path(application)
         %td= application.redirect_uri
         %td= link_to 'Edit', edit_oauth_application_path(application), class: 'btn btn-link'
-        %td= render 'delete_form', application: application
\ No newline at end of file
+        %td= render 'delete_form', application: application
diff --git a/app/views/doorkeeper/applications/show.html.haml b/app/views/doorkeeper/applications/show.html.haml
index 82e78b4af132472bfe0ba411d4e67b25b5781baf..b2dc86e89c8012693b258813dd56007aa83d9878 100644
--- a/app/views/doorkeeper/applications/show.html.haml
+++ b/app/views/doorkeeper/applications/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @application.name, "Application"
 %h3.page-title
   Application: #{@application.name}
 
diff --git a/app/views/errors/access_denied.html.haml b/app/views/errors/access_denied.html.haml
index a1d8664c4ce216ee03702560d9809d58b7e27bb6..012e9857642ca898cec37e0f05b4f14e78fedf52 100644
--- a/app/views/errors/access_denied.html.haml
+++ b/app/views/errors/access_denied.html.haml
@@ -1,3 +1,4 @@
+- page_title "Access Denied"
 %h1 403
 %h3 Access Denied
 %hr
diff --git a/app/views/errors/encoding.html.haml b/app/views/errors/encoding.html.haml
index 64c7451a8dabba140c03f46dd6190760b0f24510..90cfbebfcc67212f86b7c0ad27407c3c5051eea0 100644
--- a/app/views/errors/encoding.html.haml
+++ b/app/views/errors/encoding.html.haml
@@ -1,3 +1,4 @@
+- page_title "Encoding Error"
 %h1 500
 %h3 Encoding Error
 %hr
diff --git a/app/views/errors/git_not_found.html.haml b/app/views/errors/git_not_found.html.haml
index 189e53bca55b7ae44d642591a49d646c63927882..ff5d4cc1506f57a541c6990e9b33d28cda777e7e 100644
--- a/app/views/errors/git_not_found.html.haml
+++ b/app/views/errors/git_not_found.html.haml
@@ -1,3 +1,4 @@
+- page_title "Git Resource Not Found"
 %h1 404
 %h3 Git Resource Not found
 %hr
diff --git a/app/views/errors/not_found.html.haml b/app/views/errors/not_found.html.haml
index 7bf88f592cf621779b42b1198bdb62354db0a7f1..3756b98ebb2e59148b3c91b38212e3259e72e714 100644
--- a/app/views/errors/not_found.html.haml
+++ b/app/views/errors/not_found.html.haml
@@ -1,3 +1,4 @@
+- page_title "Not Found"
 %h1 404
 %h3 The resource you were looking for doesn't exist.
 %hr
diff --git a/app/views/errors/omniauth_error.html.haml b/app/views/errors/omniauth_error.html.haml
index f3c8221a9d98c970d0415cd2250008c8a08c9682..3e70e98a24c55456052dc119d2235f8927e50c05 100644
--- a/app/views/errors/omniauth_error.html.haml
+++ b/app/views/errors/omniauth_error.html.haml
@@ -1,3 +1,4 @@
+- page_title "Auth Error"
 %h1 422
 %h3 Sign-in using #{@provider} auth failed
 %hr
diff --git a/app/views/explore/groups/index.html.haml b/app/views/explore/groups/index.html.haml
index 2ea6cb186558187b19d27566ee9143ebe291b419..c05d45e010005bda48febd63f92e97d63f6b5873 100644
--- a/app/views/explore/groups/index.html.haml
+++ b/app/views/explore/groups/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Groups"
 .clearfix
   .pull-left
     = form_tag explore_groups_path, method: :get, class: 'form-inline form-tiny' do |f|
diff --git a/app/views/explore/projects/index.html.haml b/app/views/explore/projects/index.html.haml
index 5086b58cd03e93e359fb991457a4e0204df4455d..ba2276f51ce722da1353750696b49b36e28802b1 100644
--- a/app/views/explore/projects/index.html.haml
+++ b/app/views/explore/projects/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Projects"
 .clearfix
   = render 'filter'
 
diff --git a/app/views/explore/projects/starred.html.haml b/app/views/explore/projects/starred.html.haml
index 420f069375660faba0c25edee18f7de62ec54224..b5d146b1f2fe296769b52f6b4a5576f3b56d91ce 100644
--- a/app/views/explore/projects/starred.html.haml
+++ b/app/views/explore/projects/starred.html.haml
@@ -1,3 +1,4 @@
+- page_title "Starred Projects"
 .explore-trending-block
   %p.lead
     %i.fa.fa-star
diff --git a/app/views/explore/projects/trending.html.haml b/app/views/explore/projects/trending.html.haml
index 18749ac00ae661ab21b700d603dfaf211b4065b5..5ae2653fede07cae8a0bc6f05d772a8d993a6fe6 100644
--- a/app/views/explore/projects/trending.html.haml
+++ b/app/views/explore/projects/trending.html.haml
@@ -1,3 +1,4 @@
+- page_title "Trending Projects"
 .explore-title
   %h3
     Explore GitLab
diff --git a/app/views/groups/_settings_nav.html.haml b/app/views/groups/_settings_nav.html.haml
deleted file mode 100644
index f93caf90076666c3bec29a031dce33145115baf6..0000000000000000000000000000000000000000
--- a/app/views/groups/_settings_nav.html.haml
+++ /dev/null
@@ -1,11 +0,0 @@
-%ul.sidebar-subnav
-  = nav_link(path: 'groups#edit') do
-    = link_to edit_group_path(@group), title: 'Group', data: {placement: 'right'} do
-      = icon('pencil-square-o')
-      %span
-        Group
-  = nav_link(path: 'groups#projects') do
-    = link_to projects_group_path(@group), title: 'Projects', data: {placement: 'right'} do
-      = icon('folder')
-      %span
-        Projects
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index 49e7180bf9873a6d171a77481f04bfc5379f56a9..85179d4c4a2b97e706ebe610b8dae847c93db298 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Settings"
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml
index c0c9cd170ad6d717747fc8985bd2f27f7e08cc8a..903ca877218cf66a410a992cf3d382563f2c7255 100644
--- a/app/views/groups/group_members/index.html.haml
+++ b/app/views/groups/group_members/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Members"
 - show_roles = should_user_see_group_roles?(current_user, @group)
 
 %h3.page-title
diff --git a/app/views/groups/issues.html.haml b/app/views/groups/issues.html.haml
index cf0da2da46696b37a2f34f9c0750c94a69bb5d15..6a3da6adacf47bd0299dd6bc406bbff3b66fbcbd 100644
--- a/app/views/groups/issues.html.haml
+++ b/app/views/groups/issues.html.haml
@@ -1,3 +1,4 @@
+- page_title "Issues"
 = content_for :meta_tags do
   - if current_user
     = auto_discovery_link_tag(:atom, issues_group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} issues")
diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml
index 1ad74905636f7f3b0637696bcaa6262b36ab4766..268f33d57618a179b3cc9172a4a6ec97f5505b99 100644
--- a/app/views/groups/merge_requests.html.haml
+++ b/app/views/groups/merge_requests.html.haml
@@ -1,3 +1,4 @@
+- page_title "Merge Requests"
 %h3.page-title
   Merge Requests
 
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index 008d5a6bd22486a89388d9e5f756255b50428297..385222fa5b7784a95152304e2dd7a9e77c4bdbe3 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Milestones"
 %h3.page-title
   Milestones
   %span.pull-right #{@group_milestones.count} milestones
diff --git a/app/views/groups/milestones/show.html.haml b/app/views/groups/milestones/show.html.haml
index fb32f2caa4c8bcb7d5c4523257327280884c7d31..0ab15c90aff3d96a4b491a8b95db42ff483b180a 100644
--- a/app/views/groups/milestones/show.html.haml
+++ b/app/views/groups/milestones/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @group_milestone.title, "Milestone"
 %h4.page-title
   .issue-box{ class: "issue-box-#{@group_milestone.closed? ? 'closed' : 'open'}" }
     - if @group_milestone.closed?
diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml
index 0d547984cc9403f459493374020e6660b263849b..6b7efa83dead48eb166f9d4943060dd02d0b96fd 100644
--- a/app/views/groups/projects.html.haml
+++ b/app/views/groups/projects.html.haml
@@ -1,3 +1,4 @@
+- page_title "Projects"
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/help/index.html.haml b/app/views/help/index.html.haml
index af39dfeac5b5834f5fe7f43feacfdf19a496adf3..9ebdd373f39b0efc4df850d3ef9845d63080f7b5 100644
--- a/app/views/help/index.html.haml
+++ b/app/views/help/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Help"
 %div
   %h1
     GitLab
diff --git a/app/views/help/show.html.haml b/app/views/help/show.html.haml
index cc1be6a717aeaf68026f078c2d81629702a9678d..1ff5ddb4c116de7feb8b726f4956b9011fefaa41 100644
--- a/app/views/help/show.html.haml
+++ b/app/views/help/show.html.haml
@@ -1,2 +1,3 @@
+- page_title @file, *@category.split("/").reverse, "Help"
 .documentation.wiki
   = markdown @markdown.gsub('$your_email', current_user.email)
diff --git a/app/views/help/ui.html.haml b/app/views/help/ui.html.haml
index 246a6c1bdfd5dbd46bd4d7f915e9ec9e8a9b1317..7c89457ace3885129eaea47487e560ead6dec74a 100644
--- a/app/views/help/ui.html.haml
+++ b/app/views/help/ui.html.haml
@@ -1,3 +1,4 @@
+- page_title "UI Development Kit", "Help"
 - lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fermentum nisi sapien, non consequat lectus aliquam ultrices. Suspendisse sodales est euismod nunc condimentum, a consectetur diam ornare."
 
 .gitlab-ui-dev-kit
diff --git a/app/views/import/bitbucket/status.html.haml b/app/views/import/bitbucket/status.html.haml
index 4e49bbbc7fa1184bb16fd77049776d82eab15893..9d2858e4e727a027a3b776b117c574411864949a 100644
--- a/app/views/import/bitbucket/status.html.haml
+++ b/app/views/import/bitbucket/status.html.haml
@@ -1,3 +1,4 @@
+- page_title "Bitbucket import"
 %h3.page-title
   %i.fa.fa-bitbucket
   Import projects from Bitbucket
diff --git a/app/views/import/github/status.html.haml b/app/views/import/github/status.html.haml
index f0bc3e6b1ac91abca4c2510d93712920526381fd..ef5524982390fe4817753d043bb934157cd39601 100644
--- a/app/views/import/github/status.html.haml
+++ b/app/views/import/github/status.html.haml
@@ -1,3 +1,4 @@
+- page_title "GitHub import"
 %h3.page-title
   %i.fa.fa-github
   Import projects from GitHub
diff --git a/app/views/import/gitlab/status.html.haml b/app/views/import/gitlab/status.html.haml
index 33b0a21acf3b187e1c1d996c7fd3f57a6d5463f5..727f3c7e7fa69b1ace9ff715880c72d012d7f4d4 100644
--- a/app/views/import/gitlab/status.html.haml
+++ b/app/views/import/gitlab/status.html.haml
@@ -1,3 +1,4 @@
+- page_title "GitLab.com import"
 %h3.page-title
   %i.fa.fa-heart
   Import projects from GitLab.com
diff --git a/app/views/import/gitorious/status.html.haml b/app/views/import/gitorious/status.html.haml
index 78c5e957be0f3d1feb65952da4de5c3a9ad8c487..bff7ee7c85d657e532cb754f5a9cb4de1953fd52 100644
--- a/app/views/import/gitorious/status.html.haml
+++ b/app/views/import/gitorious/status.html.haml
@@ -1,3 +1,4 @@
+- page_title "Gitorious import"
 %h3.page-title
   %i.icon-gitorious.icon-gitorious-big
   Import projects from Gitorious.org
diff --git a/app/views/import/google_code/new.html.haml b/app/views/import/google_code/new.html.haml
index ce78fec205f1683207e0a21b2e7058a5266d89d2..9c64e0a009fb73931f3845306911929d33b5ef6e 100644
--- a/app/views/import/google_code/new.html.haml
+++ b/app/views/import/google_code/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Google Code import"
 %h3.page-title
   %i.fa.fa-google
   Import projects from Google Code
diff --git a/app/views/import/google_code/new_user_map.html.haml b/app/views/import/google_code/new_user_map.html.haml
index 9c6824ecad7e49de7ff039f5093eacbb12041e3b..e53ebda7dc19683ab7d601aa73a4735d85504a20 100644
--- a/app/views/import/google_code/new_user_map.html.haml
+++ b/app/views/import/google_code/new_user_map.html.haml
@@ -1,3 +1,4 @@
+- page_title "User map", "Google Code import"
 %h3.page-title
   %i.fa.fa-google
   Import projects from Google Code
diff --git a/app/views/import/google_code/status.html.haml b/app/views/import/google_code/status.html.haml
index b01b63f2a7452959f9b447aa1915128027834d12..e8ec79e72f7fed286f5c4bfa171f48cfa418a02a 100644
--- a/app/views/import/google_code/status.html.haml
+++ b/app/views/import/google_code/status.html.haml
@@ -1,3 +1,4 @@
+- page_title "Google Code import"
 %h3.page-title
   %i.fa.fa-google
   Import projects from Google Code
diff --git a/app/views/invites/show.html.haml b/app/views/invites/show.html.haml
index ab0ecffe4d2b24524efc69007cfaa9a5324b7d3a..2fd4859c1c628e50158caa477d424f21c1b993df 100644
--- a/app/views/invites/show.html.haml
+++ b/app/views/invites/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Invitation"
 %h3.page-title Invitation
 
 %p
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index f72882d883e77a313b88d132afad04f8209ce9bd..b1a57d9824e21dba3a3129aa142a200a1d4d6ca4 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -1,11 +1,10 @@
+- page_title "GitLab"
 %head
   %meta{charset: "utf-8"}
   %meta{'http-equiv' => 'X-UA-Compatible', content: 'IE=edge'}
   %meta{content: "GitLab Community Edition", name: "description"}
 
-  %title
-    = "#{title} | " if defined?(title)
-    GitLab
+  %title= page_title
 
   = favicon_link_tag 'favicon.ico'
   = stylesheet_link_tag    "application", :media => "all"
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index 0fa2ec9824dc44f2be60197f0d1d008d4810a217..5c55bdb546500fa4239a4a3ae5f9b0af7ce3aded 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -1,8 +1,8 @@
 .page-with-sidebar{ class: nav_sidebar_class }
   = render "layouts/broadcast"
   .sidebar-wrapper
-    - if defined?(sidebar)
-      = render(sidebar)
+    - if defined?(sidebar) && sidebar
+      = render "layouts/nav/#{sidebar}"
     - elsif current_user
       = render 'layouts/nav/dashboard'
     .collapse-nav
diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml
deleted file mode 100644
index ab84e87c300209e2a7d3a42c7c15e9d003d86f6c..0000000000000000000000000000000000000000
--- a/app/views/layouts/admin.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: "Admin area"
-  %body{class: "#{app_theme}  admin", :'data-page' => body_data_page}
-    = render "layouts/head_panel", title: link_to("Admin area", admin_root_path)
-    = render 'layouts/page', sidebar: 'layouts/nav/admin'
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index 6bd8ac4adb85e4e9b9e6d8469963c36b0dd20fb0..e0829d40bc42254f5ca19c198af40311ae070b61 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -1,6 +1,13 @@
+- page_title @title
 !!! 5
 %html{ lang: "en"}
-  = render "layouts/head", title: "Dashboard"
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page }
-    = render "layouts/head_panel", title: link_to("Dashboard", root_path)
-    = render 'layouts/page', sidebar: 'layouts/nav/dashboard'
+  = render "layouts/head"
+  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
+    - title = defined?(@title_url) ? link_to(@title, @title_url) : @title
+
+    - if current_user
+      = render "layouts/head_panel", title: title
+    - else
+      = render "layouts/public_head_panel", title: title
+
+    = render 'layouts/page', sidebar: @sidebar
diff --git a/app/views/layouts/errors.html.haml b/app/views/layouts/errors.html.haml
index e51fd4cb8208e4e758d1a3776b55bdd97f922f95..aa0f3f0a8194b6c54d72685b994535adb77da745 100644
--- a/app/views/layouts/errors.html.haml
+++ b/app/views/layouts/errors.html.haml
@@ -1,6 +1,6 @@
 !!! 5
 %html{ lang: "en"}
-  = render "layouts/head", title: "Error"
+  = render "layouts/head"
   %body{class: "#{app_theme}  application"}
     = render "layouts/head_panel", title: "" if current_user
     .container.navless-container
diff --git a/app/views/layouts/explore.html.haml b/app/views/layouts/explore.html.haml
deleted file mode 100644
index ca79382324ecaf47f7f3f354a839e72647bfa25e..0000000000000000000000000000000000000000
--- a/app/views/layouts/explore.html.haml
+++ /dev/null
@@ -1,12 +0,0 @@
-- page_title = 'Explore GitLab'
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: page_title
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/broadcast"
-    - if current_user
-      = render "layouts/head_panel", title: link_to(page_title, explore_root_path)
-    - else
-      = render "layouts/public_head_panel", title: link_to(page_title, explore_root_path)
-
-    = render 'layouts/page', sidebar: 'layouts/nav/explore'
diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml
deleted file mode 100644
index f4a6bee15f68c6e6022179bb4378e7bca15a64af..0000000000000000000000000000000000000000
--- a/app/views/layouts/group.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: group_head_title
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/head_panel", title: link_to(@group.name, group_path(@group))
-    = render 'layouts/page', sidebar: 'layouts/nav/group'
diff --git a/app/views/layouts/nav/_group.html.haml b/app/views/layouts/nav/_group.html.haml
index 74a8526dbd7f10a62c7729755fb94a618936f737..62f0579d48b9fad2f2b7b06d3b192eca6f5ce460 100644
--- a/app/views/layouts/nav/_group.html.haml
+++ b/app/views/layouts/nav/_group.html.haml
@@ -39,4 +39,15 @@
           = icon ('angle-down fw')
 
   - if group_settings_page?
-    = render 'groups/settings_nav'
+    %ul.sidebar-subnav
+      = nav_link(path: 'groups#edit') do
+        = link_to edit_group_path(@group), title: 'Group', data: {placement: 'right'} do
+          = icon('pencil-square-o')
+          %span
+            Group
+      = nav_link(path: 'groups#projects') do
+        = link_to projects_group_path(@group), title: 'Projects', data: {placement: 'right'} do
+          = icon('folder')
+          %span
+            Projects
+
diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml
index 01b3d70194fcb8225dfc969bf1c718099ba549a5..172f5197b24b0d5a74dc2958689e73b4926c648c 100644
--- a/app/views/layouts/nav/_project.html.haml
+++ b/app/views/layouts/nav/_project.html.haml
@@ -1,97 +1,85 @@
 %ul.project-navigation.nav.nav-sidebar
-  - if @project_settings_nav
-    = nav_link do
-      = link_to project_path(@project), title: 'Back to project', data: {placement: 'right'} do
-        = icon('caret-square-o-left fw')
+  = nav_link(path: 'projects#show', html_options: {class: 'home'}) do
+    = link_to project_path(@project), title: 'Project', class: 'shortcuts-project', data: {placement: 'right'} do
+      = icon('dashboard fw')
+      %span
+        Project
+  - if project_nav_tab? :files
+    = nav_link(controller: %w(tree blob blame edit_tree new_tree)) do
+      = link_to namespace_project_tree_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Files',  class: 'shortcuts-tree', data: {placement: 'right'} do
+        = icon('files-o fw')
         %span
-          Back to project
+          Files
 
-    %li.separate-item
-
-    = render 'projects/settings_nav'
-
-  - else
-    = nav_link(path: 'projects#show', html_options: {class: 'home'}) do
-      = link_to project_path(@project), title: 'Project', class: 'shortcuts-project', data: {placement: 'right'} do
-        = icon('dashboard fw')
+  - if project_nav_tab? :commits
+    = nav_link(controller: %w(commit commits compare repositories tags branches)) do
+      = link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do
+        = icon('history fw')
         %span
-          Project
-    - if project_nav_tab? :files
-      = nav_link(controller: %w(tree blob blame edit_tree new_tree)) do
-        = link_to namespace_project_tree_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Files',  class: 'shortcuts-tree', data: {placement: 'right'} do
-          = icon('files-o fw')
-          %span
-            Files
-
-    - if project_nav_tab? :commits
-      = nav_link(controller: %w(commit commits compare repositories tags branches)) do
-        = link_to namespace_project_commits_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do
-          = icon('history fw')
-          %span
-            Commits
+          Commits
 
-    - if project_nav_tab? :network
-      = nav_link(controller: %w(network)) do
-        = link_to namespace_project_network_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Network', class: 'shortcuts-network', data: {placement: 'right'} do
-          = icon('code-fork fw')
-          %span
-            Network
+  - if project_nav_tab? :network
+    = nav_link(controller: %w(network)) do
+      = link_to namespace_project_network_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Network', class: 'shortcuts-network', data: {placement: 'right'} do
+        = icon('code-fork fw')
+        %span
+          Network
 
-    - if project_nav_tab? :graphs
-      = nav_link(controller: %w(graphs)) do
-        = link_to namespace_project_graph_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Graphs',  class: 'shortcuts-graphs', data: {placement: 'right'} do
-          = icon('area-chart fw')
-          %span
-            Graphs
+  - if project_nav_tab? :graphs
+    = nav_link(controller: %w(graphs)) do
+      = link_to namespace_project_graph_path(@project.namespace, @project, @ref || @repository.root_ref), title: 'Graphs',  class: 'shortcuts-graphs', data: {placement: 'right'} do
+        = icon('area-chart fw')
+        %span
+          Graphs
 
-    - if project_nav_tab? :milestones
-      = nav_link(controller: :milestones) do
-        = link_to namespace_project_milestones_path(@project.namespace, @project), title: 'Milestones', data: {placement: 'right'} do
-          = icon('clock-o fw')
-          %span
-            Milestones
+  - if project_nav_tab? :milestones
+    = nav_link(controller: :milestones) do
+      = link_to namespace_project_milestones_path(@project.namespace, @project), title: 'Milestones', data: {placement: 'right'} do
+        = icon('clock-o fw')
+        %span
+          Milestones
 
-    - if project_nav_tab? :issues
-      = nav_link(controller: :issues) do
-        = link_to url_for_project_issues(@project, only_path: true), title: 'Issues', class: 'shortcuts-issues', data: {placement: 'right'} do
-          = icon('exclamation-circle fw')
-          %span
-            Issues
-            - if @project.default_issues_tracker?
-              %span.count.issue_counter= @project.issues.opened.count
+  - if project_nav_tab? :issues
+    = nav_link(controller: :issues) do
+      = link_to url_for_project_issues(@project, only_path: true), title: 'Issues', class: 'shortcuts-issues', data: {placement: 'right'} do
+        = icon('exclamation-circle fw')
+        %span
+          Issues
+          - if @project.default_issues_tracker?
+            %span.count.issue_counter= @project.issues.opened.count
 
-    - if project_nav_tab? :merge_requests
-      = nav_link(controller: :merge_requests) do
-        = link_to namespace_project_merge_requests_path(@project.namespace, @project), title: 'Merge Requests', class: 'shortcuts-merge_requests', data: {placement: 'right'} do
-          = icon('tasks fw')
-          %span
-            Merge Requests
-            %span.count.merge_counter= @project.merge_requests.opened.count
+  - if project_nav_tab? :merge_requests
+    = nav_link(controller: :merge_requests) do
+      = link_to namespace_project_merge_requests_path(@project.namespace, @project), title: 'Merge Requests', class: 'shortcuts-merge_requests', data: {placement: 'right'} do
+        = icon('tasks fw')
+        %span
+          Merge Requests
+          %span.count.merge_counter= @project.merge_requests.opened.count
 
-    - if project_nav_tab? :labels
-      = nav_link(controller: :labels) do
-        = link_to namespace_project_labels_path(@project.namespace, @project), title: 'Labels', data: {placement: 'right'} do
-          = icon('tags fw')
-          %span
-            Labels
+  - if project_nav_tab? :labels
+    = nav_link(controller: :labels) do
+      = link_to namespace_project_labels_path(@project.namespace, @project), title: 'Labels', data: {placement: 'right'} do
+        = icon('tags fw')
+        %span
+          Labels
 
-    - if project_nav_tab? :wiki
-      = nav_link(controller: :wikis) do
-        = link_to get_project_wiki_path(@project), title: 'Wiki', class: 'shortcuts-wiki', data: {placement: 'right'} do
-          = icon('book fw')
-          %span
-            Wiki
+  - if project_nav_tab? :wiki
+    = nav_link(controller: :wikis) do
+      = link_to get_project_wiki_path(@project), title: 'Wiki', class: 'shortcuts-wiki', data: {placement: 'right'} do
+        = icon('book fw')
+        %span
+          Wiki
 
-    - if project_nav_tab? :snippets
-      = nav_link(controller: :snippets) do
-        = link_to namespace_project_snippets_path(@project.namespace, @project), title: 'Snippets', class: 'shortcuts-snippets', data: {placement: 'right'} do
-          = icon('file-text-o fw')
-          %span
-            Snippets
+  - if project_nav_tab? :snippets
+    = nav_link(controller: :snippets) do
+      = link_to namespace_project_snippets_path(@project.namespace, @project), title: 'Snippets', class: 'shortcuts-snippets', data: {placement: 'right'} do
+        = icon('file-text-o fw')
+        %span
+          Snippets
 
-    - if project_nav_tab? :settings
-      = nav_link(html_options: {class: "#{project_tab_class} separate-item"}) do
-        = link_to edit_project_path(@project), title: 'Settings', class: 'stat-tab tab no-highlight', data: {placement: 'right'} do
-          = icon('cogs fw')
-          %span
-            Settings
+  - if project_nav_tab? :settings
+    = nav_link(html_options: {class: "#{project_tab_class} separate-item"}) do
+      = link_to edit_project_path(@project), title: 'Settings', class: 'stat-tab tab no-highlight', data: {placement: 'right'} do
+        = icon('cogs fw')
+        %span
+          Settings
diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..21260302a09a2c2cf16c24322bf76f0d34b7ed73
--- /dev/null
+++ b/app/views/layouts/nav/_project_settings.html.haml
@@ -0,0 +1,41 @@
+%ul.project-navigation.nav.nav-sidebar
+  = nav_link do
+    = link_to project_path(@project), title: 'Back to project', data: {placement: 'right'} do
+      = icon('caret-square-o-left fw')
+      %span
+        Back to project
+
+  %li.separate-item
+
+  %ul.project-settings-nav.sidebar-subnav
+    = nav_link(path: 'projects#edit') do
+      = link_to edit_project_path(@project), title: 'Project', class: 'stat-tab tab', data: {placement: 'right'} do
+        = icon('pencil-square-o')
+        %span
+          Project
+    = nav_link(controller: [:project_members, :teams]) do
+      = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Members', class: 'team-tab tab', data: {placement: 'right'} do
+        = icon('users')
+        %span
+          Members
+    = nav_link(controller: :deploy_keys) do
+      = link_to namespace_project_deploy_keys_path(@project.namespace, @project), title: 'Deploy Keys', data: {placement: 'right'} do
+        = icon('key')
+        %span
+          Deploy Keys
+    = nav_link(controller: :hooks) do
+      = link_to namespace_project_hooks_path(@project.namespace, @project), title: 'Web Hooks', data: {placement: 'right'} do
+        = icon('link')
+        %span
+          Web Hooks
+    = nav_link(controller: :services) do
+      = link_to namespace_project_services_path(@project.namespace, @project), title: 'Services', data: {placement: 'right'} do
+        = icon('cogs')
+        %span
+          Services
+    = nav_link(controller: :protected_branches) do
+      = link_to namespace_project_protected_branches_path(@project.namespace, @project), title: 'Protected Branches', data: {placement: 'right'} do
+        = icon('lock')
+        %span
+          Protected branches
+
diff --git a/app/views/layouts/navless.html.haml b/app/views/layouts/navless.html.haml
deleted file mode 100644
index 10a0fcea2f80751d75041770a0d0758225c72c34..0000000000000000000000000000000000000000
--- a/app/views/layouts/navless.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: @title
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/broadcast"
-    = render "layouts/head_panel", title: defined?(@title_url) ? link_to(@title, @title_url) : @title
-    = render 'layouts/page'
diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml
deleted file mode 100644
index 2b5be7fc37202a5ea3735941d94a44a6f96c055d..0000000000000000000000000000000000000000
--- a/app/views/layouts/profile.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: "Profile"
-  %body{class: "#{app_theme}  profile", :'data-page' => body_data_page}
-    = render "layouts/head_panel", title: link_to("Profile", profile_path)
-    = render 'layouts/page', sidebar: 'layouts/nav/profile'
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..62a6f5ddf4dcc8c44ad110aef73ea72dce993c42
--- /dev/null
+++ b/app/views/layouts/project.html.haml
@@ -0,0 +1,14 @@
+- page_title @project.name_with_namespace
+!!! 5
+%html{ lang: "en"}
+  = render "layouts/head"
+  %body{class: "#{app_theme}  project", :'data-page' => body_data_page, :'data-project-id' => @project.id }
+    - title = project_title(@project)
+
+    - if current_user
+      = render "layouts/head_panel", title: project_title(@project)
+      = render "layouts/init_auto_complete"
+    - else
+      = render "layouts/public_head_panel", title: project_title(@project)
+      
+    = render 'layouts/page', sidebar: @sidebar || 'project'
diff --git a/app/views/layouts/project_settings.html.haml b/app/views/layouts/project_settings.html.haml
index 0a0039dec169e5f5d5d047685ebf29e1d7fbc8a3..d12d07273f3f45345e0a1520997b064fece9976a 100644
--- a/app/views/layouts/project_settings.html.haml
+++ b/app/views/layouts/project_settings.html.haml
@@ -1,8 +1,2 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: @project.name_with_namespace
-  %body{class: "#{app_theme}  project", :'data-page' => body_data_page, :'data-project-id' => @project.id }
-    = render "layouts/head_panel", title: project_title(@project)
-    = render "layouts/init_auto_complete"
-    - @project_settings_nav = true
-    = render 'layouts/page', sidebar: 'layouts/nav/project'
+- @sidebar = "project_settings"
+= render template: "layouts/project"
diff --git a/app/views/layouts/projects.html.haml b/app/views/layouts/projects.html.haml
deleted file mode 100644
index dde0964f47f4961035bcf2467b24438ee0602404..0000000000000000000000000000000000000000
--- a/app/views/layouts/projects.html.haml
+++ /dev/null
@@ -1,7 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: project_head_title
-  %body{class: "#{app_theme}  project", :'data-page' => body_data_page, :'data-project-id' => @project.id }
-    = render "layouts/head_panel", title: project_title(@project)
-    = render "layouts/init_auto_complete"
-    = render 'layouts/page', sidebar: 'layouts/nav/project'
diff --git a/app/views/layouts/public_group.html.haml b/app/views/layouts/public_group.html.haml
deleted file mode 100644
index b9b1d03e08ee8a05288b207fcfbad755778f6da4..0000000000000000000000000000000000000000
--- a/app/views/layouts/public_group.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: group_head_title
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/public_head_panel", title: link_to(@group.name, group_path(@group))
-    = render 'layouts/page', sidebar: 'layouts/nav/group'
diff --git a/app/views/layouts/public_projects.html.haml b/app/views/layouts/public_projects.html.haml
deleted file mode 100644
index 04fa7c84e73c75ccaf700be683062e90fa0ce75e..0000000000000000000000000000000000000000
--- a/app/views/layouts/public_projects.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: @project.name_with_namespace
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/public_head_panel", title: project_title(@project)
-    = render 'layouts/page', sidebar: 'layouts/nav/project'
diff --git a/app/views/layouts/public_users.html.haml b/app/views/layouts/public_users.html.haml
deleted file mode 100644
index 71c16bd168418d1a0771abe37c692c26f12178c5..0000000000000000000000000000000000000000
--- a/app/views/layouts/public_users.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: @title
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/public_head_panel", title: defined?(@title_url) ? link_to(@title, @title_url) : @title
-    = render 'layouts/page'
diff --git a/app/views/layouts/search.html.haml b/app/views/layouts/search.html.haml
deleted file mode 100644
index 4b526686be4058a2849798823a76ccfcbb350ada..0000000000000000000000000000000000000000
--- a/app/views/layouts/search.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: "Search"
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page}
-    = render "layouts/head_panel", title: link_to("Search", search_path)
-    = render 'layouts/page'
diff --git a/app/views/layouts/snippets.html.haml b/app/views/layouts/snippets.html.haml
deleted file mode 100644
index fbd29eb23a75d5e52f7aa3f0f19b0c9f3534395e..0000000000000000000000000000000000000000
--- a/app/views/layouts/snippets.html.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-!!! 5
-%html{ lang: "en"}
-  = render "layouts/head", title: "Dashboard"
-  %body{class: "#{app_theme}  application", :'data-page' => body_data_page }
-    = render "layouts/head_panel", title: link_to("Snippets", snippets_path)
-    = render 'layouts/page', sidebar: 'layouts/nav/snippets'
diff --git a/app/views/profiles/accounts/show.html.haml b/app/views/profiles/accounts/show.html.haml
index 5bffb4acc1d7530c08a00d699be68843c1680684..1c3a3d68aca912979630929f70584b5e2c52dc09 100644
--- a/app/views/profiles/accounts/show.html.haml
+++ b/app/views/profiles/accounts/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Account"
 - if current_user.ldap_user?
   .alert.alert-info
     Some options are unavailable for LDAP accounts
diff --git a/app/views/profiles/applications.html.haml b/app/views/profiles/applications.html.haml
index 97e98948f36647b7021e32cd3bd7e769365f75c0..c4f6f59624bc5a97f7b71346e613bbd3ea1b73b4 100644
--- a/app/views/profiles/applications.html.haml
+++ b/app/views/profiles/applications.html.haml
@@ -1,3 +1,4 @@
+- page_title "Applications"
 %h3.page-title
   Application Settings
 %p.light
diff --git a/app/views/profiles/design.html.haml b/app/views/profiles/design.html.haml
index 646576c3164ecd7db6fd3f4fe08d4f6d1540a486..af284f6040964a59b2b3153916a7159733d1cd36 100644
--- a/app/views/profiles/design.html.haml
+++ b/app/views/profiles/design.html.haml
@@ -1,3 +1,4 @@
+- page_title "Design"
 %h3.page-title
   Design Settings
 %p.light
diff --git a/app/views/profiles/emails/index.html.haml b/app/views/profiles/emails/index.html.haml
index 09f290429eacb2f97599daf3ea46e26df180fd15..c17e01425d8006e0721d9594f5f2ea58b60d74bf 100644
--- a/app/views/profiles/emails/index.html.haml
+++ b/app/views/profiles/emails/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Emails"
 %h3.page-title
   Email Settings
 %p.light
diff --git a/app/views/profiles/history.html.haml b/app/views/profiles/history.html.haml
index b1ab433f48fb90552dd70f288b7a62fd86c34e50..b414fb69f4ed3126d4800244283a8ee30bc1be3c 100644
--- a/app/views/profiles/history.html.haml
+++ b/app/views/profiles/history.html.haml
@@ -1,3 +1,4 @@
+- page_title "History"
 %h3.page-title
   Your Account History
 %p.light
diff --git a/app/views/profiles/keys/index.html.haml b/app/views/profiles/keys/index.html.haml
index 0904c50c88b99e8fffa697fa317c30786cc2b474..e3af0d4e189fe9ddc7842d776bca031ce41faacb 100644
--- a/app/views/profiles/keys/index.html.haml
+++ b/app/views/profiles/keys/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "SSH Keys"
 %h3.page-title
   SSH Keys Settings
   .pull-right
diff --git a/app/views/profiles/keys/new.html.haml b/app/views/profiles/keys/new.html.haml
index ccec716d0c66f02c9c6d86e6802251ea668a5740..2bf207a322161b7f2e2e5864a1083aee1e5a28ef 100644
--- a/app/views/profiles/keys/new.html.haml
+++ b/app/views/profiles/keys/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Add SSH Keys"
 %h3.page-title Add an SSH Key
 %p.light
   Paste your public key here. Read more about how to generate a key on #{link_to "the SSH help page", help_page_path("ssh", "README")}.
diff --git a/app/views/profiles/keys/show.html.haml b/app/views/profiles/keys/show.html.haml
index cfd53298962f50c7b1fd064a3421568ad8084e3d..89f6f01581aa106d15dc61d083fdb527e7b6cb47 100644
--- a/app/views/profiles/keys/show.html.haml
+++ b/app/views/profiles/keys/show.html.haml
@@ -1 +1,2 @@
+- page_title @key.title, "SSH Keys"
 = render "key_details"
diff --git a/app/views/profiles/notifications/show.html.haml b/app/views/profiles/notifications/show.html.haml
index 273e72f8a4dfc26bf133cbc98afeee4c4107b6a0..a74d97dac3bb08bbf21db2505ed07e19724634c8 100644
--- a/app/views/profiles/notifications/show.html.haml
+++ b/app/views/profiles/notifications/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Notifications"
 %h3.page-title
   Notifications Settings
 %p.light
diff --git a/app/views/profiles/passwords/edit.html.haml b/app/views/profiles/passwords/edit.html.haml
index 4b04b113e89bd35066320a600811ad8a679210c3..21dabbdfe2cfc4e5318cf46f6bfa52c0a6552f13 100644
--- a/app/views/profiles/passwords/edit.html.haml
+++ b/app/views/profiles/passwords/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Password"
 %h3.page-title Password Settings
 %p.light
   - if @user.password_automatically_set?
diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml
index 6c745e69e4061fe83bd5a5393dc7bfc2ee57b93e..29c30905117df0b7e1ef163265b06af04df8b1fb 100644
--- a/app/views/profiles/show.html.haml
+++ b/app/views/profiles/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Settings"
 %h3.page-title
   Profile Settings
 %p.light
diff --git a/app/views/projects/_settings_nav.html.haml b/app/views/projects/_settings_nav.html.haml
deleted file mode 100644
index f8b74809b76bdae7c42949fc4b4957ad5ebf41ab..0000000000000000000000000000000000000000
--- a/app/views/projects/_settings_nav.html.haml
+++ /dev/null
@@ -1,31 +0,0 @@
-%ul.project-settings-nav.sidebar-subnav
-  = nav_link(path: 'projects#edit') do
-    = link_to edit_project_path(@project), title: 'Project', class: 'stat-tab tab', data: {placement: 'right'} do
-      = icon('pencil-square-o')
-      %span
-        Project
-  = nav_link(controller: [:project_members, :teams]) do
-    = link_to namespace_project_project_members_path(@project.namespace, @project), title: 'Members', class: 'team-tab tab', data: {placement: 'right'} do
-      = icon('users')
-      %span
-        Members
-  = nav_link(controller: :deploy_keys) do
-    = link_to namespace_project_deploy_keys_path(@project.namespace, @project), title: 'Deploy Keys', data: {placement: 'right'} do
-      = icon('key')
-      %span
-        Deploy Keys
-  = nav_link(controller: :hooks) do
-    = link_to namespace_project_hooks_path(@project.namespace, @project), title: 'Web Hooks', data: {placement: 'right'} do
-      = icon('link')
-      %span
-        Web Hooks
-  = nav_link(controller: :services) do
-    = link_to namespace_project_services_path(@project.namespace, @project), title: 'Services', data: {placement: 'right'} do
-      = icon('cogs')
-      %span
-        Services
-  = nav_link(controller: :protected_branches) do
-    = link_to namespace_project_protected_branches_path(@project.namespace, @project), title: 'Protected Branches', data: {placement: 'right'} do
-      = icon('lock')
-      %span
-        Protected branches
diff --git a/app/views/projects/blame/show.html.haml b/app/views/projects/blame/show.html.haml
index 89dd68d647185a0da034e66b57b89f5d389a0168..462f5b7afb09a8d608cbad67f86fbef8a6625118 100644
--- a/app/views/projects/blame/show.html.haml
+++ b/app/views/projects/blame/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Blame", @blob.path, @ref
 %h3.page-title Blame view
 
 #tree-holder.tree-holder
diff --git a/app/views/projects/blob/edit.html.haml b/app/views/projects/blob/edit.html.haml
index 1f61a0b940c84b940e1517111b65e67180c8d889..e78181f880128de7c67700df7efd2674c0c75970 100644
--- a/app/views/projects/blob/edit.html.haml
+++ b/app/views/projects/blob/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @blob.path, @ref
 .file-editor
   %ul.nav.nav-tabs.js-edit-mode
     %li.active
diff --git a/app/views/projects/blob/new.html.haml b/app/views/projects/blob/new.html.haml
index d78a01f6422ceed88b7dbdd057a297499adb1ff4..eb0d99d01521c4a2628089e749392a71c1bdafc2 100644
--- a/app/views/projects/blob/new.html.haml
+++ b/app/views/projects/blob/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New file", @ref
 %h3.page-title New file
 .file-editor
   = form_tag(namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post, class: 'form-horizontal form-new-file') do
diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml
index 69167654c39d9fac445e6c80245c154fd1baa86f..a1d464bac59fcfb2d2bf40708f5ba65e3a52e874 100644
--- a/app/views/projects/blob/show.html.haml
+++ b/app/views/projects/blob/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @blob.path, @ref
 %div.tree-ref-holder
   = render 'shared/ref_switcher', destination: 'blob', path: @path
 
diff --git a/app/views/projects/branches/index.html.haml b/app/views/projects/branches/index.html.haml
index a313ffcf27294a07dc1e6024d5c2ac2077d4f6f6..80acc9379083037cf997b181b9e1235dc4fd9048 100644
--- a/app/views/projects/branches/index.html.haml
+++ b/app/views/projects/branches/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Branches"
 = render "projects/commits/head"
 %h3.page-title
   Branches
diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml
index e5fcb98c68cb00d8f561619a77cfea206579c100..7ca0b78a0be0d98e618dd10f0986eac23b061f97 100644
--- a/app/views/projects/branches/new.html.haml
+++ b/app/views/projects/branches/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New branch"
 - if @error
   .alert.alert-danger
     %button{ type: "button", class: "close", "data-dismiss" => "alert"} &times;
diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml
index fc721067ed4d870da8deec7ea2466d67c089804e..fcf75bb3ceb259ca4e36baf1f9e03fa8266cb912 100644
--- a/app/views/projects/commit/show.html.haml
+++ b/app/views/projects/commit/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @commit.id, "Commits"
 = render "commit_box"
 = render "projects/diffs/diffs", diffs: @diffs, project: @project
 = render "projects/notes/notes_with_form"
diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml
index fb1012deb74a69c0d5bc1c4084a29e921af5fa78..c8531b090a6257aaa57795f3a9af0422aa25a7d5 100644
--- a/app/views/projects/commits/show.html.haml
+++ b/app/views/projects/commits/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Commits", @ref
 = content_for :meta_tags do
   - if current_user
     = auto_discovery_link_tag(:atom, namespace_project_commits_url(@project.namespace, @project, @ref, format: :atom, private_token: current_user.private_token), title: "#{@project.name}:#{@ref} commits")
diff --git a/app/views/projects/compare/index.html.haml b/app/views/projects/compare/index.html.haml
index 4745bfbeaaf061e5a1f896ed2864f0ac76b2be73..d1e579a2edeb82d2847c21c1e4bdfcddc4b81ad3 100644
--- a/app/views/projects/compare/index.html.haml
+++ b/app/views/projects/compare/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Compare"
 = render "projects/commits/head"
 
 %h3.page-title
diff --git a/app/views/projects/compare/show.html.haml b/app/views/projects/compare/show.html.haml
index 214b5bd337b5cb007189d1c4434f735609ad1cb6..3670dd5c13b81e8aa36b683de3dbe1bcb41bdee9 100644
--- a/app/views/projects/compare/show.html.haml
+++ b/app/views/projects/compare/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "#{params[:from]}...#{params[:to]}"
 = render "projects/commits/head"
 
 %h3.page-title
diff --git a/app/views/projects/deploy_keys/index.html.haml b/app/views/projects/deploy_keys/index.html.haml
index 472a13a85242018cecb712a20c692fd00b23125c..2e9c5dc08c8f06d307aa8a18a3e0f6343b4f4026 100644
--- a/app/views/projects/deploy_keys/index.html.haml
+++ b/app/views/projects/deploy_keys/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Deploy Keys"
 %h3.page-title
   Deploy keys allow read-only access to the repository
 
diff --git a/app/views/projects/deploy_keys/new.html.haml b/app/views/projects/deploy_keys/new.html.haml
index 186d6b58972f256ea8719302eb4f109e8a3748ca..01c810aee180b24f580f78f1833b4606590e9e1b 100644
--- a/app/views/projects/deploy_keys/new.html.haml
+++ b/app/views/projects/deploy_keys/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New Deploy Key"
 %h3.page-title New Deploy key
 %hr
 
diff --git a/app/views/projects/deploy_keys/show.html.haml b/app/views/projects/deploy_keys/show.html.haml
index 405b5bcd0d3a81e8a6f7da5c10866bafd4408b6f..7d44652af725ecd99aff497894de55e9bf43a7d6 100644
--- a/app/views/projects/deploy_keys/show.html.haml
+++ b/app/views/projects/deploy_keys/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @key.title, "Deploy Keys"
 %h3.page-title
   Deploy key:
   = @key.title
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index c09d794ef7f48619e55d97bb636acfc38d9dad15..1fe6a24e89f941e8582d4afc66d082cc4f154547 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Settings"
 .project-edit-container
   .project-edit-errors
   .project-edit-content
diff --git a/app/views/projects/forks/error.html.haml b/app/views/projects/forks/error.html.haml
index 8eb4f795971939d0d5717b5e489e83593ea41a84..3d0ab5b85d674c95ae1f45695bb4ab72681808de 100644
--- a/app/views/projects/forks/error.html.haml
+++ b/app/views/projects/forks/error.html.haml
@@ -1,3 +1,4 @@
+- page_title "Fork project"
 - if @forked_project && !@forked_project.saved?
   .alert.alert-danger.alert-block
     %h4
diff --git a/app/views/projects/forks/new.html.haml b/app/views/projects/forks/new.html.haml
index 5a6c46f320885bd11a5d489780f52cc702450756..b7a2ed68e256c2675971cdd52a44c986fa48bb92 100644
--- a/app/views/projects/forks/new.html.haml
+++ b/app/views/projects/forks/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Fork project"
 %h3.page-title Fork project
 %p.lead
   Click to fork the project to a user or group
diff --git a/app/views/projects/graphs/commits.html.haml b/app/views/projects/graphs/commits.html.haml
index 78b4c1923dd4669f09be01b43727a22ef01c8e69..254a76e108baecbf4cd96093d4bfc05515c579fa 100644
--- a/app/views/projects/graphs/commits.html.haml
+++ b/app/views/projects/graphs/commits.html.haml
@@ -1,3 +1,4 @@
+- page_title "Commit statistics"
 = render 'head'
 
 %p.lead
diff --git a/app/views/projects/graphs/show.html.haml b/app/views/projects/graphs/show.html.haml
index e3d5094ddc5fb6bf41774a02741bfdf80de69f14..3a8dc89f84cc3c25b8dbf90f2eeeaf33a645a416 100644
--- a/app/views/projects/graphs/show.html.haml
+++ b/app/views/projects/graphs/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Contributor statistics"
 = render 'head'
 .loading-graph
   .center
diff --git a/app/views/projects/hooks/index.html.haml b/app/views/projects/hooks/index.html.haml
index bbaddba31b9ee4bc0a2094317fa4cf8bf701e24e..808c03148f41ceb51c43949bf7cfd83c6f0fbc60 100644
--- a/app/views/projects/hooks/index.html.haml
+++ b/app/views/projects/hooks/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Web Hooks"
 %h3.page-title
   Web hooks
 
diff --git a/app/views/projects/imports/new.html.haml b/app/views/projects/imports/new.html.haml
index 934b6b8c017212afeb9664e0c5d7ea931463ba1b..f8f2e192e291f20a8960862def746e375953f2c4 100644
--- a/app/views/projects/imports/new.html.haml
+++ b/app/views/projects/imports/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "Import repository"
 %h3.page-title
   - if @project.import_failed?
     Import failed. Retry?
diff --git a/app/views/projects/imports/show.html.haml b/app/views/projects/imports/show.html.haml
index 2d1fdafed24d31497feb9ac9dede513d38c9fbdf..39fe0fc1c4f754e2225f590d0503134bda0203ab 100644
--- a/app/views/projects/imports/show.html.haml
+++ b/app/views/projects/imports/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Import in progress"
 .save-project-loader
   .center
     %h2
diff --git a/app/views/projects/issues/edit.html.haml b/app/views/projects/issues/edit.html.haml
index b1bc3ba0eba684a146b503fa89225bda4614e840..53b6f0879c9c568b87be742dd59e869714ec285c 100644
--- a/app/views/projects/issues/edit.html.haml
+++ b/app/views/projects/issues/edit.html.haml
@@ -1 +1,2 @@
+- page_title "Edit", "#{@issue.title} (##{@issue.iid})", "Issues"
 = render "form"
diff --git a/app/views/projects/issues/index.html.haml b/app/views/projects/issues/index.html.haml
index c2522816f3b1f808dbb02338a2767b6507b9bca9..709ea1f789739e114d07a036ff9166502d865e3a 100644
--- a/app/views/projects/issues/index.html.haml
+++ b/app/views/projects/issues/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Issues"
 = content_for :meta_tags do
   - if current_user
     = auto_discovery_link_tag(:atom, namespace_project_issues_url(@project.namespace, @project, :atom, private_token: current_user.private_token), title: "#{@project.name} issues")
diff --git a/app/views/projects/issues/new.html.haml b/app/views/projects/issues/new.html.haml
index b1bc3ba0eba684a146b503fa89225bda4614e840..96e43855628d60be5247aced04a1f86ec5090719 100644
--- a/app/views/projects/issues/new.html.haml
+++ b/app/views/projects/issues/new.html.haml
@@ -1 +1,2 @@
+- page_title "New issue"
 = render "form"
diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml
index bd28d8a1db29a82f6f1cde6a54d7300a21606ebc..81478dfe568093268409b54d3e5d15d8ab589526 100644
--- a/app/views/projects/issues/show.html.haml
+++ b/app/views/projects/issues/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "#{@issue.title} (##{@issue.iid})", "Issues"
 .issue
   .issue-details
     %h4.page-title
diff --git a/app/views/projects/labels/edit.html.haml b/app/views/projects/labels/edit.html.haml
index e003d1dfe7f586ffffed167502e51f428ddbb9be..645402667fd8f80613e5333fe2f63ef64a9afd3a 100644
--- a/app/views/projects/labels/edit.html.haml
+++ b/app/views/projects/labels/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @label.name, "Labels"
 %h3
   Edit label
   %span.light #{@label.name}
diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml
index 0700e72d39c8e659a4195a009552d6e0383c28df..7d19415a7f4c55122a63211f00db8beae6ebc3a8 100644
--- a/app/views/projects/labels/index.html.haml
+++ b/app/views/projects/labels/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Labels"
 - if can? current_user, :admin_label, @project
   = link_to new_namespace_project_label_path(@project.namespace, @project), class: "pull-right btn btn-new" do
     New label
diff --git a/app/views/projects/labels/new.html.haml b/app/views/projects/labels/new.html.haml
index 0683ed5d4fbcf6ae9f5b0cfb3e783cc7c6084654..7cacbd0f30206abe831c44e3c6b5b600f4faafc6 100644
--- a/app/views/projects/labels/new.html.haml
+++ b/app/views/projects/labels/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New label"
 %h3 New label
 .back-link
   = link_to namespace_project_labels_path(@project.namespace, @project) do
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index 45dd410dd152cbef588dcdbac51ef862cd8a3086..c2f5cdacae74d4ecc33f98c85b9b0f2a530cede1 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -1,3 +1,4 @@
+- page_title "#{@merge_request.title} (##{@merge_request.iid})", "Merge Requests"
 .merge-request{'data-url' => merge_request_path(@merge_request)}
   .merge-request-details
     = render "projects/merge_requests/show/mr_title"
diff --git a/app/views/projects/merge_requests/edit.html.haml b/app/views/projects/merge_requests/edit.html.haml
index 839c63986ab36a155125e67a5739f0702dd8ef6e..7e5cb07f249543eda2a5b6ce49048e01841a1039 100644
--- a/app/views/projects/merge_requests/edit.html.haml
+++ b/app/views/projects/merge_requests/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", "#{@merge_request.title} (##{@merge_request.iid})", "Merge Requests"
 %h3.page-title
   = "Edit merge request ##{@merge_request.iid}"
 %hr
diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml
index d7992bdd19ea8a0412d94cebcaa28598514c83ff..ab845a7e719bf3d9a418ee555dd822fcc9def6a1 100644
--- a/app/views/projects/merge_requests/index.html.haml
+++ b/app/views/projects/merge_requests/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Merge Requests"
 .append-bottom-10
   .pull-right
     = render 'shared/issuable_search_form', path: namespace_project_merge_requests_path(@project.namespace, @project)
diff --git a/app/views/projects/merge_requests/invalid.html.haml b/app/views/projects/merge_requests/invalid.html.haml
index b9c466657de4f01fe66edf0f9f530e8664dfc9db..15bd4e2fafd1cdfd188ca278cf9c00fa455cec77 100644
--- a/app/views/projects/merge_requests/invalid.html.haml
+++ b/app/views/projects/merge_requests/invalid.html.haml
@@ -1,3 +1,4 @@
+- page_title "#{@merge_request.title} (##{@merge_request.iid})", "Merge Requests"
 .merge-request
   = render "projects/merge_requests/show/mr_title"
   = render "projects/merge_requests/show/mr_box"
diff --git a/app/views/projects/merge_requests/new.html.haml b/app/views/projects/merge_requests/new.html.haml
index 4756903d0e00465a47b0bcdd5cfa93cd0a4414c9..b1c7bea7de4bce2d76a3252b475825649156b810 100644
--- a/app/views/projects/merge_requests/new.html.haml
+++ b/app/views/projects/merge_requests/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New merge request"
 - if @merge_request.can_be_created
   = render 'new_submit'
 - else
diff --git a/app/views/projects/milestones/edit.html.haml b/app/views/projects/milestones/edit.html.haml
index b1bc3ba0eba684a146b503fa89225bda4614e840..c09815a212a35ff914f6265d4ac1df054b52cffa 100644
--- a/app/views/projects/milestones/edit.html.haml
+++ b/app/views/projects/milestones/edit.html.haml
@@ -1 +1,2 @@
+- page_title "Edit", @milestone.title, "Milestones"
 = render "form"
diff --git a/app/views/projects/milestones/index.html.haml b/app/views/projects/milestones/index.html.haml
index d3eab8d6d7509d19cb1bba0bda2959999fc5974c..995eecd783014f9927e8571ff1be7c0179ed09e0 100644
--- a/app/views/projects/milestones/index.html.haml
+++ b/app/views/projects/milestones/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Milestones"
 .pull-right
   - if can? current_user, :admin_milestone, @project
     = link_to new_namespace_project_milestone_path(@project.namespace, @project), class: "pull-right btn btn-new", title: "New Milestone" do
diff --git a/app/views/projects/milestones/new.html.haml b/app/views/projects/milestones/new.html.haml
index b1bc3ba0eba684a146b503fa89225bda4614e840..d76e417b3c5d644b727db5af6afd668f56cd5b9f 100644
--- a/app/views/projects/milestones/new.html.haml
+++ b/app/views/projects/milestones/new.html.haml
@@ -1 +1,2 @@
+- page_title "New milestone"
 = render "form"
diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml
index 25cc00309658282dd2b31ce9c5942676f76fdd60..bba2b8764acf19a9aff0569ce9efc41ba1411743 100644
--- a/app/views/projects/milestones/show.html.haml
+++ b/app/views/projects/milestones/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @milestone.title, "Milestones"
 %h4.page-title
   .issue-box{ class: issue_box_class(@milestone) }
     - if @milestone.closed?
diff --git a/app/views/projects/network/show.html.haml b/app/views/projects/network/show.html.haml
index c36bad1e94b6096af8c2e0b0b056aec3e330a6d2..4d3f118f2d9497b9b17694d1378654546c64988b 100644
--- a/app/views/projects/network/show.html.haml
+++ b/app/views/projects/network/show.html.haml
@@ -1,3 +1,4 @@
+- page_title "Network"
 = render "head"
 .project-network
   .controls
diff --git a/app/views/projects/project_members/import.html.haml b/app/views/projects/project_members/import.html.haml
index 293754cd0c0fa180a5f80dec6fdb78738d88306a..6914543f6dad300463d906d86e7a11b3b661f4b6 100644
--- a/app/views/projects/project_members/import.html.haml
+++ b/app/views/projects/project_members/import.html.haml
@@ -1,3 +1,4 @@
+- page_title "Import members"
 %h3.page-title
   Import members from another project
 %p.light
diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml
index 36a6f6a15547d9d05737d5ff08f475a198531dae..6edb92acd4d5eb983733b23117bc5ac274c78c26 100644
--- a/app/views/projects/project_members/index.html.haml
+++ b/app/views/projects/project_members/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Members"
 %h3.page-title
   Users with access to this project
 
diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml
index a3464c0e5e183d623abb99c5372b588349c9aee3..52b3a50c1e61f41913f11fc15d0f44be6a5d28b9 100644
--- a/app/views/projects/protected_branches/index.html.haml
+++ b/app/views/projects/protected_branches/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Protected branches"
 %h3.page-title Protected branches
 %p.light Keep stable branches secure and force developers to use Merge Requests
 %hr
diff --git a/app/views/projects/services/edit.html.haml b/app/views/projects/services/edit.html.haml
index bcc5832792fea10b70d29a9fb15633f06e001dd0..50ed78286d2d6cd2c466c79964d36f8ce1afc661 100644
--- a/app/views/projects/services/edit.html.haml
+++ b/app/views/projects/services/edit.html.haml
@@ -1 +1,2 @@
+- page_title @service.title, "Services"
 = render 'form'
diff --git a/app/views/projects/services/index.html.haml b/app/views/projects/services/index.html.haml
index 0d3ccb6bb839e7306e5b9409fee7e309d11eea3e..1065def693bbbecf3a8846b054a6735f9cda7d9a 100644
--- a/app/views/projects/services/index.html.haml
+++ b/app/views/projects/services/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Services"
 %h3.page-title Project services
 %p.light Project services allow you to integrate GitLab with other applications
 
diff --git a/app/views/projects/snippets/edit.html.haml b/app/views/projects/snippets/edit.html.haml
index 7baddebde455944aebc557848ab5f25409b2ef87..945f0084dff1da7d823a00ffe6e17e4e08d34189 100644
--- a/app/views/projects/snippets/edit.html.haml
+++ b/app/views/projects/snippets/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @snippet.title, "Snippets"
 %h3.page-title
   Edit snippet
 %hr
diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml
index e2d8ec673a17fe3f2e6ced456fbf3d9b5da3ba22..da9401bd8c1625a3308629ddd4afbd9251dcf3fd 100644
--- a/app/views/projects/snippets/index.html.haml
+++ b/app/views/projects/snippets/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Snippets"
 %h3.page-title
   Snippets
   - if can? current_user, :write_project_snippet, @project
diff --git a/app/views/projects/snippets/new.html.haml b/app/views/projects/snippets/new.html.haml
index 5efe662665ee72824a0ef2e9d8904161491cfe51..2d9beef1cbc675edc62a48885ae26d2bf82039c1 100644
--- a/app/views/projects/snippets/new.html.haml
+++ b/app/views/projects/snippets/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New snippets"
 %h3.page-title
   New snippet
 %hr
diff --git a/app/views/projects/snippets/show.html.haml b/app/views/projects/snippets/show.html.haml
index d19689a1056213a16988e15c975c09e4c2e4d888..5725d804df3f7a18b57d10bb176c1a6904ed7b37 100644
--- a/app/views/projects/snippets/show.html.haml
+++ b/app/views/projects/snippets/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @snippet.title, "Snippets"
 %h3.page-title
   = @snippet.title
 
diff --git a/app/views/projects/tags/index.html.haml b/app/views/projects/tags/index.html.haml
index f1bc2bc9a2b23aa8cfc5526a610b7b4c59bb0c6f..d4652a47cbae1f5ab0b2357afe362e9132c45402 100644
--- a/app/views/projects/tags/index.html.haml
+++ b/app/views/projects/tags/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Tags"
 = render "projects/commits/head"
 
 %h3.page-title
diff --git a/app/views/projects/tags/new.html.haml b/app/views/projects/tags/new.html.haml
index 655044438d50a412085d3e9e2ee351fefebb8ccb..61c35e4a5e2a3aa7ef74a32b77dd97a8fc283d15 100644
--- a/app/views/projects/tags/new.html.haml
+++ b/app/views/projects/tags/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New tag"
 - if @error
   .alert.alert-danger
     %button{ type: "button", class: "close", "data-dismiss" => "alert"} &times;
diff --git a/app/views/projects/tree/show.html.haml b/app/views/projects/tree/show.html.haml
index a8a580944e1d7c0fea60a60f3413141463c107e6..d0a3f522e283f38f83058ea89f391d7f656a6cd8 100644
--- a/app/views/projects/tree/show.html.haml
+++ b/app/views/projects/tree/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @path.presence, @ref
 = content_for :meta_tags do
   - if current_user
     = auto_discovery_link_tag(:atom, namespace_project_commits_url(@project.namespace, @project, @ref, format: :atom, private_token: current_user.private_token), title: "#{@project.name}:#{@ref} commits")
diff --git a/app/views/projects/wikis/edit.html.haml b/app/views/projects/wikis/edit.html.haml
index 566850cb78d3487b10593cc71ae2aa8e41c3d203..3f1dce1050c1d46975f0e1a402bef6b0b7e328d8 100644
--- a/app/views/projects/wikis/edit.html.haml
+++ b/app/views/projects/wikis/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @page.title, "Wiki"
 = render 'nav'
 .pull-right
   = render 'main_links'
diff --git a/app/views/projects/wikis/empty.html.haml b/app/views/projects/wikis/empty.html.haml
index 48058124f97fc28154ae2f46ea4b6fdb4a258c8e..ead99412406d6fda74ea213cb9867d5463779b0d 100644
--- a/app/views/projects/wikis/empty.html.haml
+++ b/app/views/projects/wikis/empty.html.haml
@@ -1,3 +1,4 @@
+- page_title "Wiki"
 %h3.page-title Empty page
 %hr
 .error_message
diff --git a/app/views/projects/wikis/git_access.html.haml b/app/views/projects/wikis/git_access.html.haml
index 365edb524f43b97124a5f948001958f09a306809..b47dffe00b3ffdd36af5ef9bbb66b8de238ff619 100644
--- a/app/views/projects/wikis/git_access.html.haml
+++ b/app/views/projects/wikis/git_access.html.haml
@@ -1,3 +1,4 @@
+- page_title "Git access", "Wiki"
 = render 'nav'
 .row
   .col-sm-6
diff --git a/app/views/projects/wikis/history.html.haml b/app/views/projects/wikis/history.html.haml
index 91291f753f772e66b579fa0c97cecfcfb8a69aab..673ec2d20e5d415fea7d0f53f139fc322f74a40c 100644
--- a/app/views/projects/wikis/history.html.haml
+++ b/app/views/projects/wikis/history.html.haml
@@ -1,3 +1,4 @@
+- page_title "History", @page.title, "Wiki"
 = render 'nav'
 %h3.page-title
   %span.light History for
diff --git a/app/views/projects/wikis/pages.html.haml b/app/views/projects/wikis/pages.html.haml
index ee233d9086f99d02406169cf9881d7dec7cd40ba..890ff1aed738c64d044b6177591c2175d38914cb 100644
--- a/app/views/projects/wikis/pages.html.haml
+++ b/app/views/projects/wikis/pages.html.haml
@@ -1,3 +1,4 @@
+- page_title "All Pages", "Wiki"
 = render 'nav'
 %h3.page-title
   All Pages
diff --git a/app/views/projects/wikis/show.html.haml b/app/views/projects/wikis/show.html.haml
index a6263e93f678e515a11429df7755a25772b0af66..83cd4c66672ddb62b268db19224e201da8b638ea 100644
--- a/app/views/projects/wikis/show.html.haml
+++ b/app/views/projects/wikis/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @page.title, "Wiki"
 = render 'nav'
 %h3.page-title
   = @page.title
diff --git a/app/views/search/show.html.haml b/app/views/search/show.html.haml
index e9f2711be2a8df93d7aebafabe838e2a60586e91..60f9e9ac9de07b3a20ab866f96f83d9066fe097c 100644
--- a/app/views/search/show.html.haml
+++ b/app/views/search/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @search_term
 = render 'search/form'
 %hr
 - if @search_term
diff --git a/app/views/snippets/current_user_index.html.haml b/app/views/snippets/current_user_index.html.haml
index 6bb2237a759c5eedbbf1c7d5e423cfc046ee8508..0718f743828651fea87fe43f0b6ba40d526c4447 100644
--- a/app/views/snippets/current_user_index.html.haml
+++ b/app/views/snippets/current_user_index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Your Snippets"
 %h3.page-title
   Your Snippets
   .pull-right
diff --git a/app/views/snippets/edit.html.haml b/app/views/snippets/edit.html.haml
index 30aa174edfb3329b039c4da52dabf4982ba9e4c9..1a380035661d4a24ca894e70734c13b8f8f7d096 100644
--- a/app/views/snippets/edit.html.haml
+++ b/app/views/snippets/edit.html.haml
@@ -1,3 +1,4 @@
+- page_title "Edit", @snippet.title, "Snippets"
 %h3.page-title
   Edit snippet
 %hr
diff --git a/app/views/snippets/index.html.haml b/app/views/snippets/index.html.haml
index 108dd0cca3ef5811d4e3ea66e982789b98f7cd7c..e9bb6a908d3db508c55534dc617c3743d7afde30 100644
--- a/app/views/snippets/index.html.haml
+++ b/app/views/snippets/index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Public Snippets"
 %h3.page-title
   Public snippets
 
diff --git a/app/views/snippets/new.html.haml b/app/views/snippets/new.html.haml
index 77cfd9af335ab8afde5915e4ecc64a130d547e35..2c92041351948586725020bd568d60156ae573e3 100644
--- a/app/views/snippets/new.html.haml
+++ b/app/views/snippets/new.html.haml
@@ -1,3 +1,4 @@
+- page_title "New snippet"
 %h3.page-title
   New snippet
 %hr
diff --git a/app/views/snippets/show.html.haml b/app/views/snippets/show.html.haml
index 5204fb9a90702aca1d752f00e5567ca60c94a7f9..903f51ff6c32e2e5c13860eb14876507f219c30f 100644
--- a/app/views/snippets/show.html.haml
+++ b/app/views/snippets/show.html.haml
@@ -1,3 +1,4 @@
+- page_title @snippet.title, "Snippet"
 %h3.page-title
   = @snippet.title
 
diff --git a/app/views/snippets/user_index.html.haml b/app/views/snippets/user_index.html.haml
index df524cd18b0cb46b01612a3c6976605dccc336ba..23700eb39dafc6910859ddefac764f4734edd733 100644
--- a/app/views/snippets/user_index.html.haml
+++ b/app/views/snippets/user_index.html.haml
@@ -1,3 +1,4 @@
+- page_title "Snippets", @user.name
 %h3.page-title
   = image_tag avatar_icon(@user.email), class: "avatar s24"
   = @user.name