diff --git a/CHANGELOG b/CHANGELOG
index 7a7f86bcba8c9c95fa2de2082ec23409d7509743..aab2416a09b06ebe4f6a7a7a46706ce878344ba8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -52,6 +52,7 @@ v 8.0.0 (unreleased)
   - Added service API endpoint to retrieve service parameters (Petheő Bence)
   - Add FogBugz project import (Jared Szechy)
   - Sort users autocomplete lists by user (Allister Antosik)
+  - Webhook for issue now contains repository field (Jungkook Park)
 
 v 7.14.3
   - No changes
diff --git a/app/controllers/ci/helps_controller.rb b/app/controllers/ci/helps_controller.rb
deleted file mode 100644
index a1ee4111614c16fa612025790d4bf1cffc4891bb..0000000000000000000000000000000000000000
--- a/app/controllers/ci/helps_controller.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-module Ci
-  class HelpsController < Ci::ApplicationController
-    skip_filter :check_config
-
-    def show
-    end
-
-    def oauth2
-      if valid_config?
-        redirect_to ci_root_path
-      else
-        render layout: 'ci/empty'
-      end
-    end
-  end
-end
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index d7be212c33a8d6b71d43b095663f2aa0e0b23399..8776721d243d7283b26b26728b23c7dd4e78077f 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -18,12 +18,6 @@ class Projects::BlobController < Projects::ApplicationController
   before_action :after_edit_path, only: [:edit, :update]
 
   def new
-    @title = 'Upload'
-    @placeholder = 'Upload new file'
-    @button_title = 'Upload file'
-    @form_path = namespace_project_create_blob_path(@project.namespace, @project, @id)
-    @method = :post
-
     commit unless @repository.empty?
   end
 
@@ -46,11 +40,6 @@ class Projects::BlobController < Projects::ApplicationController
   end
 
   def show
-    @title = "Replace #{@blob.name}"
-    @placeholder = @title
-    @button_title = 'Replace file'
-    @form_path = namespace_project_update_blob_path(@project.namespace, @project, @id)
-    @method = :put
   end
 
   def edit
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index b049bd9fcc24510d30f404ff2125325b0bb088cb..39ab83ccf127e0a3642370d4784ff3e48bdd396c 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -13,7 +13,9 @@ module ApplicationHelper
   #   current_controller?(:commits)        # => false
   #   current_controller?(:commits, :tree) # => true
   def current_controller?(*args)
-    args.any? { |v| v.to_s.downcase == controller.controller_name }
+    args.any? do |v|
+      v.to_s.downcase == controller.controller_name || v.to_s.downcase == controller.controller_path
+    end
   end
 
   # Check if a particular action is the current one
diff --git a/app/helpers/ci/application_helper.rb b/app/helpers/ci/application_helper.rb
index 3198fe55f91b8fad489814960a9408c5687cf280..7e880b00b3ad55219cc03f211b8419ae0e788b5b 100644
--- a/app/helpers/ci/application_helper.rb
+++ b/app/helpers/ci/application_helper.rb
@@ -4,118 +4,10 @@ module Ci
       image_tag 'ci/loader.gif', alt: 'Loading'
     end
 
