diff --git a/app/models/namespace.rb b/app/models/namespace.rb
index 67d8c1c2e4cb29f5661a46d0147916565e5157c5..2fb2eb44aaa59f0e44d1da791d95814be115abf0 100644
--- a/app/models/namespace.rb
+++ b/app/models/namespace.rb
@@ -130,6 +130,7 @@ class Namespace < ActiveRecord::Base
     end
 
     Gitlab::UploadsTransfer.new.rename_namespace(path_was, path)
+    Gitlab::PagesTransfer.new.rename_namespace(path_was, path)
 
     remove_exports!
 
diff --git a/app/models/project.rb b/app/models/project.rb
index a1888c089ce33bbb92cdfca0a62461dfda45b581..e9c7108e80531db6745bc201e8c448e237e26edb 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -961,6 +961,7 @@ class Project < ActiveRecord::Base
     Gitlab::AppLogger.info "Project was renamed: #{old_path_with_namespace} -> #{new_path_with_namespace}"
 
     Gitlab::UploadsTransfer.new.rename_project(path_was, path, namespace.path)
+    Gitlab::PagesTransfer.new.rename_project(path_was, path, namespace.path)
   end
 
   # Expires various caches before a project is renamed.
diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb
index 34ec575e8084da0639133fb3e5fd6142ab3ff3e0..20b049b59737532f5b3944c87a23764156df5576 100644
--- a/app/services/projects/transfer_service.rb
+++ b/app/services/projects/transfer_service.rb
@@ -64,6 +64,9 @@ module Projects
         # Move uploads
         Gitlab::UploadsTransfer.new.move_project(project.path, old_namespace.path, new_namespace.path)
 
+        # Move pages
+        Gitlab::PagesTransfer.new.move_project(project.path, old_namespace.path, new_namespace.path)
+
         project.old_path_with_namespace = old_path
 
         SystemHooksService.new.execute_hooks_for(project, :transfer)
diff --git a/app/workers/pages_worker.rb b/app/workers/pages_worker.rb
index 6c6bb7ed13f16497e5008ca426f0a03bc7ea0ef8..836e8d8ad9df5c254006105213d966a35d9e19e9 100644
--- a/app/workers/pages_worker.rb
+++ b/app/workers/pages_worker.rb
@@ -121,10 +121,6 @@ class PagesWorker
     @previous_public_path ||= File.join(pages_path, "public.#{SecureRandom.hex}")
   end
 
-  def lock_path
-    @lock_path ||= File.join(pages_path, 'deploy.lock')
-  end
-
   def ref
     build.ref
   end
diff --git a/doc/pages/administration.md b/doc/pages/administration.md
index 98a26ec7be9c6e3ecdf7b1f791098a6425c53e69..2356a123fa312f6803c475ae1ecbd973d0fa663e 100644
--- a/doc/pages/administration.md
+++ b/doc/pages/administration.md
@@ -119,6 +119,7 @@ required.
        port: 443 # Set to 443 if you serve the pages with HTTPS
        https: true # Set to true if you serve the pages with HTTPS
      ```
+
 1. Copy the `gitlab-pages-ssl` Nginx configuration file:
 
     ```bash
diff --git a/lib/gitlab/pages_transfer.rb b/lib/gitlab/pages_transfer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fb215f27cbdbb40768a34805cec1c41c5e2b3dd3
--- /dev/null
+++ b/lib/gitlab/pages_transfer.rb
@@ -0,0 +1,7 @@
+module Gitlab
+  class PagesTransfer < ProjectTransfer
+    def root_dir
+      Gitlab.config.pages.path
+    end
+  end
+end
diff --git a/lib/gitlab/project_transfer.rb b/lib/gitlab/project_transfer.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1bba0b78e2ff6ef21cbe4a5a7c551d5e52abe49b
--- /dev/null
+++ b/lib/gitlab/project_transfer.rb
@@ -0,0 +1,35 @@
+module Gitlab
+  class ProjectTransfer
+    def move_project(project_path, namespace_path_was, namespace_path)
+      new_namespace_folder = File.join(root_dir, namespace_path)
+      FileUtils.mkdir_p(new_namespace_folder) unless Dir.exist?(new_namespace_folder)
+      from = File.join(root_dir, namespace_path_was, project_path)
+      to = File.join(root_dir, namespace_path, project_path)
+      move(from, to, "")
+    end
+
+    def rename_project(path_was, path, namespace_path)
+      base_dir = File.join(root_dir, namespace_path)
+      move(path_was, path, base_dir)
+    end
+
+    def rename_namespace(path_was, path)
+      move(path_was, path)
+    end
+
+    def root_dir
+      raise NotImplementedError
+    end
+
+    private
+
+    def move(path_was, path, base_dir = nil)
+      base_dir = root_dir unless base_dir
+      from = File.join(base_dir, path_was)
+      to = File.join(base_dir, path)
+      FileUtils.mv(from, to)
+    rescue Errno::ENOENT
+      false
+    end
+  end
+end
diff --git a/lib/gitlab/uploads_transfer.rb b/lib/gitlab/uploads_transfer.rb
index be8fcc7b2d256db48600707493f343e198ea4370..81701831a6a5406bb3825b9a2191993006a72961 100644
--- a/lib/gitlab/uploads_transfer.rb
+++ b/lib/gitlab/uploads_transfer.rb
@@ -1,33 +1,5 @@
 module Gitlab
