diff --git a/.gitignore b/.gitignore
index e9c854d06c1393fcf8a126dcf6d4a88476630b5f..43c9b7b4aa81f8ef44e27a0d860aa22f20aa9113 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,14 @@
 build
 tags
+cscope*
 .clang_complete
 *wintoastlib*
 
+# GTAGS
+GTAGS
+GRTAGS
+GPATH
+
 # C++ objects and libs
 
 *.slo
diff --git a/src/RoomInfoListItem.cpp b/src/RoomInfoListItem.cpp
index dbcd6806ffdcbc2131776de448f3caed30c61c23..8aadbea219ad60797fd55b5c3e6c0d9331a3c1c4 100644
--- a/src/RoomInfoListItem.cpp
+++ b/src/RoomInfoListItem.cpp
@@ -19,6 +19,7 @@
 #include <QDebug>
 #include <QMouseEvent>
 #include <QPainter>
+#include <QSettings>
 #include <QtGlobal>
 
 #include "AvatarProvider.h"
@@ -141,6 +142,8 @@ RoomInfoListItem::resizeEvent(QResizeEvent *)
 void
 RoomInfoListItem::paintEvent(QPaintEvent *event)
 {
+        bool rounded = QSettings().value("user/avatar/circles", true).toBool();
+
         Q_UNUSED(event);
 
         QPainter p(this);
@@ -288,7 +291,8 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
                 p.setPen(Qt::NoPen);
                 p.setBrush(brush);
 
-                p.drawEllipse(avatarRegion.center(), wm.iconSize / 2, wm.iconSize / 2);
+                rounded ? p.drawEllipse(avatarRegion.center(), wm.iconSize / 2, wm.iconSize / 2)
+                        : p.drawRoundedRect(avatarRegion, 3, 3);
 
                 QFont bubbleFont;
                 bubbleFont.setPointSizeF(bubbleFont.pointSizeF() * 1.4);
@@ -301,7 +305,9 @@ RoomInfoListItem::paintEvent(QPaintEvent *event)
                 p.save();
 
                 QPainterPath path;
-                path.addEllipse(wm.padding, wm.padding, wm.iconSize, wm.iconSize);
+                rounded ? path.addEllipse(wm.padding, wm.padding, wm.iconSize, wm.iconSize)
+                        : path.addRoundedRect(avatarRegion, 3, 3);
+
                 p.setClipPath(path);
 
                 p.drawPixmap(avatarRegion, roomAvatar_);
diff --git a/src/UserInfoWidget.cpp b/src/UserInfoWidget.cpp
index 19d7478e1d04c20e62f0643aae2da7eec531aeee..7a9103406daccc7910b02272a5ad59f8b8c905f1 100644
--- a/src/UserInfoWidget.cpp
+++ b/src/UserInfoWidget.cpp
@@ -1,3 +1,4 @@
+
 /*
  * nheko Copyright (C) 2017  Konstantinos Sideris <siderisk@auth.gr>
  *
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index 30e6ea96fbc7b12d72a919fa3256d393f9cff0c5..9fd033e9a0bdbf8aa7633466da626e50a7d77fce 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -53,6 +53,7 @@ UserSettings::load()
         isReadReceiptsEnabled_        = settings.value("user/read_receipts", true).toBool();
         theme_                        = settings.value("user/theme", defaultTheme_).toString();
         font_                         = settings.value("user/font_family", "default").toString();
+        avatarCircles_                = settings.value("user/avatar/circles", true).toBool();
         emojiFont_    = settings.value("user/emoji_font_family", "default").toString();
         baseFontSize_ = settings.value("user/font_size", QFont().pointSizeF()).toDouble();
 
@@ -118,6 +119,10 @@ UserSettings::save()
         settings.setValue("start_in_tray", isStartInTrayEnabled_);
         settings.endGroup();
 
+        settings.beginGroup("avatar");
+        settings.setValue("circles", avatarCircles_);
+        settings.endGroup();
+
         settings.setValue("font_size", baseFontSize_);
         settings.setValue("typing_notifications", isTypingNotificationsEnabled_);
         settings.setValue("read_receipts", isReadReceiptsEnabled_);
@@ -192,6 +197,15 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
         groupViewLayout->addWidget(groupViewLabel);
         groupViewLayout->addWidget(groupViewToggle_, 0, Qt::AlignRight);
 
+        auto avatarViewLayout = new QHBoxLayout;
+        avatarViewLayout->setContentsMargins(0, OptionMargin, 0, OptionMargin);
+        auto avatarViewLabel = new QLabel(tr("Circular Avatars"), this);
+        avatarViewLabel->setFont(font);
+        avatarCircles_ = new Toggle(this);
+
+        avatarViewLayout->addWidget(avatarViewLabel);
+        avatarViewLayout->addWidget(avatarCircles_, 0, Qt::AlignRight);
+
         auto typingLayout = new QHBoxLayout;
         typingLayout->setContentsMargins(0, OptionMargin, 0, OptionMargin);
         auto typingLabel = new QLabel(tr("Typing notifications"), this);
@@ -368,6 +382,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
         mainLayout_->addLayout(startInTrayOptionLayout_);
         mainLayout_->addWidget(new HorizontalLine(this));
         mainLayout_->addLayout(groupViewLayout);
+        mainLayout_->addLayout(avatarViewLayout);
         mainLayout_->addWidget(new HorizontalLine(this));
         mainLayout_->addLayout(typingLayout);
         mainLayout_->addLayout(receiptsLayout);
@@ -448,6 +463,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge
                 settings_->setGroupView(!isDisabled);
         });
 
+        connect(avatarCircles_, &Toggle::toggled, this, [this](bool isDisabled) {
+                settings_->setAvatarCircles(!isDisabled);
+        });
+
         connect(typingNotifications_, &Toggle::toggled, this, [this](bool isDisabled) {
                 settings_->setTypingNotifications(!isDisabled);
         });
diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h
index e9f7e80483c70127774ac4f516a484f8d9fa583b..28236e831ff1ab8e16b98e2a205b474af4cee12d 100644
--- a/src/UserSettingsPage.h
+++ b/src/UserSettingsPage.h
@@ -86,6 +86,12 @@ public:
                 save();
         }
 
+        void setAvatarCircles(bool state)
+        {
+                avatarCircles_ = state;
+                save();
+        }
+
         QString theme() const { return !theme_.isEmpty() ? theme_ : defaultTheme_; }
         bool isTrayEnabled() const { return isTrayEnabled_; }
         bool isStartInTrayEnabled() const { return isStartInTrayEnabled_; }
@@ -113,6 +119,7 @@ private:
         bool isTypingNotificationsEnabled_;
         bool isReadReceiptsEnabled_;
         bool hasDesktopNotifications_;
+        bool avatarCircles_;
         double baseFontSize_;
         QString font_;
         QString emojiFont_;
@@ -162,6 +169,7 @@ private:
         Toggle *typingNotifications_;
         Toggle *readReceipts_;
         Toggle *desktopNotifications_;
+        Toggle *avatarCircles_;
         QLabel *deviceFingerprintValue_;
         QLabel *deviceIdValue_;
 
diff --git a/src/ui/Avatar.cpp b/src/ui/Avatar.cpp
index 98bf21c61d4f9a5ffdaf1414fae4ab5fae24b409..501a8968bd37a7ad78eafc35d2591840a57f066b 100644
--- a/src/ui/Avatar.cpp
+++ b/src/ui/Avatar.cpp
@@ -1,4 +1,5 @@
 #include <QPainter>
+#include <QSettings>
 
 #include "AvatarProvider.h"
 #include "Utils.h"
@@ -100,6 +101,8 @@ Avatar::setIcon(const QIcon &icon)
 void
 Avatar::paintEvent(QPaintEvent *)
 {
+        bool rounded = QSettings().value("user/avatar/circles", true).toBool();
+
         QPainter painter(this);
         painter.setRenderHint(QPainter::Antialiasing);
 
@@ -113,7 +116,8 @@ Avatar::paintEvent(QPaintEvent *)
 
                 painter.setPen(Qt::NoPen);
                 painter.setBrush(brush);
-                painter.drawEllipse(r.center(), hs, hs);
+                rounded ? painter.drawEllipse(r.center(), hs, hs)
+                        : painter.drawRoundedRect(r, 3, 3);
         }
 
         switch (type_) {
@@ -126,7 +130,10 @@ Avatar::paintEvent(QPaintEvent *)
         }
         case ui::AvatarType::Image: {
                 QPainterPath ppath;
-                ppath.addEllipse(width() / 2 - hs, height() / 2 - hs, size_, size_);
+
+                rounded ? ppath.addEllipse(width() / 2 - hs, height() / 2 - hs, size_, size_)
+                        : ppath.addRoundedRect(r, 3, 3);
+
                 painter.setClipPath(ppath);
                 painter.drawPixmap(QRect(width() / 2 - hs, height() / 2 - hs, size_, size_),
                                    pixmap_);