-    # Navigation link helper
-    #
-    # Returns an `li` element with an 'active' class if the supplied
-    # controller(s) and/or action(s) are currently active. The content of the
-    # element is the value passed to the block.
-    #
-    # options - The options hash used to determine if the element is "active" (default: {})
-    #           :controller   - One or more controller names to check (optional).
-    #           :action       - One or more action names to check (optional).
-    #           :path         - A shorthand path, such as 'dashboard#index', to check (optional).
-    #           :html_options - Extra options to be passed to the list element (optional).
-    # block   - An optional block that will become the contents of the returned
-    #           `li` element.
-    #
-    # When both :controller and :action are specified, BOTH must match in order
-    # to be marked as active. When only one is given, either can match.
-    #
-    # Examples
-    #
-    #   # Assuming we're on TreeController#show
-    #
-    #   # Controller matches, but action doesn't
-    #   nav_link(controller: [:tree, :refs], action: :edit) { "Hello" }
-    #   # => '<li>Hello</li>'
-    #
-    #   # Controller matches
-    #   nav_link(controller: [:tree, :refs]) { "Hello" }
-    #   # => '<li class="active">Hello</li>'
-    #
-    #   # Shorthand path
-    #   nav_link(path: 'tree#show') { "Hello" }
-    #   # => '<li class="active">Hello</li>'
-    #
-    #   # Supplying custom options for the list element
-    #   nav_link(controller: :tree, html_options: {class: 'home'}) { "Hello" }
-    #   # => '<li class="home active">Hello</li>'
-    #
-    # Returns a list item element String
-    def nav_link(options = {}, &block)
-      if path = options.delete(:path)
-        if path.respond_to?(:each)
-          c = path.map { |p| p.split('#').first }
-          a = path.map { |p| p.split('#').last }
-        else
-          c, a, _ = path.split('#')
-        end
-      else
-        c = options.delete(:controller)
-        a = options.delete(:action)
-      end
-
-      if c && a
-        # When given both options, make sure BOTH are active
-        klass = current_controller?(*c) && current_action?(*a) ? 'active' : ''
-      else
-        # Otherwise check EITHER option
-        klass = current_controller?(*c) || current_action?(*a) ? 'active' : ''
-      end
-
-      # Add our custom class into the html_options, which may or may not exist
-      # and which may or may not already have a :class key
-      o = options.delete(:html_options) || {}
-      o[:class] ||= ''
-      o[:class] += ' ' + klass
-      o[:class].strip!
-
-      if block_given?
-        content_tag(:li, capture(&block), o)
-      else
-        content_tag(:li, nil, o)
-      end
-    end
-
-    # Check if a particular controller is the current one
-    #
-    # args - One or more controller names to check
-    #
-    # Examples
-    #
-    #   # On TreeController
-    #   current_controller?(:tree)           # => true
-    #   current_controller?(:commits)        # => false
-    #   current_controller?(:commits, :tree) # => true
-    def current_controller?(*args)
-      args.any? { |v| v.to_s.downcase == controller.controller_name }
-    end
-
-    # Check if a particular action is the current one
-    #
-    # args - One or more action names to check
-    #
-    # Examples
-    #
-    #   # On Projects#new
-    #   current_action?(:new)           # => true
-    #   current_action?(:create)        # => false
-    #   current_action?(:new, :create)  # => true
-    def current_action?(*args)
-      args.any? { |v| v.to_s.downcase == action_name }
-    end
-
     def date_from_to(from, to)
       "#{from.to_s(:short)} - #{to.to_s(:short)}"
     end
 
-    def body_data_page
-      path = controller.controller_path.split('/')
-      namespace = path.first if path.second
-
-      [namespace, controller.controller_name, controller.action_name].compact.join(":")
-    end
-
     def duration_in_words(finished_at, started_at)
       if finished_at && started_at
         interval_in_seconds = finished_at.to_i - started_at.to_i
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb
index 40642dc63bab1c9661a592e4ccf6f07e5bf3f984..4db4ffb2e79835fb234e53470f32da2c105fad6a 100644
--- a/app/models/concerns/issuable.rb
+++ b/app/models/concerns/issuable.rb
@@ -140,6 +140,12 @@ module Issuable
     {
       object_kind: self.class.name.underscore,
       user: user.hook_attrs,
+      repository: {
+          name: project.name,
+          url: project.url_to_repo,
+          description: project.description,
+          homepage: project.web_url
+      },
       object_attributes: hook_attrs
     }
   end
