diff --git a/app/models/status.rb b/app/models/status.rb
index e6fbca59ab..99f55ea52a 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -543,15 +543,17 @@ class Status < ApplicationRecord
   def set_searchability
     return if searchability.nil?
 
-    if visibility == 'public' || visibility == 'public_unlisted' || visibility == 'login' || (visibility == 'unlisted' && account.local?)
-      self.searchability = [Status.searchabilities[searchability], Status.visibilities['public']].max
-    elsif visibility == 'limited'
-      self.searchability = Status.searchabilities['limited']
-    else
-      s = [Status.searchabilities[searchability], Status.visibilities[visibility] - 1].max
-      s = [s, 3].min
-      self.searchability = s
-    end
+    self.searchability = if %w(public public_unlisted login unlisted).include?(visibility)
+                           searchability
+                         elsif visibility == 'limited'
+                           :limited
+                         elsif visibility == 'private'
+                           searchability == 'public' ? :private : searchability
+                         elsif visibility == 'direct'
+                           searchability == 'limited' ? :limited : :direct
+                         else
+                           :direct
+                         end
   end
 
   def set_conversation