diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_official.png b/Telegram/Resources/icons/ayu/dialogs_extera_official.png
new file mode 100644
index 000000000..ceea3c984
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_official.png differ
diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_official@2x.png b/Telegram/Resources/icons/ayu/dialogs_extera_official@2x.png
new file mode 100644
index 000000000..f55de6900
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_official@2x.png differ
diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_official@3x.png b/Telegram/Resources/icons/ayu/dialogs_extera_official@3x.png
new file mode 100644
index 000000000..5092bb28f
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_official@3x.png differ
diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_supporter.png b/Telegram/Resources/icons/ayu/dialogs_extera_supporter.png
new file mode 100644
index 000000000..14e56ee4e
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_supporter.png differ
diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_supporter@2x.png b/Telegram/Resources/icons/ayu/dialogs_extera_supporter@2x.png
new file mode 100644
index 000000000..ed3022529
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_supporter@2x.png differ
diff --git a/Telegram/Resources/icons/ayu/dialogs_extera_supporter@3x.png b/Telegram/Resources/icons/ayu/dialogs_extera_supporter@3x.png
new file mode 100644
index 000000000..6b517a192
Binary files /dev/null and b/Telegram/Resources/icons/ayu/dialogs_extera_supporter@3x.png differ
diff --git a/Telegram/SourceFiles/ayu/ui/ayu_icons.style b/Telegram/SourceFiles/ayu/ui/ayu_icons.style
index a215d0358..e8c242004 100644
--- a/Telegram/SourceFiles/ayu/ui/ayu_icons.style
+++ b/Telegram/SourceFiles/ayu/ui/ayu_icons.style
@@ -9,6 +9,7 @@
 
 using "ui/colors.palette";
 using "ui/widgets/widgets.style";
+using "dialogs/dialogs.style";
 
 ayuGhostIcon: icon {{ "ayu/ghost", menuIconColor }};
 ayuMenuIcon: icon {{ "ayu/ayu_menu", menuIconColor }};
@@ -40,3 +41,14 @@ editedIconPadding: margins(0px, 0px, 0px, 0px);
 
 deletedIcon: icon {{ "ayu/trash_bin", windowFg }};
 deletedIconPadding: margins(0px, 0px, 0px, 0px);
+
+dialogsExteraOfficialIcon: ThreeStateIcon {
+	icon: icon {{ "ayu/dialogs_extera_official", dialogsVerifiedIconBg }};
+	over: icon {{ "ayu/dialogs_extera_official", dialogsVerifiedIconBgOver }};
+	active: icon {{ "ayu/dialogs_extera_official", dialogsVerifiedIconBgActive }};
+}
+dialogsExteraSupporterIcon: ThreeStateIcon {
+	icon: icon {{ "ayu/dialogs_extera_supporter", dialogsVerifiedIconBg }};
+	over: icon {{ "ayu/dialogs_extera_supporter", dialogsVerifiedIconBgOver }};
+	active: icon {{ "ayu/dialogs_extera_supporter", dialogsVerifiedIconBgActive }};
+}
diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp
index 69d304a14..67ef1c81d 100644
--- a/Telegram/SourceFiles/boxes/peer_list_box.cpp
+++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp
@@ -39,6 +39,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include <xxhash.h> // XXH64.
 #include <QtWidgets/QApplication>
 
+// AyuGram includes
+#include "styles/style_ayu_icons.h"
+
+
 [[nodiscard]] PeerListRowId UniqueRowIdFromString(const QString &d) {
 	return XXH64(d.data(), d.size() * sizeof(ushort), 0);
 }
