diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index d7513d75f014491e537789b28df6fb385ae02090..b03a37d81481a450a1f39f6b80385cdd8e91818a 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -1,5 +1,5 @@
 class Projects::BuildsController < Projects::ApplicationController
-  before_action :build, except: [:index, :cancel_all]
+  before_action :build, except: [:index, :cancel_all, :settings]
   before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry]
   before_action :authorize_update_build!, except: [:index, :show, :status, :raw]
   layout 'project'
@@ -27,6 +27,11 @@ class Projects::BuildsController < Projects::ApplicationController
     redirect_to namespace_project_builds_path(project.namespace, project)
   end
 
+  def settings
+    @ref = params[:ref] || @project.default_branch || 'master'
+    @build_badge = Gitlab::Badge::Build.new(@project, @ref)
+  end
+
   def show
     @builds = @project.pipelines.find_by_sha(@build.sha).builds.order('id DESC')
     @builds = @builds.where("id not in (?)", @build.id)
diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml
index 51a54b4f262719f5c126f0c7c3d03c45271fcd52..020c3c4785609c4d7247de9108d9824e11935f16 100644
--- a/app/views/layouts/nav/_project_settings.html.haml
+++ b/app/views/layouts/nav/_project_settings.html.haml
@@ -27,6 +27,10 @@
         Protected Branches
 
   - if @project.builds_enabled?
+    = nav_link(controller: :builds) do
+      = link_to settings_namespace_project_builds_path(@project.namespace, @project), title: 'Builds' do
+        %span
+          Builds
     = nav_link(controller: :runners) do
       = link_to namespace_project_runners_path(@project.namespace, @project), title: 'Runners' do
         %span
diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml
deleted file mode 100644
index fff30f11d822c85fb758dee89f19a7726e99f80e..0000000000000000000000000000000000000000
--- a/app/views/projects/_builds_settings.html.haml
+++ /dev/null
@@ -1,65 +0,0 @@
-%fieldset.builds-feature
-  %h5.prepend-top-0
-    Builds
-  - unless @repository.gitlab_ci_yml
-    .form-group
-      %p Builds need to be configured before you can begin using Continuous Integration.
-      = link_to 'Get started with Builds', help_page_path('ci/quick_start/README'), class: 'btn btn-info'
-  .form-group
-    %p Get recent application code using the following command:
-    .radio
-      = f.label :build_allow_git_fetch_false do
-        = f.radio_button :build_allow_git_fetch, 'false'
-        %strong git clone
-        %br
-        %span.descr Slower but makes sure you have a clean dir before every build
-    .radio
-      = f.label :build_allow_git_fetch_true do
-        = f.radio_button :build_allow_git_fetch, 'true'
-        %strong git fetch
-        %br
-        %span.descr Faster
-
-  .form-group
-    = f.label :build_timeout_in_minutes, 'Timeout', class: 'label-light'
-    = f.number_field :build_timeout_in_minutes, class: 'form-control', min: '0'
-    %p.help-block per build in minutes
-  .form-group
-    = f.label :build_coverage_regex, "Test coverage parsing", class: 'label-light'
-    .input-group
-      %span.input-group-addon /
-      = f.text_field :build_coverage_regex, class: 'form-control', placeholder: '\(\d+.\d+\%\) covered'
-      %span.input-group-addon /
-    %p.help-block
-      We will use this regular expression to find test coverage output in build trace.
-      Leave blank if you want to disable this feature
-    .bs-callout.bs-callout-info
-      %p Below are examples of regex for existing tools:
-      %ul
-        %li
-          Simplecov (Ruby) -
-          %code \(\d+.\d+\%\) covered
-        %li
-          pytest-cov (Python) -
-          %code \d+\%\s*$
-        %li
-          phpunit --coverage-text --colors=never (PHP) -
-          %code ^\s*Lines:\s*\d+.\d+\%
-        %li
-          gcovr (C/C++) -
-          %code ^TOTAL.*\s+(\d+\%)$
-        %li
-          tap --coverage-report=text-summary (Node.js) -
-          %code ^Statements\s*:\s*([^%]+)
-
-  .form-group
-    .checkbox
-      = f.label :public_builds do
-        = f.check_box :public_builds
-        %strong Public builds
-      .help-block Allow everyone to access builds for Public and Internal projects
-
-  .form-group.append-bottom-0
-    = f.label :runners_token, "Runners token", class: 'label-light'
-    = f.text_field :runners_token, class: "form-control", placeholder: 'xEeFCaDAB89'
-    %p.help-block The secure token used to checkout project.
diff --git a/app/views/projects/builds/settings.html.haml b/app/views/projects/builds/settings.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..cb62990a7903d67b0da69dd22a6da4f9dd502d05
--- /dev/null
+++ b/app/views/projects/builds/settings.html.haml
@@ -0,0 +1,93 @@
+= form_for [@project.namespace.becomes(Namespace), @project], remote: true, authenticity_token: true do |f|
+
+  %fieldset.builds-feature
+    %h5.prepend-top-0
+      Builds
+    - unless @repository.gitlab_ci_yml
+      .form-group
+        %p Builds need to be configured before you can begin using Continuous Integration.
+        = link_to 'Get started with Builds', help_page_path('ci/quick_start/README'), class: 'btn btn-info'
+    .form-group
+      %p Get recent application code using the following command:
+      .radio
+        = f.label :build_allow_git_fetch_false do
+          = f.radio_button :build_allow_git_fetch, 'false'
+          %strong git clone
+          %br
+          %span.descr Slower but makes sure you have a clean dir before every build
+      .radio
+        = f.label :build_allow_git_fetch_true do
+          = f.radio_button :build_allow_git_fetch, 'true'
+          %strong git fetch
+          %br
+          %span.descr Faster
+
+    .form-group
+      = f.label :build_timeout_in_minutes, 'Timeout', class: 'label-light'
+      = f.number_field :build_timeout_in_minutes, class: 'form-control', min: '0'
+      %p.help-block per build in minutes
+    .form-group
+      = f.label :build_coverage_regex, "Test coverage parsing", class: 'label-light'
+      .input-group
+        %span.input-group-addon /
+        = f.text_field :build_coverage_regex, class: 'form-control', placeholder: '\(\d+.\d+\%\) covered'
+        %span.input-group-addon /
+      %p.help-block
+        We will use this regular expression to find test coverage output in build trace.
+        Leave blank if you want to disable this feature
+      .bs-callout.bs-callout-info
+        %p Below are examples of regex for existing tools:
+        %ul
+          %li
+            Simplecov (Ruby) -
+            %code \(\d+.\d+\%\) covered
+          %li
+            pytest-cov (Python) -
+            %code \d+\%\s*$
+          %li
+            phpunit --coverage-text --colors=never (PHP) -
+            %code ^\s*Lines:\s*\d+.\d+\%
+          %li
+            gcovr (C/C++) -
+            %code ^TOTAL.*\s+(\d+\%)$
+          %li
+            tap --coverage-report=text-summary (Node.js) -
+            %code ^Statements\s*:\s*([^%]+)
+
+    .form-group
+      .checkbox
+        = f.label :public_builds do
+          = f.check_box :public_builds
+          %strong Public builds
+        .help-block Allow everyone to access builds for Public and Internal projects
+
+    .form-group.append-bottom-0
+      = f.label :runners_token, "Runners token", class: 'label-light'
+      = f.text_field :runners_token, class: "form-control", placeholder: 'xEeFCaDAB89'
+      %p.help-block The secure token used to checkout project.
+
+    = f.submit 'Save changes', class: "btn btn-save"
+
+
+- badges_path = namespace_project_badges_path(@project.namespace, @project)
+
+.prepend-top-10
+  .panel.panel-default
+    .panel-heading
+      %b Builds badge &middot;
+      = @build_badge.to_html
+      .pull-right
+        = render 'shared/ref_switcher', destination: 'badges', align_right: true
+    .panel-body
+      .row
+        .col-md-2.text-center
+          Markdown
+        .col-md-10.code.js-syntax-highlight
+          = highlight('.md', @build_badge.to_markdown)
+      .row
+        %hr
+      .row
+        .col-md-2.text-center
+          HTML
+        .col-md-10.code.js-syntax-highlight
+          = highlight('.html', @build_badge.to_html)
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index 57af167180b254673b29ce1c10d55c3c2b3d0e8b..cecad9c47a0e32062fb2c1a624ed170755495024 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -86,8 +86,6 @@
         %hr
         = render 'merge_request_settings', f: f
         %hr
-        = render 'builds_settings', f: f
-        %hr
         %fieldset.features.append-bottom-default
           %h5.prepend-top-0
             Project avatar
diff --git a/config/routes.rb b/config/routes.rb
index 3160fd767b84a43baa42b8b6a8e5c30faff18f50..d09c021dac766564782d06844c81f449fd0ee0f6 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -89,7 +89,7 @@ Rails.application.routes.draw do
   mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\/(info\/lfs|gitlab-lfs)/.match(request.path_info) }, via: [:get, :post, :put]
 
   # Help
-  
+
   get 'help'                  => 'help#index'
   get 'help/*path'            => 'help#show', as: :help_page
   get 'help/shortcuts'
@@ -744,6 +744,7 @@ Rails.application.routes.draw do
         resources :builds, only: [:index, :show], constraints: { id: /\d+/ } do
           collection do
             post :cancel_all
+            get :settings
           end
 
           member do