diff --git a/app/views/ci/helps/oauth2.html.haml b/app/views/ci/helps/oauth2.html.haml
deleted file mode 100644
index 2031b7340d4e342727af156800dc7bdbd9bbb990..0000000000000000000000000000000000000000
--- a/app/views/ci/helps/oauth2.html.haml
+++ /dev/null
@@ -1,20 +0,0 @@
-.welcome-block
-  %h1
-    Welcome to GitLab CI
-  %p
-    GitLab CI integrates with your GitLab installation and runs tests for your projects.
-
-  %h3 You need only 2 steps to set it up
-
-  %ol
-    %li
-      In the GitLab admin area under OAuth applications create a new entry. The redirect url should be
-      %code= callback_ci_user_sessions_url
-    %li
-      Update the GitLab CI config with the application id and the application secret from GitLab.
-    %li
-      Restart your GitLab CI instance
-    %li
-      Refresh this page when GitLab CI has started again
-
-
diff --git a/app/views/ci/helps/show.html.haml b/app/views/ci/helps/show.html.haml
deleted file mode 100644
index 9b32d529c6074d722bba4cc20d1d2b0587223df3..0000000000000000000000000000000000000000
--- a/app/views/ci/helps/show.html.haml
+++ /dev/null
@@ -1,40 +0,0 @@
-.jumbotron
-  %h2
-    GitLab CI
-    %span= GitlabCi::VERSION
-    %small= GitlabCi::REVISION
-  %p
-    GitLab CI integrates with your GitLab installation and run tests for your projects.
-    %br
-    Login with your GitLab account, add a project with one click and enjoy running your tests.
-    %br
-    Read more about GitLab CI at #{link_to "about.gitlab.com/gitlab-ci", "https://about.gitlab.com/gitlab-ci/", target: "_blank"}.
-
-
-.bs-callout.bs-callout-success
-  %h4
-    = link_to 'https://gitlab.com/gitlab-org/gitlab-ci/blob/master/doc/api' do
-      %i.fa.fa-cogs
-      API
-  %p Explore how you can access GitLab CI via the API.
-
-.bs-callout.bs-callout-info
-  %h4
-    = link_to 'https://gitlab.com/gitlab-org/gitlab-ci/tree/master/doc/examples' do
-      %i.fa.fa-info-sign
-      Build script examples
-  %p This includes the build script we use to test GitLab CE.
-
-.bs-callout.bs-callout-danger
-  %h4
-    = link_to 'https://gitlab.com/gitlab-org/gitlab-ci/issues' do
-      %i.fa.fa-bug
-      Issue tracker
-  %p Reports about recent bugs and problems..
-
-.bs-callout.bs-callout-warning
-  %h4
-    = link_to 'http://feedback.gitlab.com/forums/176466-general/category/64310-gitlab-ci' do
-      %i.fa.fa-thumbs-up
-      Feedback forum
-  %p Suggest improvements or new features for GitLab CI.
diff --git a/app/views/layouts/ci/_nav_admin.html.haml b/app/views/layouts/ci/_nav_admin.html.haml
index 4e4c8ab10790702a3d79c493deab03d5cc690e1e..e9974c8573393b30cced0471d8eafb0efcd1d1d4 100644
--- a/app/views/layouts/ci/_nav_admin.html.haml
+++ b/app/views/layouts/ci/_nav_admin.html.haml
@@ -1,9 +1,9 @@
 %ul.nav.nav-sidebar
   = nav_link do
-    = link_to ci_root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do
+    = link_to admin_root_path, title: 'Back to admin', data: {placement: 'right'}, class: 'back-link' do
       = icon('caret-square-o-left fw')
       %span
-        Back to dashboard
+        Back to admin
 
   %li.separate-item
   = nav_link path: 'projects#index' do
