diff --git a/app/assets/stylesheets/framework/lists.scss b/app/assets/stylesheets/framework/lists.scss
index 2c40ec430ca43f8794ccce4ded6b4186ef15f7c5..95a56ee0e95beab97ba203255034347cf7456e22 100644
--- a/app/assets/stylesheets/framework/lists.scss
+++ b/app/assets/stylesheets/framework/lists.scss
@@ -157,6 +157,10 @@ ul.content-list {
           margin-right: 0;
         }
       }
+
+      .artifacts-btn {
+        margin-right: 10px;
+      }
     }
 
     // When dragging a list item
diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml
index 4bd85061240a86b2859c0f7b65880c79fe79a7f9..78b3de46f58069b342caf8b739d38db0c0590459 100644
--- a/app/views/projects/branches/_branch.html.haml
+++ b/app/views/projects/branches/_branch.html.haml
@@ -27,6 +27,21 @@
         = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: branch.name), class: 'btn btn-default', method: :post, title: "Compare" do
           Compare
 
+      - artifacts = @project.builds_for(@repository.root_ref).latest.with_artifacts
+      - if artifacts.any?
+        .dropdown.inline.artifacts-btn
+          %a.btn.dropdown-toggle{ 'data-toggle' => 'dropdown' }
+            = icon('download')
+            %span.caret
+            %span.sr-only
+              Select Archive Format
+          %ul.dropdown-menu.dropdown-menu-align-right{ role: 'menu' }
+            %li.dropdown-header Artifacts
+            - artifacts.each do |job|
+              %li
+                = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, job), rel: 'nofollow' do
+                  %span Download '#{job.name}'
+
       - if can_remove_branch?(@project, branch.name)
         = link_to namespace_project_branch_path(@project.namespace, @project, branch.name), class: 'btn btn-remove remove-row has-tooltip', title: "Delete branch", method: :delete, data: { confirm: "Deleting the '#{branch.name}' branch cannot be undone. Are you sure?", container: 'body' }, remote: true do
           = icon("trash-o")
diff --git a/app/views/projects/buttons/_download.html.haml b/app/views/projects/buttons/_download.html.haml
index 58f43ecb5d5f2341d08bdc45110e394b67438511..c971420b16c7ed0141d15eb6103555ae35a0a551 100644
--- a/app/views/projects/buttons/_download.html.haml
+++ b/app/views/projects/buttons/_download.html.haml
@@ -1,4 +1,23 @@
 - unless @project.empty_repo?
   - if can? current_user, :download_code, @project
-    = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), class: 'btn has-tooltip', data: {container: "body"}, rel: 'nofollow', title: "Download ZIP" do
-      = icon('download')
+    .dropdown.inline.btn-group
+      %button.btn{ 'data-toggle' => 'dropdown' }
+        = icon('download')
+        %span.caret
+        %span.sr-only
+          Select Archive Format
+      %ul.dropdown-menu.dropdown-menu-align-right{ role: 'menu' }
+        %li.dropdown-header Source code
+        %li
+          = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'zip'), rel: 'nofollow' do
+            %span Download zip
+        %li
+          = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'tar.gz'), rel: 'nofollow' do
+            %span Download tar.gz
+        - artifacts = @project.builds_for(@ref).latest.with_artifacts
+        - if artifacts.any?
+          %li.dropdown-header Artifacts
+          - artifacts.each do |job|
+            %li
+              = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, job), rel: 'nofollow' do
+                %span Download '#{job.name}'