diff --git a/app/models/group.rb b/app/models/group.rb
index 215d6624fd3421d2b69ef3f8fb2c04ed2aea479f..e1c883069175227dcabf2246134efe1cc5b2c5e2 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -406,7 +406,7 @@ def visibility_level_allowed_by_parent?(level = self.visibility_level)
   end
 
   def visibility_level_allowed_by_projects?(level = self.visibility_level)
-    !projects.without_deleted.where('visibility_level > ?', level).exists?
+    !projects.not_aimed_for_deletion.where('visibility_level > ?', level).exists?
   end
 
   def visibility_level_allowed_by_sub_groups?(level = self.visibility_level)
diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb
index 0236ae9dc9e8d467dfbfe6268f8cf95c1a15622e..279d4bc194e29ac0e7c5afbc07ee67ec4ecd2c26 100644
--- a/spec/models/group_spec.rb
+++ b/spec/models/group_spec.rb
@@ -391,12 +391,19 @@
           expect(internal_group.errors[:visibility_level]).to include('private is not allowed since this group contains projects with higher visibility.')
         end
 
-        it 'is valid if higher visibility project is deleted' do
+        it 'is valid if higher visibility project is currently undergoing deletion' do
           internal_project.update_attribute(:pending_delete, true)
           internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE
 
           expect(internal_group).to be_valid
         end
+
+        it 'is valid if higher visibility project is pending deletion via marked_for_deletion_at' do
+          internal_project.update_attribute(:marked_for_deletion_at, Time.current)
+          internal_group.visibility_level = Gitlab::VisibilityLevel::PRIVATE
+
+          expect(internal_group).to be_valid
+        end
       end
 
       context 'when group has a higher visibility' do