diff --git a/plugins/discourse-presence/plugin.rb b/plugins/discourse-presence/plugin.rb
index 1383b5d245a..07a34a07a08 100644
--- a/plugins/discourse-presence/plugin.rb
+++ b/plugins/discourse-presence/plugin.rb
@@ -122,9 +122,9 @@ after_initialize do
         if topic
           guardian.ensure_can_see!(topic)
 
-          any_changes = false
-          any_changes ||= Presence::PresenceManager.remove(type, id, current_user.id)
-          any_changes ||= Presence::PresenceManager.cleanup(type, id)
+          removed = Presence::PresenceManager.remove(type, id, current_user.id)
+          any_removed = Presence::PresenceManager.cleanup(type, id)
+          any_changes = removed || any_removed
 
           users = Presence::PresenceManager.publish(type, id) if any_changes
         end
@@ -144,9 +144,9 @@ after_initialize do
         if topic
           guardian.ensure_can_see!(topic)
 
-          any_changes = false
-          any_changes ||= Presence::PresenceManager.add(type, id, current_user.id)
-          any_changes ||= Presence::PresenceManager.cleanup(type, id)
+          added = Presence::PresenceManager.add(type, id, current_user.id)
+          any_removed = Presence::PresenceManager.cleanup(type, id)
+          any_changes = added || any_removed
 
           users = Presence::PresenceManager.publish(type, id) if any_changes
 
diff --git a/plugins/discourse-presence/spec/requests/presence_controller_spec.rb b/plugins/discourse-presence/spec/requests/presence_controller_spec.rb
index 2e667e0c028..0d431567aa7 100644
--- a/plugins/discourse-presence/spec/requests/presence_controller_spec.rb
+++ b/plugins/discourse-presence/spec/requests/presence_controller_spec.rb
@@ -12,6 +12,8 @@ describe ::Presence::PresencesController do
   let(:post1) { Fabricate(:post) }
   let(:post2) { Fabricate(:post) }
 
+  let(:manager) { ::Presence::PresenceManager }
+
   after do
     $redis.del("presence:topic:#{post1.topic.id}")
     $redis.del("presence:topic:#{post2.topic.id}")
@@ -116,6 +118,24 @@ describe ::Presence::PresencesController do
       expect(messages.count).to eq(3)
     end
 
+    it 'cleans up old users when requested' do
+      freeze_time Time.zone.now do
+        manager.add('topic', post1.topic.id, user2.id)
+      end
+
+      # Anything older than 20 seconds should be cleaned up
+      freeze_time 30.seconds.from_now do
+        post '/presence/publish.json', params: {
+          current: { compose_state: 'open', action: 'reply', topic_id: post1.topic.id }, response_needed: true
+        }
+
+        data = JSON.parse(response.body)
+
+        expect(data['users'].length).to eq(1)
+      end
+
+    end
+
     describe 'when post has been deleted' do
       it 'should return an empty response' do
         post1.destroy!