diff --git a/Telegram/Resources/basic.style b/Telegram/Resources/basic.style
index 0334fdf67..27f407c81 100644
--- a/Telegram/Resources/basic.style
+++ b/Telegram/Resources/basic.style
@@ -110,9 +110,11 @@ boxBlueCloseDuration: 150;
 boxBlueShadow: sprite(132px, 108px, 1px, 4px);
 
 boxButtonFont: font(boxFontSize semibold);
-defaultBoxButton: BoxButton {
+defaultBoxButton: RoundButton {
 	textFg: #2f9fea;
 	textFgOver: #2f9fea;
+	secondaryTextFg: #2f9fea;
+	secondaryTextFgOver: #2f9fea;
 	textBg: white;
 	textBgOver: #edf7ff;
 
@@ -125,10 +127,10 @@ defaultBoxButton: BoxButton {
 	font: boxButtonFont;
 	duration: 200;
 }
-cancelBoxButton: BoxButton(defaultBoxButton) {
+cancelBoxButton: RoundButton(defaultBoxButton) {
 	textFg: #aeaeae;
 }
-attentionBoxButton: BoxButton(defaultBoxButton) {
+attentionBoxButton: RoundButton(defaultBoxButton) {
 	textFg: #ea4b2f;
 	textFgOver: #ea4b2f;
 	textBgOver: #fff0ed;
@@ -985,10 +987,12 @@ topBarSearch: iconedButton(btnDefIconed) {
 	height: topBarHeight;
 }
 topBarMinPadding: 5px;
-topBarButton: BoxButton {
+topBarButton: RoundButton {
 	textFg: #0084c4;
 	textFgOver: #0084c4;
-	textBg: white;
+	secondaryTextFg: #0084c4;
+	secondaryTextFgOver: #0084c4;
+	textBg: windowBg;
 	textBgOver: #edf4f7;
 
 	width: -22px;
@@ -1000,20 +1004,34 @@ topBarButton: BoxButton {
 	font: font(fsize);
 	duration: 200;
 }
-topBarClearButton: BoxButton(topBarButton) {
-	padding: margins(8px, 14px, 8px, 14px);
-}
-topBarActionButton: flatButton(btnDefNext, btnDefBig) {
-	textTop: 8px;
-	overTextTop: 8px;
-	downTextTop: 9px;
+defaultActiveButton: RoundButton {
+	textFg: #ffffff;
+	textFgOver: #ffffff;
+	secondaryTextFg: #cceeff;
+	secondaryTextFgOver: #cceeff;
+	textBg: windowActiveBg;
+	textBgOver: windowActiveBg;
 
-	font: font(fsize);
-	overFont: font(fsize);
-	width: 101px;
+	secondarySkip: 7px;
+
+	width: -34px;
 	height: 34px;
+	padding: margins(0px, 0px, 0px, 0px);
+
+	textTop: 8px;
+
+	font: semiboldFont;
+	duration: 200;
 }
-topBarActionSkip: 13px;
+topBarClearButton: RoundButton(defaultActiveButton) {
+	textFg: semiboldButtonBlueText;
+	textFgOver: semiboldButtonBlueText;
+	textBg: #ffffff;
+	textBgOver: #f2f7fa;
+
+	width: -18px;
+}
+topBarActionSkip: 10px;
 
 activeFadeInDuration: 500;
 activeFadeOutDuration: 3000;
@@ -1997,7 +2015,7 @@ botKbScroll: flatScroll(solidScroll) {
 	deltax: 3px;
 	width: 10px;
 }
-switchPmButton: BoxButton(defaultBoxButton) {
+switchPmButton: RoundButton(defaultBoxButton) {
 	width: 320px;
 	height: 34px;
 	textTop: 7px;
diff --git a/Telegram/Resources/basic_types.style b/Telegram/Resources/basic_types.style
index c8e1fa0f4..a5921d350 100644
--- a/Telegram/Resources/basic_types.style
+++ b/Telegram/Resources/basic_types.style
@@ -309,12 +309,16 @@ botKeyboardButton {
 	downTextTop: pixels;
 }
 
-BoxButton {
+RoundButton {
 	textFg: color;
 	textFgOver: color;
 	textBg: color; // rect of textBg with rounded rect of textBgOver upon it
 	textBgOver: color;
 
+	secondaryTextFg: color;
+	secondaryTextFgOver: color;
+	secondarySkip: pixels;
+
 	width: pixels;
 	height: pixels;
 	padding: margins;
diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp
index db82cbced..83ce30643 100644
--- a/Telegram/SourceFiles/boxes/confirmbox.cpp
+++ b/Telegram/SourceFiles/boxes/confirmbox.cpp
@@ -35,7 +35,7 @@ TextParseOptions _confirmBoxTextOptions = {
 	Qt::LayoutDirectionAuto, // dir
 };
 
-ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, const QString &cancelText, const style::BoxButton &cancelStyle) : AbstractBox(st::boxWidth)
+ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::RoundButton &doneStyle, const QString &cancelText, const style::RoundButton &cancelStyle) : AbstractBox(st::boxWidth)
 , _informative(false)
 , _text(100)
 , _confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle)
@@ -43,7 +43,7 @@ ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style
 	init(text);
 }
 
-ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative) : AbstractBox(st::boxWidth)
+ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::RoundButton &doneStyle, bool informative) : AbstractBox(st::boxWidth)
 , _informative(true)
 , _text(100)
 , _confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle)
diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h
index f162debdd..59f27336d 100644
--- a/Telegram/SourceFiles/boxes/confirmbox.h
+++ b/Telegram/SourceFiles/boxes/confirmbox.h
@@ -29,7 +29,7 @@ class ConfirmBox : public AbstractBox, public ClickHandlerHost {
 
 public:
 
-	ConfirmBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton, const QString &cancelText = QString(), const style::BoxButton &cancelStyle = st::cancelBoxButton);
+	ConfirmBox(const QString &text, const QString &doneText = QString(), const style::RoundButton &doneStyle = st::defaultBoxButton, const QString &cancelText = QString(), const style::RoundButton &cancelStyle = st::cancelBoxButton);
 	void keyPressEvent(QKeyEvent *e);
 	void paintEvent(QPaintEvent *e);
 	void resizeEvent(QResizeEvent *e);
@@ -61,7 +61,7 @@ protected:
 
 private:
 
-	ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative);
+	ConfirmBox(const QString &text, const QString &doneText, const style::RoundButton &doneStyle, bool informative);
 	friend class InformBox;
 
 	void init(const QString &text);
@@ -80,7 +80,7 @@ private:
 
 class InformBox : public ConfirmBox {
 public:
-	InformBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton) : ConfirmBox(text, doneText, doneStyle, true) {
+	InformBox(const QString &text, const QString &doneText = QString(), const style::RoundButton &doneStyle = st::defaultBoxButton) : ConfirmBox(text, doneText, doneStyle, true) {
 	}
 };
 
diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style
index 12f7342e9..cc9afe6d6 100644
--- a/Telegram/SourceFiles/dialogs/dialogs.style
+++ b/Telegram/SourceFiles/dialogs/dialogs.style
@@ -89,13 +89,15 @@ dialogsTextStyleActive: textStyle(dialogsTextStyle) {
 dialogsNewChatIcon: icon {
 	{ "dialogs_new_chat", #b7b7b7, point(9px, 10px) }
 };
-dialogsNewChatButton: BoxButton {
+dialogsNewChatButton: RoundButton {
 	width: 36px;
 	height: 36px;
 	icon: dialogsNewChatIcon;
 
 	textFg: transparent;
 	textFgOver: transparent;
+	secondaryTextFg: transparent;
+	secondaryTextFgOver: transparent;
 	textBg: transparent;
 	textBgOver: transparent;
 }
diff --git a/Telegram/SourceFiles/profile/profile.style b/Telegram/SourceFiles/profile/profile.style
index 0e54f85a8..574583292 100644
--- a/Telegram/SourceFiles/profile/profile.style
+++ b/Telegram/SourceFiles/profile/profile.style
@@ -32,7 +32,7 @@ profileTopBarBackIconPosition: point(15px, 20px);
 profileTopBarBackFont: font(14px);
 profileTopBarBackFg: #1485c2;
 profileTopBarBackPosition: point(32px, 17px);
-profileFixedBarButton: BoxButton(topBarButton) {
+profileFixedBarButton: RoundButton(topBarButton) {
 }
 
 profileMarginTop: 13px;
@@ -61,22 +61,9 @@ profileMarginBottom: 30px;
 profileButtonLeft: 27px;
 profileButtonTop: 88px;
 profileButtonSkip: 10px;
-profilePrimaryButton: BoxButton {
-	textFg: #ffffff;
-	textFgOver: #ffffff;
-	textBg: windowActiveBg;
-	textBgOver: windowActiveBg;
-
-	width: -34px;
-	height: 34px;
-	padding: margins(0px, 0px, 0px, 0px);
-
-	textTop: 8px;
-
-	font: semiboldFont;
-	duration: 200;
+profilePrimaryButton: RoundButton(defaultActiveButton) {
 }
-profileSecondaryButton: BoxButton(profilePrimaryButton) {
+profileSecondaryButton: RoundButton(profilePrimaryButton) {
 	textFg: semiboldButtonBlueText;
 	textFgOver: semiboldButtonBlueText;
 	textBg: #ffffff;
@@ -85,7 +72,7 @@ profileSecondaryButton: BoxButton(profilePrimaryButton) {
 profileAddMemberIcon: icon {
 	{ "profile_add_member", windowActiveBg, point(20px, 10px) },
 };
-profileAddMemberButton: BoxButton(profileSecondaryButton) {
+profileAddMemberButton: RoundButton(profileSecondaryButton) {
 	width: 62px;
 	icon: profileAddMemberIcon;
 }
diff --git a/Telegram/SourceFiles/profile/profile_cover.cpp b/Telegram/SourceFiles/profile/profile_cover.cpp
index b90c5fb06..431d00e08 100644
--- a/Telegram/SourceFiles/profile/profile_cover.cpp
+++ b/Telegram/SourceFiles/profile/profile_cover.cpp
@@ -414,7 +414,7 @@ void CoverWidget::clearButtons() {
 	}
 }
 
-void CoverWidget::addButton(const QString &text, const char *slot, const style::BoxButton *replacementStyle) {
+void CoverWidget::addButton(const QString &text, const char *slot, const style::RoundButton *replacementStyle) {
 	auto &buttonStyle = _buttons.isEmpty() ? st::profilePrimaryButton : st::profileSecondaryButton;
 	auto button = new Ui::RoundButton(this, text, buttonStyle);
 	button->setTextTransform(Ui::RoundButton::TextTransform::ToUpper);
diff --git a/Telegram/SourceFiles/profile/profile_cover.h b/Telegram/SourceFiles/profile/profile_cover.h
index f66f67b5d..ea92fe9da 100644
--- a/Telegram/SourceFiles/profile/profile_cover.h
+++ b/Telegram/SourceFiles/profile/profile_cover.h
@@ -95,7 +95,7 @@ private:
 	void setChannelButtons();
 
 	void clearButtons();
-	void addButton(const QString &text, const char *slot, const style::BoxButton *replacementStyle = nullptr);
+	void addButton(const QString &text, const char *slot, const style::RoundButton *replacementStyle = nullptr);
 
 	void paintDivider(Painter &p);
 
diff --git a/Telegram/SourceFiles/ui/buttons/round_button.cpp b/Telegram/SourceFiles/ui/buttons/round_button.cpp
index 3897b5a02..947167c06 100644
--- a/Telegram/SourceFiles/ui/buttons/round_button.cpp
+++ b/Telegram/SourceFiles/ui/buttons/round_button.cpp
@@ -23,13 +23,14 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
 
 namespace Ui {
 
-RoundButton::RoundButton(QWidget *parent, const QString &text, const style::BoxButton &st) : Button(parent)
+RoundButton::RoundButton(QWidget *parent, const QString &text, const style::RoundButton &st) : Button(parent)
 , _text(text)
 , _fullText(text)
 , _textWidth(st.font->width(_text))
 , _st(st)
 , a_textBgOverOpacity(0)
 , a_textFg(st.textFg->c)
+, a_secondaryTextFg(st.secondaryTextFg->c)
 , _a_over(animation(this, &RoundButton::step_over)) {
 	resizeToText();
 
@@ -46,6 +47,11 @@ void RoundButton::setText(const QString &text) {
 	updateText();
 }
 
+void RoundButton::setSecondaryText(const QString &secondaryText) {
+	_fullSecondaryText = secondaryText;
+	updateText();
+}
+
 void RoundButton::setFullWidth(int newFullWidth) {
 	_fullWidthOverride = newFullWidth;
 	resizeToText();
@@ -54,58 +60,79 @@ void RoundButton::setFullWidth(int newFullWidth) {
 void RoundButton::updateText() {
 	if (_transform == TextTransform::ToUpper) {
 		_text = _fullText.toUpper();
+		_secondaryText = _fullSecondaryText.toUpper();
 	} else {
 		_text = _fullText;
+		_secondaryText = _fullSecondaryText;
 	}
-	_textWidth = _st.font->width(_text);
+	_textWidth = _text.isEmpty() ? 0 : _st.font->width(_text);
+	_secondaryTextWidth = _secondaryText.isEmpty() ? 0 : _st.font->width(_secondaryText);
+
 	resizeToText();
 }
 
-int RoundButton::textWidth() const {
-	return _textWidth;
-}
-
 void RoundButton::resizeToText() {
+	int innerWidth = contentWidth();
 	if (_fullWidthOverride < 0) {
-		resize(_textWidth - _fullWidthOverride, _st.height + _st.padding.top() + _st.padding.bottom());
+		resize(innerWidth - _fullWidthOverride, _st.height + _st.padding.top() + _st.padding.bottom());
 	} else if (_st.width <= 0) {
-		resize(_textWidth - _st.width + _st.padding.left() + _st.padding.right(), _st.height + _st.padding.top() + _st.padding.bottom());
+		resize(innerWidth - _st.width + _st.padding.left() + _st.padding.right(), _st.height + _st.padding.top() + _st.padding.bottom());
 	} else {
-		if (_st.width < _textWidth + (_st.height - _st.font->height)) {
+		if (_st.width < innerWidth + (_st.height - _st.font->height)) {
 			_text = _st.font->elided(_fullText, qMax(_st.width - (_st.height - _st.font->height), 1));
-			_textWidth = _st.font->width(_text);
+			innerWidth = _st.font->width(_text);
 		}
 		resize(_st.width + _st.padding.left() + _st.padding.right(), _st.height + _st.padding.top() + _st.padding.bottom());
 	}
 }
 
+int RoundButton::contentWidth() const {
+	int result = _textWidth + _secondaryTextWidth;
+	if (_textWidth > 0 && _secondaryTextWidth > 0) {
+		result += _st.secondarySkip;
+	}
+	return result;
+}
+
 void RoundButton::paintEvent(QPaintEvent *e) {
 	Painter p(this);
 
+	int innerWidth = contentWidth();
 	auto rounded = rtlrect(rect().marginsRemoved(_st.padding), width());
 	if (_fullWidthOverride < 0) {
-		rounded = QRect(-_fullWidthOverride / 4, rounded.top(), _textWidth - _fullWidthOverride / 2, rounded.height());
+		rounded = QRect(0, rounded.top(), innerWidth - _fullWidthOverride, rounded.height());
 	}
 	App::roundRect(p, rounded, _st.textBg);
 
-	float64 o = a_textBgOverOpacity.current();
+	auto o = a_textBgOverOpacity.current();
 	if (o > 0) {
 		p.setOpacity(o);
 		App::roundRect(p, rounded, _st.textBgOver);
 		p.setOpacity(1);
 	}
+
+	p.setFont(_st.font);
+	int textLeft = _st.padding.left() + ((width() - innerWidth - _st.padding.left() - _st.padding.right()) / 2);
+	if (_fullWidthOverride < 0) {
+		textLeft = -_fullWidthOverride / 2;
+	}
+	int textTop = _st.padding.top() + _st.textTop;
 	if (!_text.isEmpty()) {
 		if (o > 0) {
 			p.setPen(a_textFg.current());
 		} else {
 			p.setPen(_st.textFg);
 		}
-		p.setFont(_st.font);
-		int textLeft = _st.padding.left() + ((width() - _textWidth - _st.padding.left() - _st.padding.right()) / 2);
-		if (_fullWidthOverride < 0) {
-			textLeft = -_fullWidthOverride / 2;
+		p.drawTextLeft(textLeft, textTop, width(), _text);
+	}
+	if (!_secondaryText.isEmpty()) {
+		textLeft += _textWidth + (_textWidth ? _st.secondarySkip : 0);
+		if (o > 0) {
+			p.setPen(a_secondaryTextFg.current());
+		} else {
+			p.setPen(_st.secondaryTextFg);
 		}
-		p.drawTextLeft(textLeft, _st.padding.top() + _st.textTop, width(), _text);
+		p.drawTextLeft(textLeft, textTop, width(), _secondaryText);
 	}
 	_st.icon.paint(p, QPoint(_st.padding.left(), _st.padding.right()), width());
 }
@@ -115,24 +142,29 @@ void RoundButton::step_over(float64 ms, bool timer) {
 	if (dt >= 1) {
 		_a_over.stop();
 		a_textFg.finish();
+		a_secondaryTextFg.finish();
 		a_textBgOverOpacity.finish();
 	} else {
 		a_textFg.update(dt, anim::linear);
+		a_secondaryTextFg.update(dt, anim::linear);
 		a_textBgOverOpacity.update(dt, anim::linear);
 	}
 	if (timer) update();
 }
 
 void RoundButton::onStateChanged(int oldState, ButtonStateChangeSource source) {
-	float64 textBgOverOpacity = (_state & StateOver) ? 1 : 0;
-	style::color textFg = (_state & StateOver) ? (_st.textFgOver) : _st.textFg;
+	auto textBgOverOpacity = (_state & StateOver) ? 1. : 0.;
+	auto textFg = (_state & StateOver) ? (_st.textFgOver) : _st.textFg;
+	auto secondaryTextFg = (_state & StateOver) ? (_st.secondaryTextFgOver) : _st.secondaryTextFg;
 
 	a_textBgOverOpacity.start(textBgOverOpacity);
 	a_textFg.start(textFg->c);
+	a_secondaryTextFg.start(secondaryTextFg->c);
 	if (source == ButtonByUser || source == ButtonByPress || true) {
 		_a_over.stop();
-		a_textBgOverOpacity.finish();
 		a_textFg.finish();
+		a_secondaryTextFg.finish();
+		a_textBgOverOpacity.finish();
 		update();
 	} else {
 		_a_over.start();
diff --git a/Telegram/SourceFiles/ui/buttons/round_button.h b/Telegram/SourceFiles/ui/buttons/round_button.h
index b7c9d51a4..e39669c42 100644
--- a/Telegram/SourceFiles/ui/buttons/round_button.h
+++ b/Telegram/SourceFiles/ui/buttons/round_button.h
@@ -26,10 +26,12 @@ namespace Ui {
 
 class RoundButton : public Button {
 public:
-	RoundButton(QWidget *parent, const QString &text, const style::BoxButton &st);
+	RoundButton(QWidget *parent, const QString &text, const style::RoundButton &st);
 
 	void setText(const QString &text);
-	int textWidth() const;
+	void setSecondaryText(const QString &secondaryText);
+
+	int contentWidth() const;
 
 	void setFullWidth(int newFullWidth);
 
@@ -52,12 +54,16 @@ private:
 
 	QString _text, _fullText;
 	int _textWidth;
+
+	QString _secondaryText, _fullSecondaryText;
+	int _secondaryTextWidth = 0;
+
 	int _fullWidthOverride = 0;
 
-	const style::BoxButton &_st;
+	const style::RoundButton &_st;
 
 	anim::fvalue a_textBgOverOpacity;
-	anim::cvalue a_textFg;
+	anim::cvalue a_textFg, a_secondaryTextFg;
 	Animation _a_over;
 
 	TextTransform _transform = TextTransform::NoTransform;
diff --git a/Telegram/SourceFiles/ui/flatbutton.cpp b/Telegram/SourceFiles/ui/flatbutton.cpp
index ea71b1cee..2ead5cbce 100644
--- a/Telegram/SourceFiles/ui/flatbutton.cpp
+++ b/Telegram/SourceFiles/ui/flatbutton.cpp
@@ -319,7 +319,7 @@ void EmojiButton::setLoading(bool loading) {
 	}
 }
 
-BoxButton::BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st) : Button(parent)
+BoxButton::BoxButton(QWidget *parent, const QString &text, const style::RoundButton &st) : Button(parent)
 , _text(text.toUpper())
 , _fullText(text.toUpper())
 , _textWidth(st.font->width(_text))
diff --git a/Telegram/SourceFiles/ui/flatbutton.h b/Telegram/SourceFiles/ui/flatbutton.h
index 3adbe5a1d..39e3a5f6b 100644
--- a/Telegram/SourceFiles/ui/flatbutton.h
+++ b/Telegram/SourceFiles/ui/flatbutton.h
@@ -158,7 +158,7 @@ class BoxButton : public Button {
 	Q_OBJECT
 
 public:
-	BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st);
+	BoxButton(QWidget *parent, const QString &text, const style::RoundButton &st);
 
 	void setText(const QString &text);
 	void paintEvent(QPaintEvent *e) override;
@@ -174,7 +174,7 @@ private:
 	QString _text, _fullText;
 	int32 _textWidth;
 
-	const style::BoxButton &_st;
+	const style::RoundButton &_st;
 
 	anim::fvalue a_textBgOverOpacity;
 	anim::cvalue a_textFg;
diff --git a/Telegram/SourceFiles/window/top_bar_widget.cpp b/Telegram/SourceFiles/window/top_bar_widget.cpp
index 2cb04a169..d21847fe2 100644
--- a/Telegram/SourceFiles/window/top_bar_widget.cpp
+++ b/Telegram/SourceFiles/window/top_bar_widget.cpp
@@ -33,22 +33,16 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
 namespace Window {
 
 TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w)
-, a_over(0)
 , _a_appearance(animation(this, &TopBarWidget::step_appearance))
-, _selPeer(0)
-, _selCount(0)
-, _canDelete(false)
-, _selStrLeft((-st::topBarClearButton.width + st::topBarClearButton.padding.left() + st::topBarClearButton.padding.right()) / 2)
-, _selStrWidth(0)
-, _animating(false)
 , _clearSelection(this, lang(lng_selected_clear), st::topBarClearButton)
-, _forward(this, lang(lng_selected_forward), st::topBarActionButton)
-, _delete(this, lang(lng_selected_delete), st::topBarActionButton)
-, _selectionButtonsWidth(_clearSelection->width() + _forward->width() + _delete->width())
-, _forwardDeleteWidth(qMax(_forward->textWidth(), _delete->textWidth()))
+, _forward(this, lang(lng_selected_forward), st::defaultActiveButton)
+, _delete(this, lang(lng_selected_delete), st::defaultActiveButton)
 , _info(this, nullptr, st::infoButton)
 , _mediaType(this, lang(lng_media_type), st::topBarButton)
 , _search(this, st::topBarSearch) {
+	_clearSelection->setTextTransform(Ui::RoundButton::TextTransform::ToUpper);
+	_forward->setTextTransform(Ui::RoundButton::TextTransform::ToUpper);
+	_delete->setTextTransform(Ui::RoundButton::TextTransform::ToUpper);
 
 	connect(_forward, SIGNAL(clicked()), this, SLOT(onForwardSelection()));
 	connect(_delete, SIGNAL(clicked()), this, SLOT(onDeleteSelection()));
@@ -151,10 +145,6 @@ void TopBarWidget::paintEvent(QPaintEvent *e) {
 		}
 		main()->paintTopBar(p, a_over.current(), decreaseWidth);
 		p.restore();
-	} else {
-		p.setFont(st::linkFont);
-		p.setPen(st::btnDefLink.color);
-		p.drawText(_selStrLeft, st::topBarClearButton.padding.top() + st::topBarClearButton.textTop + st::linkFont->ascent, _selStr);
 	}
 }
 
@@ -165,60 +155,24 @@ void TopBarWidget::mousePressEvent(QMouseEvent *e) {
 }
 
 void TopBarWidget::resizeEvent(QResizeEvent *e) {
-	int32 r = width();
-	if (!_forward->isHidden() || !_delete->isHidden()) {
-		int fullW = r - (_selectionButtonsWidth + (_selStrWidth - st::topBarClearButton.width + st::topBarClearButton.padding.left() + st::topBarClearButton.padding.right()) + st::topBarActionSkip);
-		int selectedClearWidth = st::topBarClearButton.width - st::topBarClearButton.padding.left() - st::topBarClearButton.padding.right();
-		int forwardDeleteWidth = st::topBarActionButton.width - _forwardDeleteWidth;
-		int skip = st::topBarActionSkip;
-		while (fullW < 0) {
-			int fit = 0;
-			if (selectedClearWidth < -2 * (st::topBarMinPadding + 1)) {
-				fullW += 4;
-				selectedClearWidth += 2;
-			} else if (selectedClearWidth < -2 * st::topBarMinPadding) {
-				fullW += (-2 * st::topBarMinPadding - selectedClearWidth) * 2;
-				selectedClearWidth = -2 * st::topBarMinPadding;
-			} else {
-				++fit;
-			}
-			if (fullW >= 0) break;
+	int r = width();
 
-			if (forwardDeleteWidth > 2 * (st::topBarMinPadding + 1)) {
-				fullW += 4;
-				forwardDeleteWidth -= 2;
-			} else if (forwardDeleteWidth > 2 * st::topBarMinPadding) {
-				fullW += (forwardDeleteWidth - 2 * st::topBarMinPadding) * 2;
-				forwardDeleteWidth = 2 * st::topBarMinPadding;
-			} else {
-				++fit;
-			}
-			if (fullW >= 0) break;
+	int buttonsLeft = st::topBarActionSkip + (Adaptive::OneColumn() ? 0 : st::lineWidth);
+	int buttonsWidth = _forward->contentWidth() + _delete->contentWidth() + _clearSelection->width();
+	buttonsWidth += buttonsLeft + st::topBarActionSkip * 3;
 
-			if (skip > st::topBarMinPadding) {
-				--skip;
-				++fullW;
-			} else {
-				++fit;
-			}
-			if (fullW >= 0 || fit >= 3) break;
-		}
-		_clearSelection->setFullWidth(selectedClearWidth);
-		_forward->setWidth(_forwardDeleteWidth + forwardDeleteWidth);
-		_delete->setWidth(_forwardDeleteWidth + forwardDeleteWidth);
-		_selStrLeft = -selectedClearWidth / 2;
+	int widthLeft = qMin(r - buttonsWidth, -2 * st::defaultActiveButton.width);
+	_forward->setFullWidth(-(widthLeft / 2));
+	_delete->setFullWidth(-(widthLeft / 2));
+
+	int buttonsTop = (height() - _forward->height()) / 2;
+
+	_forward->moveToLeft(buttonsLeft, buttonsTop);
+	buttonsLeft += _forward->width() + st::topBarActionSkip;
+
+	_delete->moveToLeft(buttonsLeft, buttonsTop);
+	_clearSelection->moveToRight(st::topBarActionSkip, buttonsTop);
 
-		int32 availX = _selStrLeft + _selStrWidth, availW = r - (_clearSelection->width() + selectedClearWidth / 2) - availX;
-		if (_forward->isHidden()) {
-			_delete->move(availX + (availW - _delete->width()) / 2, (st::topBarHeight - _forward->height()) / 2);
-		} else if (_delete->isHidden()) {
-			_forward->move(availX + (availW - _forward->width()) / 2, (st::topBarHeight - _forward->height()) / 2);
-		} else {
-			_forward->move(availX + (availW - _forward->width() - _delete->width() - skip) / 2, (st::topBarHeight - _forward->height()) / 2);
-			_delete->move(availX + (availW + _forward->width() - _delete->width() + skip) / 2, (st::topBarHeight - _forward->height()) / 2);
-		}
-		_clearSelection->move(r -= _clearSelection->width(), 0);
-	}
 	if (!_info->isHidden()) _info->move(r -= _info->width(), 0);
 	if (!_mediaType->isHidden()) _mediaType->move(r -= _mediaType->width(), 0);
 	_search->move(width() - (_info->isHidden() ? st::topBarForwardPadding.right() : _info->width()) - _search->width(), 0);
@@ -246,7 +200,7 @@ void TopBarWidget::stopAnim() {
 
 void TopBarWidget::showAll() {
 	if (_animating) {
-		resizeEvent(0);
+		resizeEvent(nullptr);
 		return;
 	}
 	PeerData *h = App::main() ? App::main()->historyPeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0;
@@ -317,9 +271,11 @@ void TopBarWidget::updateMembersShowArea() {
 void TopBarWidget::showSelected(uint32 selCount, bool canDelete) {
 	_selPeer = App::main()->overviewPeer() ? App::main()->overviewPeer() : App::main()->peer();
 	_selCount = selCount;
-	_canDelete = canDelete;
-	_selStr = (_selCount > 0) ? lng_selected_count(lt_count, _selCount) : QString();
-	_selStrWidth = st::btnDefLink.font->width(_selStr);
+	if (_selCount > 0) {
+		_canDelete = canDelete;
+		_forward->setSecondaryText(QString::number(_selCount));
+		_delete->setSecondaryText(QString::number(_selCount));
+	}
 	setCursor(_selCount ? style::cur_default : style::cur_pointer);
 
 	updateMembersShowArea();
diff --git a/Telegram/SourceFiles/window/top_bar_widget.h b/Telegram/SourceFiles/window/top_bar_widget.h
index 696d1afd2..0b8500acd 100644
--- a/Telegram/SourceFiles/window/top_bar_widget.h
+++ b/Telegram/SourceFiles/window/top_bar_widget.h
@@ -26,7 +26,6 @@ namespace Ui {
 class PeerAvatarButton;
 class RoundButton;
 } // namespace Ui
-class FlatButton;
 class IconedButton;
 
 namespace Window {
@@ -73,20 +72,17 @@ signals:
 
 private:
 	MainWidget *main();
-	anim::fvalue a_over;
+	anim::fvalue a_over = { 0. };
 	Animation _a_appearance;
 
 	PeerData *_selPeer = nullptr;
-	uint32 _selCount;
-	bool _canDelete;
-	QString _selStr;
-	int32 _selStrLeft, _selStrWidth;
+	int _selCount = 0;
+	bool _canDelete = false;
 
-	bool _animating;
+	bool _animating = false;
 
 	ChildWidget<Ui::RoundButton> _clearSelection;
-	ChildWidget<FlatButton> _forward, _delete;
-	int _selectionButtonsWidth, _forwardDeleteWidth;
+	ChildWidget<Ui::RoundButton> _forward, _delete;
 
 	ChildWidget<Ui::PeerAvatarButton> _info;
 	ChildWidget<Ui::RoundButton> _mediaType;