diff --git a/app/helpers/gitlab_routing_helper.rb b/app/helpers/gitlab_routing_helper.rb
index d0fae255a043d0fff3b316d025d59860803bb635..e0816f4e714a8f8a4ed2ef0938d6697d62941426 100644
--- a/app/helpers/gitlab_routing_helper.rb
+++ b/app/helpers/gitlab_routing_helper.rb
@@ -17,6 +17,14 @@ module GitlabRoutingHelper
     namespace_project_path(project.namespace, project, *args)
   end
 
+  def project_files_path(project, *args)
+    namespace_project_tree_path(project.namespace, project, @ref || project.repository.root_ref)
+  end
+
+  def project_commits_path(project, *args)
+    namespace_project_commits_path(project.namespace, project, @ref || project.repository.root_ref)
+  end
+
   def activity_project_path(project, *args)
     activity_namespace_project_path(project.namespace, project, *args)
   end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index ab9b068de05860405bf16165bb544eb1bddfd98b..268c563700c5a62c56716e86012a6c8692c6369c 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -43,24 +43,22 @@ module ProjectsHelper
     end
   end
 
-  def project_title(project)
-    if project.group
-      content_tag :span do
-        link_to(
-          simple_sanitize(project.group.name), group_path(project.group)
-        ) + ' / ' +
-          link_to(simple_sanitize(project.name),
-                  project_path(project))
-      end
-    else
-      owner = project.namespace.owner
-      content_tag :span do
-        link_to(
-          simple_sanitize(owner.name), user_path(owner)
-        ) + ' / ' +
-          link_to(simple_sanitize(project.name),
-                  project_path(project))
+  def project_title(project, name = nil, url = nil)
+    namespace_link =
+      if project.group
+        link_to(simple_sanitize(project.group.name), group_path(project.group))
+      else
+        owner = project.namespace.owner
+        link_to(simple_sanitize(owner.name), user_path(owner))
       end
+
+    project_link = link_to(simple_sanitize(project.name), project_path(project))
+
+    full_title = namespace_link + ' / ' + project_link
+    full_title += ' · '.html_safe + link_to(simple_sanitize(name), url) if name
+
+    content_tag :span do
+      full_title
     end
   end
 
@@ -315,6 +313,43 @@ module ProjectsHelper
     end
   end
 
+  def detect_project_title(project)
+    current_ref = @ref || project.repository.root_ref
+
+    name, url =
+      if current_controller? 'wikis'
+        ['Wiki', get_project_wiki_path(project)]
+      elsif current_controller? 'project_members'
+        ['Members', namespace_project_project_members_path(project.namespace, project)]
+      elsif current_controller? 'labels'
+        ['Labels', namespace_project_labels_path(project.namespace, project)]
+      elsif current_controller? 'members'
+        ['Members', project_files_path(project)]
+      elsif current_controller? 'commits'
+        ['Commits', project_commits_path(project)]
+      elsif current_controller? 'graphs'
+        ['Graphs', namespace_project_graph_path(project.namespace, project, current_ref)]
+      elsif current_controller? 'network'
+        ['Network', namespace_project_network_path(project.namespace, project, current_ref)]
+      elsif current_controller? 'milestones'
+        ['Milestones', namespace_project_milestones_path(project.namespace, project)]
+      elsif current_controller? 'snippets'
+        ['Snippets', namespace_project_snippets_path(project.namespace, project)]
+      elsif current_controller? 'issues'
+        ['Issues', namespace_project_issues_path(project.namespace, project)]
+      elsif current_controller? 'merge_requests'
+        ['Merge Requests', namespace_project_merge_requests_path(project.namespace, project)]
+      elsif current_controller? 'tree', 'blob'
+        ['Files', project_files_path(project)]
+      elsif current_path? 'projects#activity'
+        ['Activity', activity_project_path(project)]
+      else
+        [nil, nil]
+      end
+
+    project_title(project, name, url)
+  end
+
   private
 
   def filename_path(project, filename)
diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml
index ac7d9ba0f4fd0d141d8efbd6d78d3c7a34707a37..ae8fc9f85f001b9847e0c367cf08be95c9c6f83b 100644
--- a/app/views/groups/edit.html.haml
+++ b/app/views/groups/edit.html.haml
@@ -1,4 +1,6 @@
+- header_title group_title(@group, "Settings", edit_group_path(@group))
 - @blank_container = true
+
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/groups/projects.html.haml b/app/views/groups/projects.html.haml
index d06cfa7ff9fad3dd93c5e66b497266ad7ecb14a8..f1d507a50c7409b9ef42045d15b03a1a8c14376c 100644
--- a/app/views/groups/projects.html.haml
+++ b/app/views/groups/projects.html.haml
@@ -1,4 +1,6 @@
 - page_title "Projects"
+- header_title group_title(@group, "Projects", projects_group_path(@group))
+
 .panel.panel-default
   .panel-heading
     %strong= @group.name
diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml
index 1d22a7442e3f145f4d457a5f59d10dd5f54e36b2..2159d931da22b00551184e84db8550497770609f 100644
--- a/app/views/layouts/nav/_project.html.haml
+++ b/app/views/layouts/nav/_project.html.haml
@@ -26,14 +26,14 @@
         Activity
   - 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
+      = link_to project_files_path(@project), 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
+      = link_to project_commits_path(@project), title: 'Commits', class: 'shortcuts-commits', data: {placement: 'right'} do
         = icon('history fw')
         %span
           Commits
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index 44afa33dfe590df42885cb63d894b7a88ee3f67a..5c4dd67f0ec8265f57ffb8eb21856c8fdc3f270e 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -1,5 +1,5 @@
 - page_title    @project.name_with_namespace
-- header_title  project_title(@project)
+- header_title  detect_project_title(@project)
 - sidebar       "project" unless sidebar
 
 - content_for :scripts_body_top do