diff --git a/app/views/layouts/ci/_nav_dashboard.html.haml b/app/views/layouts/ci/_nav_dashboard.html.haml
deleted file mode 100644
index 55bacb660618225cb29390d73e724809c5a53b1a..0000000000000000000000000000000000000000
--- a/app/views/layouts/ci/_nav_dashboard.html.haml
+++ /dev/null
@@ -1,24 +0,0 @@
-%ul.nav.nav-sidebar
-  = nav_link do
-    = link_to root_path, title: 'Back to dashboard', data: {placement: 'right'}, class: 'back-link' do
-      = icon('caret-square-o-left fw')
-      %span
-        Back to GitLab
-  %li.separate-item
-  = nav_link path: 'projects#index' do
-    = link_to ci_root_path do
-      %i.fa.fa-home
-      %span
-        Projects
-  - if current_user && current_user.is_admin?
-    %li
-      = link_to ci_admin_projects_path do
-        %i.fa.fa-cogs
-        %span
-          Admin
-  = nav_link path: "helps#show" do
-    = link_to ci_help_path do
-      %i.fa.fa-info
-      %span
-        Help
-
diff --git a/app/views/layouts/ci/application.html.haml b/app/views/layouts/ci/application.html.haml
index b9f871d54474e371609bd5d8fefd0a4ca9e04bab..9cc7fb85142ddcacde30d06ee6673380eb6f7bb5 100644
--- a/app/views/layouts/ci/application.html.haml
+++ b/app/views/layouts/ci/application.html.haml
@@ -8,4 +8,4 @@
     - else
       = render "layouts/header/public", title: header_title
 
-    = render 'layouts/ci/page', sidebar: 'nav_dashboard'
+    = render 'layouts/ci/page'
diff --git a/app/views/layouts/nav/_admin.html.haml b/app/views/layouts/nav/_admin.html.haml
index 3fe0127041e39487ff4082c7432b66cfdce3ce05..2079feeeab6d73c2c26a500ee8d2028b42a4519d 100644
--- a/app/views/layouts/nav/_admin.html.haml
+++ b/app/views/layouts/nav/_admin.html.haml
@@ -4,7 +4,7 @@
       = icon('dashboard fw')
       %span
         Overview
-  = nav_link(controller: :projects) do
+  = nav_link(controller: [:admin, :projects]) do
     = link_to admin_namespaces_projects_path, title: 'Projects', data: {placement: 'right'} do
       = icon('cube fw')
       %span
@@ -24,6 +24,11 @@
       = icon('key fw')
       %span
         Deploy Keys
+  = nav_link do
+    = link_to ci_admin_projects_path, title: 'Continuous Integration', data: {placement: 'right'} do
+      = icon('building fw')
+      %span
+        Continuous Integration
   = nav_link(controller: :logs) do
     = link_to admin_logs_path, title: 'Logs', data: {placement: 'right'} do
       = icon('file-text fw')
diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml
index 5381002ecf5dfe48eac8fedb07e07eaf30d1c44e..3bda7c4695904c81282ed2b400fddf55d491c58b 100644
--- a/app/views/layouts/nav/_dashboard.html.haml
+++ b/app/views/layouts/nav/_dashboard.html.haml
@@ -1,5 +1,5 @@
 %ul.nav.nav-sidebar
-  = nav_link(path: ['root#index', 'projects#trending', 'projects#starred', 'projects#index'], html_options: {class: 'home'}) do
+  = nav_link(path: ['root#index', 'projects#trending', 'projects#starred', 'dashboard/projects#index'], html_options: {class: 'home'}) do
     = link_to root_path, title: 'Projects', data: {placement: 'right'} do
       = icon('home fw')
       %span
@@ -31,6 +31,11 @@
         %span
           Merge Requests
           %span.count= current_user.assigned_merge_requests.opened.count
+  = nav_link(path: 'ci/projects#index') do
+    = link_to ci_projects_path, title: 'Continuous Integration', data: {placement: 'right'} do
+      = icon('building fw')
+      %span
+        Continuous Integration
   = nav_link(controller: :snippets) do
     = link_to dashboard_snippets_path, title: 'Your snippets', data: {placement: 'right'} do
       = icon('clipboard fw')
@@ -41,13 +46,10 @@
       = icon('question-circle fw')
       %span
         Help
+
+  %li.separate-item
   = nav_link(controller: :profile) do
     = link_to profile_path, title: 'Profile settings', data: {placement: 'bottom'} do
       = icon('user fw')
       %span
         Profile Settings
