diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb
index 7d66e4d11..890e2871d 100644
--- a/app/controllers/list_controller.rb
+++ b/app/controllers/list_controller.rb
@@ -260,6 +260,7 @@ class ListController < ApplicationController
       min_posts: params[:min_posts],
       max_posts: params[:max_posts],
       status: params[:status],
+      bookmarked: params[:bookmarked].present?,
       state: params[:state],
       search: params[:search]
     }
diff --git a/lib/topic_query.rb b/lib/topic_query.rb
index 68c109cb2..ccb876927 100644
--- a/lib/topic_query.rb
+++ b/lib/topic_query.rb
@@ -26,6 +26,7 @@ class TopicQuery
                      state
                      search
                      slow_platform
+                     bookmarked
                      ).map(&:to_sym)
 
   # Maps `order` to a columns in `topics`
@@ -310,6 +311,18 @@ class TopicQuery
         end
       end
 
+      if options[:bookmarked] && @user
+        result = result.where('topics.id IN (SELECT pp.topic_id
+                                FROM post_actions pa
+                                JOIN posts pp ON pp.id = pa.post_id
+                                WHERE pa.user_id = :user_id AND
+                                      pa.post_action_type_id = :bookmarked AND
+                                      pa.deleted_at IS NULL
+                             )', user_id: @user.id,
+                                 bookmarked: PostActionType.types[:bookmark]
+                             )
+      end
+
       result = result.where('topics.deleted_at IS NULL') if require_deleted_clause
       result = result.where('topics.posts_count <= ?', options[:max_posts]) if options[:max_posts].present?
       result = result.where('topics.posts_count >= ?', options[:min_posts]) if options[:min_posts].present?