diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp
index 129eda165..a94b34cc0 100644
--- a/Telegram/SourceFiles/boxes/peer_list_box.cpp
+++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp
@@ -206,7 +206,9 @@ void PeerListBox::keyPressEvent(QKeyEvent *e) {
 		content()->selectSkipPage(height(), 1);
 	} else if (e->key() == Qt::Key_PageUp) {
 		content()->selectSkipPage(height(), -1);
-	} else if (e->key() == Qt::Key_Escape && _select && !_select->entity()->getQuery().isEmpty()) {
+	} else if (e->key() == Qt::Key_Escape
+			&& _select
+			&& !_select->entity()->getQuery().isEmpty()) {
 		_select->entity()->clearQuery();
 	} else {
 		BoxContent::keyPressEvent(e);
@@ -215,7 +217,16 @@ void PeerListBox::keyPressEvent(QKeyEvent *e) {
 
 void PeerListBox::searchQueryChanged(const QString &query) {
 	scrollToY(0);
-	content()->searchQueryChanged(query);
+	const auto isEmpty = content()->searchQueryChanged(query);
+	if (_specialTabsMode.enabled) {
+		_specialTabsMode.searchIsActive = !isEmpty;
+		if (_specialTabsMode.searchIsActive) {
+			_specialTabsMode.topSkip = _addedTopScrollSkip;
+			setAddedTopScrollSkip(0);
+		} else {
+			setAddedTopScrollSkip(_specialTabsMode.topSkip);
+		}
+	}
 }
 
 void PeerListBox::resizeEvent(QResizeEvent *e) {
@@ -547,8 +558,13 @@ rpl::producer<int> PeerListBox::multiSelectHeightValue() const {
 	return _select ? _select->heightValue() : rpl::single(0);
 }
 
-void PeerListBox::setIgnoreHiddenRowsOnSearch(bool value) {
+void PeerListBox::setSpecialTabMode(bool value) {
 	content()->setIgnoreHiddenRowsOnSearch(value);
+	if (value) {
+		_specialTabsMode.enabled = true;
+	} else {
+		_specialTabsMode = {};
+	}
 }
 
 PeerListRow::PeerListRow(not_null<PeerData*> peer)
@@ -2060,7 +2076,7 @@ void PeerListContent::checkScrollForPreload() {
 	}
 }
 
-void PeerListContent::searchQueryChanged(QString query) {
+PeerListContent::IsEmpty PeerListContent::searchQueryChanged(QString query) {
 	const auto searchWordsList = TextUtilities::PrepareSearchWords(query);
 	const auto normalizedQuery = searchWordsList.join(' ');
 	if (_ignoreHiddenRowsOnSearch && !normalizedQuery.isEmpty()) {
@@ -2117,6 +2133,7 @@ void PeerListContent::searchQueryChanged(QString query) {
 		}
 		refreshRows();
 	}
+	return _normalizedSearchQuery.isEmpty();
 }
 
 std::unique_ptr<PeerListState> PeerListContent::saveState() const {
diff --git a/Telegram/SourceFiles/boxes/peer_list_box.h b/Telegram/SourceFiles/boxes/peer_list_box.h
index 31b8f348a..bd71470a7 100644
--- a/Telegram/SourceFiles/boxes/peer_list_box.h
+++ b/Telegram/SourceFiles/boxes/peer_list_box.h
@@ -652,7 +652,8 @@ public:
 	[[nodiscard]] bool hasPressed() const;
 	void clearSelection();
 
-	void searchQueryChanged(QString query);
+	using IsEmpty = bool;
+	IsEmpty searchQueryChanged(QString query);
 	bool submitted();
 
 	PeerListRowId updateFromParentDrag(QPoint globalPosition);
@@ -1107,7 +1108,7 @@ public:
 	[[nodiscard]] std::vector<not_null<PeerData*>> collectSelectedRows();
 	[[nodiscard]] rpl::producer<int> multiSelectHeightValue() const;
 
-	void setIgnoreHiddenRowsOnSearch(bool value);
+	void setSpecialTabMode(bool value);
 
 	void peerListSetTitle(rpl::producer<QString> title) override {
 		setTitle(std::move(title));
@@ -1174,4 +1175,11 @@ private:
 	bool _scrollBottomFixed = false;
 	int _addedTopScrollSkip = 0;
 
+	struct SpecialTabsMode final {
+		bool enabled = false;
+		bool searchIsActive = false;
+		int topSkip = 0;
+	};
+	SpecialTabsMode _specialTabsMode;
+
 };
diff --git a/Telegram/SourceFiles/window/window_peer_menu.cpp b/Telegram/SourceFiles/window/window_peer_menu.cpp
index 78b3e2a2c..068708c4e 100644
--- a/Telegram/SourceFiles/window/window_peer_menu.cpp
+++ b/Telegram/SourceFiles/window/window_peer_menu.cpp
@@ -2053,7 +2053,7 @@ QPointer<Ui::BoxContent> ShowForwardMessagesBox(
 		auto controller = std::make_unique<Controller>(session);
 		const auto controllerRaw = controller.get();
 		auto init = [=](not_null<PeerListBox*> box) {
-			box->setIgnoreHiddenRowsOnSearch(true);
+			box->setSpecialTabMode(true);
 			auto applyFilter = [=](FilterId id) {
 				box->scrollToY(0);
 				auto &filters = session->data().chatsFilters();
@@ -2114,6 +2114,7 @@ QPointer<Ui::BoxContent> ShowForwardMessagesBox(
 				box,
 				session,
 				std::move(applyFilter));
+			chatsFilters->lower();
 			chatsFilters->heightValue() | rpl::start_with_next([box](int h) {
 				box->setAddedTopScrollSkip(h);
 			}, box->lifetime());