-  = nav_link(controller: :ci) do
-    = link_to ci_root_path, title: 'Continuous Integration', data: {placement: 'right'} do
-      = icon('building fw')
-      %span
-        GitLab CI
diff --git a/app/views/layouts/nav/_project.html.haml b/app/views/layouts/nav/_project.html.haml
index 8ce46d4865b55d719d158197db0dcffdbe7dc480..a218ec7486cf9fe649e08ec4c92bfa3bcd1e7220 100644
--- a/app/views/layouts/nav/_project.html.haml
+++ b/app/views/layouts/nav/_project.html.haml
@@ -76,6 +76,13 @@
           Merge Requests
           %span.count.merge_counter= @project.merge_requests.opened.count
 
+  - if @project.gitlab_ci?
+    = nav_link(controller: [:ci, :project]) do
+      = link_to ci_project_path(@project.gitlab_ci_project), title: 'Continuous Integration', data: {placement: 'right'} do
+        = icon('building fw')
+        %span
+          Continuous Integration
+
   - if project_nav_tab? :settings
     = 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
diff --git a/app/views/projects/blob/_upload.html.haml b/app/views/projects/blob/_upload.html.haml
index 2cfb79486dc9a986c87db3b6f0e560e23ae95927..1a1df12770324e7408e9509c09b8a685f143e3c8 100644
--- a/app/views/projects/blob/_upload.html.haml
+++ b/app/views/projects/blob/_upload.html.haml
@@ -3,12 +3,12 @@
     .modal-content
       .modal-header
         %a.close{href: "#", "data-dismiss" => "modal"} ×
-        %h3.page-title #{@title}
+        %h3.page-title #{title}
         %p.light
           From branch
           %strong= @ref
       .modal-body
-        = form_tag @form_path, method: @method, class: 'blob-file-upload-form-js form-horizontal' do
+        = form_tag form_path, method: method, class: 'blob-file-upload-form-js form-horizontal' do
           .dropzone
             .dropzone-previews.blob-upload-dropzone-previews
               %p.dz-message.light
@@ -17,12 +17,12 @@
           %br
           .dropzone-alerts{class: "alert alert-danger data", style: "display:none"}
           = render 'shared/commit_message_container', params: params,
-            placeholder: @placeholder
+            placeholder: placeholder
           .form-group
             .col-sm-offset-2.col-sm-10
-              = button_tag @button_title, class: 'btn btn-small btn-primary btn-upload-file', id: 'submit-all'
+              = button_tag button_title, class: 'btn btn-small btn-primary btn-upload-file', id: 'submit-all'
               = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal"
 
 :coffeescript
   disableButtonIfEmptyField $('.blob-file-upload-form-js').find('#commit_message'), '.btn-upload-file'
-  new BlobFileDropzone($('.blob-file-upload-form-js'), '#{@method}')
+  new BlobFileDropzone($('.blob-file-upload-form-js'), '#{method}')
diff --git a/app/views/projects/blob/new.html.haml b/app/views/projects/blob/new.html.haml
index 126e21d7b4d3d437e086f692078f6399ca7c5f48..1950586b11280357e6a29df530ef74a1fecebc16 100644
--- a/app/views/projects/blob/new.html.haml
+++ b/app/views/projects/blob/new.html.haml
@@ -7,7 +7,7 @@
     { class: 'upload-link', 'data-target' => '#modal-upload-blob', 'data-toggle' => 'modal'}
   an existing one
 
-= render 'projects/blob/upload'
+= render 'projects/blob/upload', title: 'Upload', placeholder: 'Upload new file', button_title: 'Upload file', form_path: namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post
 
 .file-editor
   = form_tag(namespace_project_create_blob_path(@project.namespace, @project, @id), method: :post, class: 'form-horizontal form-new-file js-requires-input') do
diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml
index 1f7859198d841a120123215a71eb70f96de04243..fa4be4a1bc43ed30d772306f074c44ad7c1b48a4 100644
--- a/app/views/projects/blob/show.html.haml
+++ b/app/views/projects/blob/show.html.haml
@@ -11,4 +11,8 @@
 
 - if allowed_tree_edit?
   = render 'projects/blob/remove'