-  class UploadsTransfer
-    def move_project(project_path, namespace_path_was, namespace_path)
-      new_namespace_folder = File.join(root_dir, namespace_path)
-      FileUtils.mkdir_p(new_namespace_folder) unless Dir.exist?(new_namespace_folder)
-      from = File.join(root_dir, namespace_path_was, project_path)
-      to = File.join(root_dir, namespace_path, project_path)
-      move(from, to, "")
-    end
-
-    def rename_project(path_was, path, namespace_path)
-      base_dir = File.join(root_dir, namespace_path)
-      move(path_was, path, base_dir)
-    end
-
-    def rename_namespace(path_was, path)
-      move(path_was, path)
-    end
-
-    private
-
-    def move(path_was, path, base_dir = nil)
-      base_dir = root_dir unless base_dir
-      from = File.join(base_dir, path_was)
-      to = File.join(base_dir, path)
-      FileUtils.mv(from, to)
-    rescue Errno::ENOENT
-      false
-    end
-
+  class UploadsTransfer < ProjectTransfer
     def root_dir
       File.join(Rails.root, "public", "uploads")
     end
diff --git a/spec/lib/gitlab/uploads_transfer_spec.rb b/spec/lib/gitlab/project_transfer_spec.rb
similarity index 75%
rename from spec/lib/gitlab/uploads_transfer_spec.rb
rename to spec/lib/gitlab/project_transfer_spec.rb
index 4092f7fb638e19f732234be4324ab847b374222e..e2d6b1b9ab7e63542dd428c3945aae427f79952b 100644
--- a/spec/lib/gitlab/uploads_transfer_spec.rb
+++ b/spec/lib/gitlab/project_transfer_spec.rb
@@ -1,9 +1,10 @@
 require 'spec_helper'
 
-describe Gitlab::UploadsTransfer, lib: true do
+describe Gitlab::ProjectTransfer, lib: true do
   before do
     @root_dir = File.join(Rails.root, "public", "uploads")
-    @upload_transfer = Gitlab::UploadsTransfer.new
+    @project_transfer = Gitlab::ProjectTransfer.new
+    allow(@project_transfer).to receive(:root_dir).and_return(@root_dir)
 
     @project_path_was = "test_project_was"
     @project_path = "test_project"
@@ -21,7 +22,7 @@ describe Gitlab::UploadsTransfer, lib: true do
   describe '#move_project' do
     it "moves project upload to another namespace" do
       FileUtils.mkdir_p(File.join(@root_dir, @namespace_path_was, @project_path))
-      @upload_transfer.move_project(@project_path, @namespace_path_was, @namespace_path)
+      @project_transfer.move_project(@project_path, @namespace_path_was, @namespace_path)
 
       expected_path = File.join(@root_dir, @namespace_path, @project_path)
       expect(Dir.exist?(expected_path)).to be_truthy
@@ -31,7 +32,7 @@ describe Gitlab::UploadsTransfer, lib: true do
   describe '#rename_project' do
     it "renames project" do
       FileUtils.mkdir_p(File.join(@root_dir, @namespace_path, @project_path_was))
-      @upload_transfer.rename_project(@project_path_was, @project_path, @namespace_path)
+      @project_transfer.rename_project(@project_path_was, @project_path, @namespace_path)
 
       expected_path = File.join(@root_dir, @namespace_path, @project_path)
       expect(Dir.exist?(expected_path)).to be_truthy
@@ -41,7 +42,7 @@ describe Gitlab::UploadsTransfer, lib: true do
   describe '#rename_namespace' do
     it "renames namespace" do
       FileUtils.mkdir_p(File.join(@root_dir, @namespace_path_was, @project_path))
-      @upload_transfer.rename_namespace(@namespace_path_was, @namespace_path)
+      @project_transfer.rename_namespace(@namespace_path_was, @namespace_path)
 
       expected_path = File.join(@root_dir, @namespace_path, @project_path)
       expect(Dir.exist?(expected_path)).to be_truthy
diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb
index 1540b90163a2f98e302442c6a46af6b8a934feef..5d5812c2c1520653b96dcb251864d4a7a17c2229 100644
--- a/spec/services/projects/transfer_service_spec.rb
+++ b/spec/services/projects/transfer_service_spec.rb
@@ -9,6 +9,8 @@ describe Projects::TransferService, services: true do
     before do
       allow_any_instance_of(Gitlab::UploadsTransfer).
         to receive(:move_project).and_return(true)
+      allow_any_instance_of(Gitlab::PagesTransfer).
+        to receive(:move_project).and_return(true)
       group.add_owner(user)
       @result = transfer_project(project, user, group)
     end