diff --git a/db/migrate/20160225232049_link_share_visibilities_with_user.rb b/db/migrate/20160225232049_link_share_visibilities_with_user.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1528c9aed406e3a7becf3380286baaf4731d1f84
--- /dev/null
+++ b/db/migrate/20160225232049_link_share_visibilities_with_user.rb
@@ -0,0 +1,65 @@
+class LinkShareVisibilitiesWithUser < ActiveRecord::Migration
+  def up
+    cleanup_deleted_share_visibilities
+
+    remove_columns :share_visibilities, :created_at, :updated_at
+    add_column :share_visibilities, :user_id, :integer
+
+    ShareVisibility.joins("INNER JOIN contacts ON share_visibilities.contact_id = contacts.id")
+      .update_all("share_visibilities.user_id = contacts.user_id")
+
+    remove_foreign_key :share_visibilities, name: :post_visibilities_contact_id_fk
+
+    remove_index :share_visibilities, name: :index_post_visibilities_on_contact_id
+    remove_index :share_visibilities, name: :shareable_and_contact_id
+    remove_index :share_visibilities, name: :shareable_and_hidden_and_contact_id
+
+    remove_column :share_visibilities, :contact_id
+    change_column :share_visibilities, :user_id, :integer, null: false
+
+    ShareVisibility.joins("LEFT OUTER JOIN users ON users.id = share_visibilities.user_id")
+      .delete_all("users.id is NULL")
+
+    add_index :share_visibilities, :user_id
+    add_index :share_visibilities, %i(shareable_id shareable_type user_id), name: :shareable_and_user_id
+    add_index :share_visibilities, %i(shareable_id shareable_type hidden user_id),
+              name: :shareable_and_hidden_and_user_id
+
+    add_foreign_key :share_visibilities, :users, name: :share_visibilities_user_id_fk, on_delete: :cascade
+  end
+
+  def down
+    add_column :share_visibilities, :contact_id, :integer
+
+    ShareVisibility.joins("INNER JOIN contacts ON share_visibilities.user_id = contacts.user_id")
+      .update_all("share_visibilities.contact_id = contacts.id")
+
+    remove_foreign_key :share_visibilities, name: :share_visibilities_user_id_fk
+
+    remove_index :share_visibilities, :user_id
+    remove_index :share_visibilities, name: :shareable_and_user_id
+    remove_index :share_visibilities, name: :shareable_and_hidden_and_user_id
+
+    remove_column :share_visibilities, :user_id
+    change_column :share_visibilities, :contact_id, :integer, null: false
+
+    add_index :share_visibilities, :contact_id, name: :index_post_visibilities_on_contact_id
+    add_index :share_visibilities, %i(shareable_id shareable_type contact_id), name: :shareable_and_contact_id
+    add_index :share_visibilities, %i(shareable_id shareable_type hidden contact_id),
+              name: :shareable_and_hidden_and_contact_id
+
+    add_foreign_key :share_visibilities, :contacts, name: :post_visibilities_contact_id_fk, on_delete: :cascade
+
+    add_column :share_visibilities, :created_at, :datetime
+    add_column :share_visibilities, :updated_at, :datetime
+  end
+
+  private
+
+  def cleanup_deleted_share_visibilities
+    ShareVisibility.joins("LEFT OUTER JOIN posts ON posts.id = share_visibilities.shareable_id")
+      .where(shareable_type: "Post").delete_all("posts.id is NULL")
+    ShareVisibility.joins("LEFT OUTER JOIN photos ON photos.id = share_visibilities.shareable_id")
+      .where(shareable_type: "Photo").delete_all("photos.id is NULL")
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 5214e27e449e6ff012c0b3074047ccd756b196f1..eb62fdfacbf552738c09e1a2825d5d237cc81394 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 20151210213023) do
+ActiveRecord::Schema.define(version: 20160225232049) do
 
   create_table "account_deletions", force: :cascade do |t|
     t.string   "diaspora_handle", limit: 255
@@ -542,18 +542,16 @@ ActiveRecord::Schema.define(version: 20151210213023) do
   add_index "services", ["user_id"], name: "index_services_on_user_id", using: :btree
 
   create_table "share_visibilities", force: :cascade do |t|
-    t.integer  "shareable_id",   limit: 4,                   null: false
-    t.datetime "created_at",                                 null: false
-    t.datetime "updated_at",                                 null: false
-    t.boolean  "hidden",                    default: false,  null: false
-    t.integer  "contact_id",     limit: 4,                   null: false
-    t.string   "shareable_type", limit: 60, default: "Post", null: false
+    t.integer "shareable_id",   limit: 4,                   null: false
+    t.boolean "hidden",                    default: false,  null: false
+    t.string  "shareable_type", limit: 60, default: "Post", null: false
+    t.integer "user_id",        limit: 4,                   null: false
   end
 
-  add_index "share_visibilities", ["contact_id"], name: "index_post_visibilities_on_contact_id", using: :btree
-  add_index "share_visibilities", ["shareable_id", "shareable_type", "contact_id"], name: "shareable_and_contact_id", using: :btree
-  add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "contact_id"], name: "shareable_and_hidden_and_contact_id", using: :btree
+  add_index "share_visibilities", ["shareable_id", "shareable_type", "hidden", "user_id"], name: "shareable_and_hidden_and_user_id", using: :btree
+  add_index "share_visibilities", ["shareable_id", "shareable_type", "user_id"], name: "shareable_and_user_id", using: :btree
   add_index "share_visibilities", ["shareable_id"], name: "index_post_visibilities_on_post_id", using: :btree
+  add_index "share_visibilities", ["user_id"], name: "index_share_visibilities_on_user_id", using: :btree
 
   create_table "simple_captcha_data", force: :cascade do |t|
     t.string   "key",        limit: 40
@@ -679,5 +677,5 @@ ActiveRecord::Schema.define(version: 20151210213023) do
   add_foreign_key "ppid", "users"
   add_foreign_key "profiles", "people", name: "profiles_person_id_fk", on_delete: :cascade
   add_foreign_key "services", "users", name: "services_user_id_fk", on_delete: :cascade
-  add_foreign_key "share_visibilities", "contacts", name: "post_visibilities_contact_id_fk", on_delete: :cascade
+  add_foreign_key "share_visibilities", "users", name: "share_visibilities_user_id_fk", on_delete: :cascade
 end