-  = render 'projects/blob/upload'
+
+  - title = "Replace #{@blob.name}"
+  = render 'projects/blob/upload', title: title, placeholder: title,
+    button_title: 'Replace file', form_path: namespace_project_update_blob_path(@project.namespace, @project, @id),
+    method: :put
diff --git a/config/routes.rb b/config/routes.rb
index 41970d2af8a55b948747bc3c24bbf5686c5a1b65..b5a84c1f19226bd6549540159c7e0d6a7a754ae3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -9,10 +9,6 @@ Gitlab::Application.routes.draw do
 
     resource :lint, only: [:show, :create]
 
-    resource :help do
-      get :oauth2
-    end
-
     resources :projects do
       collection do
         post :add
diff --git a/db/schema.rb b/db/schema.rb
index a3a69a4b626456758d785fffb88baa07b4fc78fc..151f34e1965aefd5f4afdb3d5ef5d9bc8fd9f7e2 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,8 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20150916000405) do
+ActiveRecord::Schema.define(version: 20150916145038) do
+
   # These are extensions that must be enabled in order to support this database
   enable_extension "plpgsql"
 
diff --git a/doc/migrate_ci_to_ce/README.md b/doc/migrate_ci_to_ce/README.md
index 13efc8442d2c6b3eaad9a3dee90f43a6655979c4..1e45f29dbb21c6933db23dd9730d6ec100376e89 100644
--- a/doc/migrate_ci_to_ce/README.md
+++ b/doc/migrate_ci_to_ce/README.md
@@ -52,7 +52,14 @@ This also breaks your database structure disallowing you to use it anymore.
     ALTER TABLE web_hooks RENAME TO ci_web_hooks;
     EOF
 
-### 4. Dump GitLab CI database [CI]
+### 4. Remove CI cronjob
+
+```
+cd /home/gitlab_ci/gitlab-ci
+sudo -u gitlab_ci -H bundle exec whenever --clear-crontab
+```
+
+### 5. Dump GitLab CI database [CI]
 
 First check used database and credentials on GitLab CI and GitLab CE/EE:
 
@@ -125,18 +132,18 @@ You will need to put these credentials into commands executed below.**
     # Filter to only include INSERT statements
     grep "^\(START\|SET\|INSERT\|COMMIT\)" gitlab_ci.sql.tmp2 > gitlab_ci.sql
     
-### 5. Make sure that your GitLab CE/EE is 8.0 [CE]
+### 6. Make sure that your GitLab CE/EE is 8.0 [CE]
 
 Please verify that you use GitLab CE/EE 8.0.
 If not, please follow the update guide: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/7.14-to-8.0.md
 
-### 6. Stop GitLab CE/EE [CE]
+### 7. Stop GitLab CE/EE [CE]
 
 Before you can migrate data you need to stop GitLab CE/EE first.
 
     sudo service gitlab stop
     
-### 7. Backup GitLab CE/EE [CE]
+### 8. Backup GitLab CE/EE [CE]
 
 This migration poses a **significant risk** of breaking your GitLab CE/EE. 
 **You should create the GitLab CI/EE backup before doing it.**
@@ -144,7 +151,7 @@ This migration poses a **significant risk** of breaking your GitLab CE/EE.
     cd /home/git/gitlab
     sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
 
-### 8. Copy secret tokens [CE]
+### 9. Copy secret tokens [CE]
 
 The `secrets.yml` file stores encryption keys for secure variables.
 
@@ -154,7 +161,7 @@ You need to copy the content of `config/secrets.yml` to the same file in GitLab
     sudo chown git:git /home/git/gitlab/config/secrets.yml
     sudo chown 0600 /home/git/gitlab/config/secrets.yml
     
-### 9. New configuration options for `gitlab.yml` [CE]
+### 10. New configuration options for `gitlab.yml` [CE]
 
 There are new configuration options available for [`gitlab.yml`](config/gitlab.yml.example).
 View them with the command below and apply them manually to your current `gitlab.yml`:
