diff --git a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp
index 5ee9aa5c2b..42ec30b8af 100644
--- a/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp
+++ b/Telegram/SourceFiles/info/media/info_media_inner_widget.cpp
@@ -216,11 +216,23 @@ void InnerWidget::refreshSearchField() {
 			st::infoMediaSearch);
 		_searchField->resizeToWidth(width());
 		_searchField->show();
+		search->queryChanges()
+			| rpl::start_with_next([this] {
+				scrollToSearchField();
+			}, _searchField->lifetime());
 	} else {
 		_searchField = nullptr;
 	}
 }
 
+void InnerWidget::scrollToSearchField() {
+	Expects(_searchField != nullptr);
+
+	auto top = _searchField->y();
+	auto bottom = top + _searchField->height();
+	_scrollToRequests.fire({ top, bottom });
+}
+
 object_ptr<ListWidget> InnerWidget::setupList() {
 	auto result = object_ptr<ListWidget>(
 		this,
@@ -232,7 +244,10 @@ object_ptr<ListWidget> InnerWidget::setupList() {
 	using namespace rpl::mappers;
 	result->scrollToRequests()
 		| rpl::map([widget = result.data()](int to) {
-			return widget->y() + to;
+			return Ui::ScrollToRequest {
+				widget->y() + to,
+				-1
+			};
 		})
 		| rpl::start_to_stream(
 			_scrollToRequests,
diff --git a/Telegram/SourceFiles/info/media/info_media_inner_widget.h b/Telegram/SourceFiles/info/media/info_media_inner_widget.h
index 8ceec3fd98..1cfaec6e71 100644
--- a/Telegram/SourceFiles/info/media/info_media_inner_widget.h
+++ b/Telegram/SourceFiles/info/media/info_media_inner_widget.h
@@ -21,6 +21,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 #pragma once
 
 #include "ui/rp_widget.h"
+#include "ui/widgets/scroll_area.h"
 #include "base/unique_qptr.h"
 #include "info/media/info_media_widget.h"
 #include "info/media/info_media_list_widget.h"
@@ -51,7 +52,7 @@ public:
 	void saveState(not_null<Memento*> memento);
 	void restoreState(not_null<Memento*> memento);
 
-	rpl::producer<int> scrollToRequests() const {
+	rpl::producer<Ui::ScrollToRequest> scrollToRequests() const {
 		return _scrollToRequests.events();
 	}
 	rpl::producer<SelectedItems> selectedListValue() const;
@@ -77,6 +78,7 @@ private:
 	Type type() const;
 
 	void refreshSearchField();
+	void scrollToSearchField();
 	object_ptr<ListWidget> setupList();
 
 	const not_null<Controller*> _controller;
@@ -90,7 +92,7 @@ private:
 
 	bool _inResize = false;
 
-	rpl::event_stream<int> _scrollToRequests;
+	rpl::event_stream<Ui::ScrollToRequest> _scrollToRequests;
 	rpl::event_stream<rpl::producer<SelectedItems>> _selectedLists;
 
 };
diff --git a/Telegram/SourceFiles/info/media/info_media_widget.cpp b/Telegram/SourceFiles/info/media/info_media_widget.cpp
index a0c685157b..4351cfd9a9 100644
--- a/Telegram/SourceFiles/info/media/info_media_widget.cpp
+++ b/Telegram/SourceFiles/info/media/info_media_widget.cpp
@@ -88,8 +88,8 @@ Widget::Widget(
 		this,
 		controller));
 	_inner->scrollToRequests()
-		| rpl::start_with_next([this](int skip) {
-			scrollTo({ skip, -1 });
+		| rpl::start_with_next([this](Ui::ScrollToRequest request) {
+			scrollTo(request);
 		}, _inner->lifetime());
 }
 
diff --git a/Telegram/SourceFiles/info/media/info_media_widget.h b/Telegram/SourceFiles/info/media/info_media_widget.h
index dabd2a27bc..c5bbe0ca9e 100644
--- a/Telegram/SourceFiles/info/media/info_media_widget.h
+++ b/Telegram/SourceFiles/info/media/info_media_widget.h
@@ -25,10 +25,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
 #include "storage/storage_shared_media.h"
 #include "data/data_search_controller.h"
 
-namespace Ui {
-class SearchFieldController;
-} // namespace Ui
-
 namespace Info {
 namespace Media {
 
diff --git a/Telegram/SourceFiles/ui/search_field_controller.h b/Telegram/SourceFiles/ui/search_field_controller.h
index 5e296b44f1..edc0e7aebc 100644
--- a/Telegram/SourceFiles/ui/search_field_controller.h
+++ b/Telegram/SourceFiles/ui/search_field_controller.h
@@ -51,6 +51,9 @@ public:
 	rpl::producer<QString> queryValue() const {
 		return _query.value();
 	}
+	rpl::producer<QString> queryChanges() const {
+		return _query.changes();
+	}
 
 	rpl::lifetime &lifetime() {
 		return _lifetime;