@@ -800,6 +804,12 @@ int PeerListRow::paintNameIconGetWidth(
 		.verified = &(selected
 			? st::dialogsVerifiedIconOver
 			: st::dialogsVerifiedIcon),
+		.exteraOfficial = &(selected
+			? st::dialogsExteraOfficialIcon.over
+			: st::dialogsExteraOfficialIcon.icon),
+		.exteraSupporter = &(selected
+			? st::dialogsExteraSupporterIcon.over
+			: st::dialogsExteraSupporterIcon.icon),
 		.premium = &(selected
 			? st::dialogsPremiumIcon.over
 			: st::dialogsPremiumIcon.icon),
diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
index 45324201a..05c774c99 100644
--- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
+++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp
@@ -84,6 +84,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 
 #include <QtWidgets/QApplication>
 
+// AyuGram includes
+#include "styles/style_ayu_icons.h"
+
+
 namespace Dialogs {
 namespace {
 
@@ -1458,6 +1462,14 @@ void InnerWidget::paintPeerSearchResult(
 			: context.selected
 			? &st::dialogsVerifiedIconOver
 			: &st::dialogsVerifiedIcon),
+		.exteraOfficial = &ThreeStateIcon(
+			st::dialogsExteraOfficialIcon,
+			context.active,
+			context.selected),
+		.exteraSupporter = &ThreeStateIcon(
+			st::dialogsExteraSupporterIcon,
+			context.active,
+			context.selected),
 		.premium = &ThreeStateIcon(
 			st::dialogsPremiumIcon,
 			context.active,
diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
index 13b69c128..db7da1fe7 100644
--- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
+++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp
@@ -44,6 +44,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "styles/style_widgets.h"
 #include "styles/style_window.h"
 
+// AyuGram includes
+#include "styles/style_ayu_icons.h"
+
+
 namespace Dialogs::Ui {
 namespace {
 
@@ -716,6 +720,14 @@ void PaintRow(
 				: context.selected
 				? &st::dialogsVerifiedIconOver
 				: &st::dialogsVerifiedIcon),
+			.exteraOfficial = &ThreeStateIcon(
+				st::dialogsExteraOfficialIcon,
+				context.active,
+				context.selected),
+			.exteraSupporter = &ThreeStateIcon(
+				st::dialogsExteraSupporterIcon,
+				context.active,
+				context.selected),
 			.premium = &ThreeStateIcon(
 				st::dialogsPremiumIcon,
 				context.active,
diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp
index 1eaa604e6..6033ec929 100644
--- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp
+++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.cpp
@@ -74,6 +74,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "data/data_chat_filters.h"
 #include "history/admin_log/history_admin_log_section.h"
 #include "styles/style_ayu_styles.h"
+#include "styles/style_ayu_icons.h"
 
 
 namespace HistoryView {
@@ -616,6 +617,8 @@ void TopBarWidget::paintTopBar(Painter &p) {
 			.nameWidth = _title.maxWidth(),
 			.outerWidth = width(),
 			.verified = &st::dialogsVerifiedIcon,
+			.exteraOfficial = &st::dialogsExteraOfficialIcon.icon,
+			.exteraSupporter = &st::dialogsExteraSupporterIcon.icon,
 			.premium = &st::dialogsPremiumIcon.icon,
 			.scam = &st::attentionButtonFg,
 			.premiumFg = &st::dialogsVerifiedIconBg,
diff --git a/Telegram/SourceFiles/ui/unread_badge.cpp b/Telegram/SourceFiles/ui/unread_badge.cpp
index cabe23ae5..502493769 100644
--- a/Telegram/SourceFiles/ui/unread_badge.cpp
+++ b/Telegram/SourceFiles/ui/unread_badge.cpp
@@ -19,6 +19,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 #include "ui/unread_badge_paint.h"
 #include "styles/style_dialogs.h"
 
+// AyuGram includes
+#include "ayu/utils/telegram_helpers.h"
+
+
 namespace Ui {
 namespace {
 
@@ -154,6 +158,16 @@ int PeerBadge::drawGetWidth(Painter &p, Descriptor &&descriptor) {
 		&& (!paintVerify || descriptor.bothVerifyAndStatus);
 	const auto paintStar = premiumStar && !paintVerify;
 
+	const auto paintExteraDev =
+		isExteraPeer(getBareID(peer)) && (!paintEmoji || descriptor.bothVerifyAndStatus);
+	const auto paintExteraSupporter = !paintExteraDev &&
+		isSupporterPeer(getBareID(peer)) && (!paintEmoji || descriptor.bothVerifyAndStatus);
+	const auto exteraWidth = paintExteraDev
+								 ? descriptor.exteraOfficial->width()
+								 : paintExteraSupporter
+									   ? descriptor.exteraSupporter->width()
+									   : 0;
+
 	auto result = 0;
 	if (paintEmoji) {
 		auto &rectForName = descriptor.rectForName;
@@ -161,13 +175,34 @@ int PeerBadge::drawGetWidth(Painter &p, Descriptor &&descriptor) {
 		if (paintVerify) {
 			rectForName.setWidth(rectForName.width() - verifyWidth);
 		}
+		if (paintExteraDev || paintExteraSupporter) {
+			rectForName.setWidth(rectForName.width() - exteraWidth);
+		}
 		result += drawPremiumEmojiStatus(p, descriptor);
-		if (!paintVerify) {
+		if (!paintVerify && !paintExteraDev) {
 			return result;
 		}
-		rectForName.setWidth(rectForName.width() + verifyWidth);
+		if (paintVerify) {
+			rectForName.setWidth(rectForName.width() + verifyWidth);
+		}
+		if (paintExteraDev || paintExteraSupporter) {
+			rectForName.setWidth(rectForName.width() + exteraWidth);
+		}
 		descriptor.nameWidth += result;
 	}
+
+	if (paintExteraDev || paintExteraSupporter) {
+		if (paintStar) {
+			auto &rectForName = descriptor.rectForName;
+			rectForName.setWidth(rectForName.width() - exteraWidth);
+			result += drawPremiumStar(p, descriptor);
+			rectForName.setWidth(rectForName.width() + exteraWidth);
+			descriptor.nameWidth += result;
+		}
+		result += paintExteraDev ? drawExteraOfficial(p, descriptor) : drawExteraSupporter(p, descriptor);
+		return result;
+	}
+
 	if (paintVerify) {
 		result += drawVerifyCheck(p, descriptor);
 		return result;
@@ -267,6 +302,30 @@ int PeerBadge::drawPremiumStar(Painter &p, const Descriptor &descriptor) {
 	return iconw;
 }
 
+int PeerBadge::drawExteraOfficial(Painter &p, const Descriptor &descriptor) {
+	const auto iconw = descriptor.exteraOfficial->width();
+	const auto rectForName = descriptor.rectForName;
+	const auto nameWidth = descriptor.nameWidth;
+	descriptor.exteraOfficial->paint(
+		p,
+		rectForName.x() + qMin(nameWidth, rectForName.width() - iconw),
+		rectForName.y(),
+		descriptor.outerWidth);
+	return iconw;
+}
+
+int PeerBadge::drawExteraSupporter(Painter &p, const Descriptor &descriptor) {
+	const auto iconw = descriptor.exteraSupporter->width();
+	const auto rectForName = descriptor.rectForName;
+	const auto nameWidth = descriptor.nameWidth;
+	descriptor.exteraSupporter->paint(
+		p,
+		rectForName.x() + qMin(nameWidth, rectForName.width() - iconw),
+		rectForName.y(),
+		descriptor.outerWidth);
+	return iconw;
+}
+
 void PeerBadge::unload() {
 	_emojiStatus = nullptr;
 }
diff --git a/Telegram/SourceFiles/ui/unread_badge.h b/Telegram/SourceFiles/ui/unread_badge.h
index 5fd7990c4..a160fd63c 100644
--- a/Telegram/SourceFiles/ui/unread_badge.h
+++ b/Telegram/SourceFiles/ui/unread_badge.h
@@ -56,6 +56,8 @@ public:
 		int nameWidth = 0;
 		int outerWidth = 0;
 		const style::icon *verified = nullptr;
+		const style::icon *exteraOfficial = nullptr;
+		const style::icon *exteraSupporter = nullptr;
 		const style::icon *premium = nullptr;
 		const style::color *scam = nullptr;
 		const style::color *premiumFg = nullptr;
@@ -89,6 +91,9 @@ private:
 	int drawPremiumEmojiStatus(Painter &p, const Descriptor &descriptor);
 	int drawPremiumStar(Painter &p, const Descriptor &descriptor);
 
+	int drawExteraOfficial(Painter &p, const Descriptor &descriptor);
+	int drawExteraSupporter(Painter &p, const Descriptor &descriptor);
+
 	std::unique_ptr<EmojiStatus> _emojiStatus;
 	mutable std::unique_ptr<BotVerifiedData> _botVerifiedData;