@@ -165,7 +172,7 @@ git diff origin/7-14-stable:config/gitlab.yml.example origin/8-0-stable:config/g
 
 The new options include configuration of GitLab CI that are now being part of GitLab CE and EE.
 
-### 10. Copy build logs [CE]
+### 11. Copy build logs [CE]
 
 You need to copy the contents of `builds/` to the same directory in GitLab CE/EE.
 
@@ -174,7 +181,7 @@ You need to copy the contents of `builds/` to the same directory in GitLab CE/EE
 
 The build traces are usually quite big so it will take a significant amount of time.
 
-### 11. Import GitLab CI database [CE]
+### 12. Import GitLab CI database [CE]
 
 The one of the last steps is to import existing GitLab CI database.
 
@@ -189,13 +196,13 @@ The task does:
 1. Fix tags assigned to Builds and Runners
 1. Fix services used by CI
 
-### 12. Start GitLab [CE]
+### 13. Start GitLab [CE]
 
 You can start GitLab CI/EE now and see if everything is working.
 
     sudo service gitlab start
 
-### 13. Update nginx [CI]
+### 14. Update nginx [CI]
     
 Now get back to GitLab CI and update **Nginx** configuration in order to:
 1. Have all existing runners able to communicate with a migrated GitLab CI.
@@ -263,7 +270,7 @@ You should also make sure that you can do:
 
     sudo /etc/init.d/nginx restart
 
-### 14. Done!
+### 15. Done!
 
 If everything went OK you should be able to access all your GitLab CI data by pointing your browser to:
 https://gitlab.example.com/ci/.
diff --git a/doc/web_hooks/web_hooks.md b/doc/web_hooks/web_hooks.md
index 09400d9b1633289e7156108abb7935d3590d44f6..f4701bb6db2af4100ce8fdbaf53db2e272584685 100644
--- a/doc/web_hooks/web_hooks.md
+++ b/doc/web_hooks/web_hooks.md
@@ -121,6 +121,12 @@ X-Gitlab-Event: Issue Hook
     "username": "root",
     "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40\u0026d=identicon"
   },
+  "repository": {
+    "name": "Gitlab Test",
+    "url": "http://example.com/gitlabhq/gitlab-test.git",
+    "description": "Aut reprehenderit ut est.",
+    "homepage": "http://example.com/gitlabhq/gitlab-test"
+  },
   "object_attributes": {
     "id": 301,
     "title": "New API: create/update/delete file",
diff --git a/spec/models/concerns/issuable_spec.rb b/spec/models/concerns/issuable_spec.rb
index b6d80451d2ec76cfe01c441010c912d77d496a19..8f706f8934b419eaca5e269d16712fbcb7f85100 100644
--- a/spec/models/concerns/issuable_spec.rb
+++ b/spec/models/concerns/issuable_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
 
 describe Issue, "Issuable" do
   let(:issue) { create(:issue) }
+  let(:user) { create(:user) }
 
   describe "Associations" do
     it { is_expected.to belong_to(:project) }
@@ -66,4 +67,19 @@ describe Issue, "Issuable" do
       expect(issue.new?).to be_falsey
     end
   end
+
+
+  describe "#to_hook_data" do
+    let(:hook_data) { issue.to_hook_data(user) }
+
+    it "returns correct hook data" do
+      expect(hook_data[:object_kind]).to eq("issue")
+      expect(hook_data[:user]).to eq(user.hook_attrs)
+      expect(hook_data[:repository][:name]).to eq(issue.project.name)
+      expect(hook_data[:repository][:url]).to eq(issue.project.url_to_repo)
+      expect(hook_data[:repository][:description]).to eq(issue.project.description)
+      expect(hook_data[:repository][:homepage]).to eq(issue.project.web_url)
+      expect(hook_data[:object_attributes]).to eq(issue.hook_attrs)
+    end
+  end
 end