diff --git a/Changelog.md b/Changelog.md
index b6ce3f0666c3ee91b4cf15ab72db1c1207b392ff..b1be0a0912ff4c88ae827b8dfaa481816489c03a 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -39,6 +39,7 @@ after you've upgraded.
 * Avoid page to jump to top after a post deletion [#7638](https://github.com/diaspora/diaspora/pull/7638)
 * Handle duplicate account deletions [#7639](https://github.com/diaspora/diaspora/pull/7639)
 * Handle duplicate account migrations [#7641](https://github.com/diaspora/diaspora/pull/7641)
+* Handle bugs related to missing users [#7632](https://github.com/diaspora/diaspora/pull/7632)
 
 ## Features
 * Ask for confirmation when leaving a submittable comment field [#7530](https://github.com/diaspora/diaspora/pull/7530)
diff --git a/app/models/notification.rb b/app/models/notification.rb
index f2dd7df9eb9743647a2339f3f745aa9e2329a68c..3f8fe719e8e4a63f0fb90c06b9a5ba8da80210d4 100644
--- a/app/models/notification.rb
+++ b/app/models/notification.rb
@@ -6,7 +6,7 @@
 #
 class Notification < ApplicationRecord
   belongs_to :recipient, class_name: "User"
-  has_many :notification_actors, dependent: :destroy
+  has_many :notification_actors, dependent: :delete_all
   has_many :actors, class_name: "Person", through: :notification_actors, source: :person
   belongs_to :target, polymorphic: true
 
diff --git a/db/migrate/20171012202650_cleanup_invalid_contacts.rb b/db/migrate/20171012202650_cleanup_invalid_contacts.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7097247231681e45ad55a5a834bd60b69f8e20fb
--- /dev/null
+++ b/db/migrate/20171012202650_cleanup_invalid_contacts.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+class CleanupInvalidContacts < ActiveRecord::Migration[5.1]
+  class Contact < ApplicationRecord
+    belongs_to :user
+    belongs_to :person
+
+    has_many :aspect_memberships, dependent: :delete_all
+
+    before_destroy :destroy_notifications
+
+    def destroy_notifications
+      Notification.where(
+        target_type:  "Person",
+        target_id:    person_id,
+        recipient_id: user_id,
+        type:         "Notifications::StartedSharing"
+      ).destroy_all
+    end
+  end
+
+  class User < ApplicationRecord
+  end
+
+  class Person < ApplicationRecord
+    belongs_to :owner, class_name: "User", optional: true
+  end
+
+  class Notification < ApplicationRecord
+    self.inheritance_column = nil
+    has_many :notification_actors, dependent: :delete_all
+  end
+
+  class NotificationActor < ApplicationRecord
+  end
+
+  class AspectMembership < ApplicationRecord
+  end
+
+  def up
+    Contact.left_outer_joins(:user).where("users.id is NULL").destroy_all
+    Contact.left_outer_joins(person: :owner).where("people.owner_id is NOT NULL").where("users.id is NULL").destroy_all
+  end
+end