diff --git a/src/RoomInfoListItem.cpp b/src/RoomInfoListItem.cpp
index 11818649bd94c91c303edc0407ce5c50513574c9..13c7b54d4ccfbe6adeda15c516b1a8017b724ce6 100644
--- a/src/RoomInfoListItem.cpp
+++ b/src/RoomInfoListItem.cpp
@@ -151,7 +151,8 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
 
         auto wm = getMetrics(QFont{});
 
-        QPixmap pixmap(avatar_->size());
+        QPixmap pixmap(avatar_->size() * p.device()->devicePixelRatioF());
+        pixmap.setDevicePixelRatio(p.device()->devicePixelRatioF());
         if (isPressed_) {
                 p.fillRect(rect(), highlightedBackgroundColor_);
                 titlePen.setColor(highlightedTitleColor_);
diff --git a/src/ui/Avatar.cpp b/src/ui/Avatar.cpp
index b8703e8778dcc04adaae0e4ccc3b827adb16dcff..cb77d1a84ee9405c5c9073b02d45ffb579e88b3d 100644
--- a/src/ui/Avatar.cpp
+++ b/src/ui/Avatar.cpp
@@ -71,11 +71,12 @@ Avatar::setImage(const QString &avatar_url)
         AvatarProvider::resolve(avatar_url,
                                 static_cast<int>(size_ * pixmap_.devicePixelRatio()),
                                 this,
-                                [this](QPixmap pm) {
+                                [this, requestedRatio = pixmap_.devicePixelRatio()](QPixmap pm) {
                                         if (pm.isNull())
                                                 return;
                                         type_   = ui::AvatarType::Image;
                                         pixmap_ = pm;
+                                        pixmap_.setDevicePixelRatio(requestedRatio);
                                         update();
                                 });
 }
@@ -89,15 +90,30 @@ Avatar::setImage(const QString &room, const QString &user)
                                 user,
                                 static_cast<int>(size_ * pixmap_.devicePixelRatio()),
                                 this,
-                                [this](QPixmap pm) {
+                                [this, requestedRatio = pixmap_.devicePixelRatio()](QPixmap pm) {
                                         if (pm.isNull())
                                                 return;
                                         type_   = ui::AvatarType::Image;
                                         pixmap_ = pm;
+                                        pixmap_.setDevicePixelRatio(requestedRatio);
                                         update();
                                 });
 }
 
+void
+Avatar::setDevicePixelRatio(double ratio)
+{
+        if (type_ == ui::AvatarType::Image && abs(pixmap_.devicePixelRatio() - ratio) > 0.01) {
+                pixmap_ = pixmap_.scaled(QSize(size_, size_) * ratio);
+                pixmap_.setDevicePixelRatio(ratio);
+
+                if (!avatar_url_.isEmpty())
+                        setImage(avatar_url_);
+                else
+                        setImage(room_, user_);
+        }
+}
+
 void
 Avatar::paintEvent(QPaintEvent *)
 {
@@ -106,7 +122,7 @@ Avatar::paintEvent(QPaintEvent *)
         QPainter painter(this);
         painter.setRenderHint(QPainter::Antialiasing);
 
-        QRect r      = rect();
+        QRectF r     = rect();
         const int hs = size_ / 2;
 
         if (type_ != ui::AvatarType::Image) {
@@ -116,18 +132,9 @@ Avatar::paintEvent(QPaintEvent *)
 
                 painter.setPen(Qt::NoPen);
                 painter.setBrush(brush);
-                rounded ? painter.drawEllipse(r.center(), hs, hs)
-                        : painter.drawRoundedRect(r, 3, 3);
-        } else if (painter.isActive() &&
-                   abs(pixmap_.devicePixelRatio() - painter.device()->devicePixelRatioF()) > 0.01) {
-                pixmap_ =
-                  pixmap_.scaled(QSize(size_, size_) * painter.device()->devicePixelRatioF());
-                pixmap_.setDevicePixelRatio(painter.device()->devicePixelRatioF());
-
-                if (!avatar_url_.isEmpty())
-                        setImage(avatar_url_);
-                else
-                        setImage(room_, user_);
+                rounded ? painter.drawEllipse(r) : painter.drawRoundedRect(r, 3, 3);
+        } else if (painter.isActive()) {
+                setDevicePixelRatio(painter.device()->devicePixelRatioF());
         }
 
         switch (type_) {
diff --git a/src/ui/Avatar.h b/src/ui/Avatar.h
index da8a57edd1fa05bd63715f1668713b6b9aa74418..229a980d560a46316688519973830c0db415df5f 100644
--- a/src/ui/Avatar.h
+++ b/src/ui/Avatar.h
@@ -21,6 +21,7 @@ public:
         void setImage(const QString &room, const QString &user);
         void setLetter(const QString &letter);
         void setTextColor(const QColor &color);
+        void setDevicePixelRatio(double ratio);
 
         QColor backgroundColor() const;
         QColor textColor() const;