diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index cbac7613e597d3ec30c36508c59651225693e458..b7ee75619cb50428ee12327cfee4e9480e2163ab 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -1,6 +1,17 @@
 class RegistrationsController < Devise::RegistrationsController
   before_filter :signup_enabled?
 
+  def destroy
+    if current_user.owned_projects.count > 0
+      redirect_to account_profile_path, alert: "Remove projects and groups before removing account." and return
+    end
+    current_user.destroy
+
+    respond_to do |format|
+      format.html { redirect_to new_user_session_path, notice: "Account successfully removed." }
+    end
+  end
+
   private
 
   def signup_enabled?
diff --git a/app/views/profiles/account.html.haml b/app/views/profiles/account.html.haml
index 2ad000b815bd86cf36e85478b511e87c98adaa00..5465d1f96e9edc1c6f6c3ee6ae0672ebad346061 100644
--- a/app/views/profiles/account.html.haml
+++ b/app/views/profiles/account.html.haml
@@ -77,4 +77,10 @@
       .input
         = f.submit 'Save username', class: "btn btn-save"
 
-
+- if Gitlab.config.gitlab.signup_enabled
+  %fieldset.remove-account
+    %legend
+      Remove account
+      %small.cred.pull-right
+        Before removing the account you must remove all projects!
+    = link_to 'Delete account', user_registration_path, confirm: "REMOVE #{current_user.name}? Are you sure?", method: :delete, class: "btn btn-remove delete-key btn-small pull-right"
\ No newline at end of file
diff --git a/spec/requests/profile_spec.rb b/spec/requests/profile_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c18d8f921a3a60bc95ae8eb397c8f0cd8751dbdc
--- /dev/null
+++ b/spec/requests/profile_spec.rb
@@ -0,0 +1,48 @@
+require 'spec_helper'
+
+describe "Profile account page" do
+  let(:user) { create(:user) }
+
+  before do
+    login_as :user
+  end
+
+  describe "when signup is enabled" do
+    before do
+      Gitlab.config.gitlab.stub(:signup_enabled).and_return(true)
+      visit account_profile_path
+    end
+    it { page.should have_content("Remove account") }
+    
+    it "should delete the account", js: true do
+      expect { click_link "Delete account" }.to change {User.count}.by(-1)
+      current_path.should == new_user_session_path
+    end
+  end
+
+  describe "when signup is enabled and user has a project" do
+    before do
+      Gitlab.config.gitlab.stub(:signup_enabled).and_return(true)
+      @project = create(:project, namespace: @user.namespace)
+      @project.team << [@user, :master]
+      visit account_profile_path
+    end
+    it { page.should have_content("Remove account") }
+
+    it "should not allow user to delete the account" do
+      expect { click_link "Delete account" }.not_to change {User.count}.by(-1)
+    end
+  end
+
+  describe "when signup is disabled" do
+    before do
+      Gitlab.config.gitlab.stub(:signup_enabled).and_return(false)
+      visit account_profile_path
+    end
+
+    it "should not have option to remove account" do
+      page.should_not have_content("Remove account")
+      current_path.should == account_profile_path
+    end
+  end
+end
\ No newline at end of file