diff --git a/spec/factories.rb b/spec/factories.rb
index 8f323161990263733024df6aa86688f00507657a..f9e25382b61be5d784f6506a3ae38d0abfdff420 100644
--- a/spec/factories.rb
+++ b/spec/factories.rb
@@ -158,8 +158,7 @@ FactoryGirl.define do
       "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0="
     end
 
-    factory :deploy_key do
-      project
+    factory :deploy_key, class: 'DeployKey' do
     end
 
     factory :personal_key do
@@ -222,4 +221,9 @@ FactoryGirl.define do
     url
     service
   end
+
+  factory :deploy_keys_project do
+    deploy_key
+    project
+  end
 end
diff --git a/spec/models/deploy_key_spec.rb b/spec/models/deploy_key_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3658a6ff1d0460c8b2466f01dd082cb610a8658e
--- /dev/null
+++ b/spec/models/deploy_key_spec.rb
@@ -0,0 +1,25 @@
+# == Schema Information
+#
+# Table name: keys
+#
+#  id         :integer          not null, primary key
+#  user_id    :integer
+#  created_at :datetime         not null
+#  updated_at :datetime         not null
+#  key        :text
+#  title      :string(255)
+#  identifier :string(255)
+#  project_id :integer
+#
+
+require 'spec_helper'
+
+describe DeployKey do
+  let(:project) { create(:project) }
+  let(:deploy_key) { create(:deploy_key, projects: [project]) }
+
+  describe "Associations" do
+    it { should have_many(:deploy_keys_projects) }
+    it { should have_many(:projects) }
+  end
+end
diff --git a/spec/models/deploy_keys_project_spec.rb b/spec/models/deploy_keys_project_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bb62c48bbccfaadcc27742341635d442ca900f4b
--- /dev/null
+++ b/spec/models/deploy_keys_project_spec.rb
@@ -0,0 +1,13 @@
+require 'spec_helper'
+
+describe DeployKeysProject do
+  describe "Associations" do
+    it { should belong_to(:deploy_key) }
+    it { should belong_to(:project) }
+  end
+
+  describe "Validation" do
+    it { should validate_presence_of(:project_id) }
+    it { should validate_presence_of(:deploy_key_id) }
+  end
+end
diff --git a/spec/models/key_spec.rb b/spec/models/key_spec.rb
index a9ab2f05a3411e3c8a4a54d748751926bf827bf8..9ccad18248c1ad3501f4970cbe8d4ed16ffedd78 100644
--- a/spec/models/key_spec.rb
+++ b/spec/models/key_spec.rb
@@ -17,7 +17,6 @@ require 'spec_helper'
 describe Key do
   describe "Associations" do
     it { should belong_to(:user) }
-    it { should belong_to(:project) }
   end
 
   describe "Mass assignment" do
@@ -37,32 +36,15 @@ describe Key do
   end
 
   context "validation of uniqueness" do
+    let(:user) { create(:user) }
 
-    context "as a deploy key" do
-      let!(:deploy_key) { create(:deploy_key) }
-
-      it "does not accept the same key twice for a project" do
-        key = build(:key, project: deploy_key.project)
-        key.should_not be_valid
-      end
-
-      it "does not accept the same key for another project" do
-        key = build(:key, project_id: 0)
-        key.should_not be_valid
-      end
+    it "accepts the key once" do
+      build(:key, user: user).should be_valid
     end
 
-    context "as a personal key" do
-      let(:user) { create(:user) }
-
-      it "accepts the key once" do
-        build(:key, user: user).should be_valid
-      end
-
-      it "does not accepts the key twice" do
-        create(:key, user: user)
-        build(:key, user: user).should_not be_valid
-      end
+    it "does not accepts the key twice" do
+      create(:key, user: user)
+      build(:key, user: user).should_not be_valid
     end
   end