diff --git a/CustomModels/channelmodel.cpp b/CustomModels/channelmodel.cpp
index 9eed39a2a295ceda6ad6a14bf1f8e787ce176972..a978070269e97970f33e99c69d3dbff8e4e4f409 100644
--- a/CustomModels/channelmodel.cpp
+++ b/CustomModels/channelmodel.cpp
@@ -116,6 +116,23 @@ QVariant ChannelModel::data( const QModelIndex &index, int role ) const
 
         case ChannelRoles::ownerName:
             return currentChannel->getOwnerName();
+
+        case ChannelRoles::avatarImg: {
+                auto avatarImg = currentChannel->getAvatarImg();
+
+                if ( !avatarImg.isNull() ) {
+                    auto path = QStringLiteral( "file://" ) + avatarImg->getFilePath();
+
+                    if ( path.endsWith( "svg" ) ) {
+                        return "qrc:res/user-identity.svg";
+                    } else {
+                        return path;
+                    }
+                } else {
+                    return "";
+                }
+            }
+
     }
 
     return QVariant();
@@ -158,6 +175,7 @@ QHash<int, QByteArray> ChannelModel::roleNames() const
     roles[static_cast<int>( ChannelRoles::ownerName )] = QByteArrayLiteral( "ownerName" );
     roles[static_cast<int>( ChannelRoles::username )] = QByteArrayLiteral( "username" );
     roles[static_cast<int>( ChannelRoles::userStatus )] = QByteArrayLiteral( "userStatus" );
+    roles[static_cast<int>( ChannelRoles::avatarImg )] = QByteArrayLiteral( "avatarImg" );
 
     return roles;
 }
diff --git a/CustomModels/channelmodel.h b/CustomModels/channelmodel.h
index 84e9ae1e0a120164fbeaaa294a217236218d1295..de7caa5f6d7c9338042e81e50a672853c43c5508 100644
--- a/CustomModels/channelmodel.h
+++ b/CustomModels/channelmodel.h
@@ -51,7 +51,8 @@ class ChannelModel : public QAbstractListModel
             ownerId,
             ownerName,
             username,
-            userStatus
+            userStatus,
+            avatarImg
         };
     public:
         ChannelModel() = default;
diff --git a/CustomModels/messagemodel.cpp b/CustomModels/messagemodel.cpp
index cb48a5a6881f0a58cd12c4273e799f8d2dcefa3c..89a065f9f09901e5b5e9faa9d6b97ca96cffa830 100644
--- a/CustomModels/messagemodel.cpp
+++ b/CustomModels/messagemodel.cpp
@@ -170,7 +170,13 @@ QVariant MessagesModel::data( const QModelIndex &index, int role ) const
                     auto avatarImg = messageAtIndex->getAvatarImg();
 
                     if ( !avatarImg.isNull() ) {
-                        return messageAtIndex->getAvatarImg()->getFilePath();
+                        auto path = QStringLiteral( "file://" ) + avatarImg->getFilePath();
+
+                        if ( path.endsWith( "svg" ) ) {
+                            return "qrc:res/user-identity.svg";
+                        } else {
+                            return path;
+                        }
                     } else {
                         return "";
                     }
@@ -221,7 +227,7 @@ void MessagesModel::setCurrent( const QString &value )
 int MessagesModel::rowCount( const QModelIndex &parent ) const
 {
     Q_UNUSED( parent );
-    qDebug() << "number of messages in model" << messagesOfCurrentChannel.count();
+    // qDebug() << "number of messages in model" << messagesOfCurrentChannel.count();
 
     int count = 0;
 
@@ -362,6 +368,7 @@ void MessagesModel::onDataChanged( const QString &id, const QString &property )
     int pos = 0;
     bool found = false;
 
+    //TODO: could be done with less complexity
     for ( const auto &current : messagesOfCurrentChannel ) {
         if ( current->getId() == id ) {
             found = true;
diff --git a/repos/entities/rocketchatchannel.cpp b/repos/entities/rocketchatchannel.cpp
index 2538f7850a61d1f79fbd67c667b3376594b32e26..817c58fafea5e0c1ffabb058287bdbd230b79289 100755
--- a/repos/entities/rocketchatchannel.cpp
+++ b/repos/entities/rocketchatchannel.cpp
@@ -309,6 +309,20 @@ void RocketChatChannel::setChatPartnerId( const QString &chatPartnerId )
 {
     mChatPartnerId = chatPartnerId;
 }
+
+QSharedPointer<TempFile> RocketChatChannel::getAvatarImg() const
+{
+    return mAvatarImg;
+}
+
+void RocketChatChannel::setAvatarImg( const QSharedPointer<TempFile> &pAvatar )
+{
+    if ( mAvatarImg != pAvatar ) {
+        mAvatarImg = pAvatar;
+        emit dataChanged( mRoomId, "avatarImg" );
+    }
+}
+
 bool RocketChatChannel::getBlocked() const
 {
     return mBlocked;
diff --git a/repos/entities/rocketchatchannel.h b/repos/entities/rocketchatchannel.h
index 771df520635eb3c09716e7e3c6ea46366c759b23..ace0fdca1db3dff85b1e5c7fbce345d886bd9693 100755
--- a/repos/entities/rocketchatchannel.h
+++ b/repos/entities/rocketchatchannel.h
@@ -128,7 +128,11 @@ class RocketChatChannel : public QObject
         const QString &getChatPartnerId() const;
         void setChatPartnerId( const QString &chatPartnerId );
 
+        QSharedPointer<TempFile> getAvatarImg() const;
+        void setAvatarImg( const QSharedPointer<TempFile> &pAvatar );
+
     private:
+        QSharedPointer<TempFile> mAvatarImg;
         QString mOwnerName;
         QString mOwnerId;
         bool mDeleted;
diff --git a/repos/entities/rocketchatmessage.h b/repos/entities/rocketchatmessage.h
index acf2792382502e719f94d8beacd36af246cab356..f5b06e152bedfa9e716f5281ca4167cd3e8dd4c5 100755
--- a/repos/entities/rocketchatmessage.h
+++ b/repos/entities/rocketchatmessage.h
@@ -29,6 +29,7 @@
 #include "repos/emojirepo.h"
 #include "utils.h"
 #include "rocketchatattachment.h"
+#include "rocketchatuser.h"
 
 class EmojiRepo;
 
@@ -103,6 +104,7 @@ class RocketChatMessage: public QObject
 
     protected:
         QSharedPointer<TempFile> mAvatarImg;
+        QSharedPointer<RocketChatUser> mAuthor;
         bool empty = false;
         qint64 timestamp = 0;
         QJsonObject data;
diff --git a/repos/entities/rocketchatuser.h b/repos/entities/rocketchatuser.h
index cd0f3b8345c550c9ba505bc438a0843ec204a875..ba73d9d9121c8ef44cdb6427edfad5ea4d41ede9 100755
--- a/repos/entities/rocketchatuser.h
+++ b/repos/entities/rocketchatuser.h
@@ -24,6 +24,8 @@
 #define ROCKETCHATUSER_H
 
 #include <QObject>
+#include <QSharedPointer>
+#include "tempfile.h"
 
 class RocketChatUser : public QObject
 {
@@ -68,8 +70,10 @@ class RocketChatUser : public QObject
         QString mUserId;
         QString mName;
         status mStatus = status::OFFLINE;
+        QSharedPointer<TempFile> mAvatarImg;
     signals:
         void statusChanged();
+        void avatarChanged();
     public slots:
 };
 
diff --git a/rocketchat.cpp b/rocketchat.cpp
index c8f78c757bc10ce11fc39f23f43716d85cb89b98..4d928b97d59c1b532b0926ff5c72f25c3e50e728 100755
--- a/rocketchat.cpp
+++ b/rocketchat.cpp
@@ -642,10 +642,10 @@ void RocketChat::onLogout( const QString &pServerId )
 
 void RocketChat::onUnreadCountChanged( const QString &pServerId, uint pUnread )
 {
-
+    static  int lastUnreadCount = -1;
     mUnreadSum[pServerId] = pUnread;
 
-    qDebug() << "onUnreadCountChanged";
+    // qDebug() << "onUnreadCountChanged";
     uint number = 0;
 
     if ( mServerStatus ) {
@@ -653,15 +653,18 @@ void RocketChat::onUnreadCountChanged( const QString &pServerId, uint pUnread )
             number += count;
         }
 
-        qDebug() << "set Unread Badges to:" << number;
+        if ( lastUnreadCount != number ) {
+
+            qDebug() << "set Unread Badges to:" << number;
 #ifdef Q_OS_ANDROID
 
-        AndroidBadges::setNumber( number );
+            AndroidBadges::setNumber( number );
 #endif
 #ifdef Q_OS_IOS
-        emit setBadge( number );
+            emit setBadge( number );
 #endif
-
+            lastUnreadCount = number;
+        }
     }
 
 }
diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp
index e1d21978d1fa3d9ae10d082376120aa9a13ed848..93293c13ba0620bbbc724a0cb3b5e441a561bd1f 100755
--- a/rocketchatserver.cpp
+++ b/rocketchatserver.cpp
@@ -143,7 +143,7 @@ void RocketChatServerData::initConnections()
     loadEmojis();
 
     mMessageService = new MessageService( this, mStorage, this, mEmojiRepo, mFileService );
-    mChannelService = new RocketChatChannelService( this, this, mMessageService );
+    mChannelService = new RocketChatChannelService( this, this, mMessageService, mFileService );
     mChannelService->setDdp( mDdpApi );
     mChannelService->setChannels( mChannels );
     connect( mChannelService, &RocketChatChannelService::channelsLoaded, this, &RocketChatServerData::onChannelsLoaded, Qt::UniqueConnection );
diff --git a/services/messageservice.cpp b/services/messageservice.cpp
index 4ad15fdf96f4d942a9612239274953428f8d04e0..fb68c56c0e962940c29d135ccc0ebedc7be4ab99 100644
--- a/services/messageservice.cpp
+++ b/services/messageservice.cpp
@@ -211,11 +211,11 @@ QSharedPointer<RocketChatMessage> MessageService::parseMessage( const QJsonObjec
             }
         }
 
+        //TODO: place RocketChatUserObject inside Message instead...
         auto then = [ message ]( QSharedPointer<TempFile> tempfile, bool showInline ) {
             message->setAvatarImg( tempfile );
         };
-        auto baseUrl = mServer->getBaseUrl();
-        auto avatarUrl = baseUrl + "/avatar/" + author + ".jpg";
+        auto avatarUrl = "/avatar/" + author + ".jpg";
         auto avatarRequest = QSharedPointer<FileRequest>::create( avatarUrl, "temp", then, true );
         mFileService->getFileRessource( avatarRequest );
 
diff --git a/services/rocketchatchannelservice.cpp b/services/rocketchatchannelservice.cpp
index 44060be86738b3a8aef445060f4a6059d15f184b..88d5ebcf57f475a336b09b54a19af7c54ca0d75d 100755
--- a/services/rocketchatchannelservice.cpp
+++ b/services/rocketchatchannelservice.cpp
@@ -26,7 +26,7 @@
 
 
 
-RocketChatChannelService::RocketChatChannelService( QObject *parent, RocketChatServerData *pServer, MessageService *pMessageService ): QObject( parent )
+RocketChatChannelService::RocketChatChannelService( QObject *parent, RocketChatServerData *pServer, MessageService *pMessageService, FileService *pFileService ): QObject( parent ), mFileService( pFileService )
 {
     this->mServer = pServer;
     this->mMessageService = pMessageService;
@@ -54,7 +54,18 @@ QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject(
 QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject( const QString &pRoomId, const QString &pName, const QString &pType, const QString &pUsername )
 {
     auto ptr = QSharedPointer<RocketChatChannel>::create( mServer, mMessageService, pRoomId, pName, pType );
-    ptr->setUsername( pUsername );
+
+    if ( pType == "d" ) {
+        ptr->setUsername( pUsername );
+
+        //TODO: place RocketChatUserObject inside Message instead...
+        auto then = [ ptr ]( QSharedPointer<TempFile> tempfile, bool showInline ) {
+            ptr->setAvatarImg( tempfile );
+        };
+        auto avatarUrl = "/avatar/" + pUsername + ".jpg";
+        auto avatarRequest = QSharedPointer<FileRequest>::create( avatarUrl, "temp", then, true );
+        mFileService->getFileRessource( avatarRequest );
+    }
 
     if ( Q_LIKELY( mChannels ) ) {
         mChannels->add( ptr );
diff --git a/services/rocketchatchannelservice.h b/services/rocketchatchannelservice.h
index 6c6a0244a0c2ac569cc95b02ec83bc11df28ce66..af2508da5734b5b16068f1d6c99080e6c2089790 100755
--- a/services/rocketchatchannelservice.h
+++ b/services/rocketchatchannelservice.h
@@ -40,6 +40,7 @@
 #include "restRequests/restspotlightrequest.h"
 #include "services/messageservice.h"
 #include "repos/channelrepository.h"
+#include "fileservice.h"
 
 #include "CustomModels/models.h"
 
@@ -55,7 +56,7 @@ class RocketChatChannelService : public QObject
 {
         Q_OBJECT
     public:
-        RocketChatChannelService( QObject *parent, RocketChatServerData *pServer, MessageService *pMessageService );
+        RocketChatChannelService( QObject *parent, RocketChatServerData *pServer, MessageService *pMessageService, FileService *pFileService );
 
         RestApi *getRestApi() const;
         void setRestApi( RestApi *pValue );
@@ -102,6 +103,7 @@ class RocketChatChannelService : public QObject
         PersistanceLayer *mStorage = nullptr;
         RocketChatServerData *mServer = nullptr;
         ChannelRepository *mChannels = nullptr;
+        FileService *mFileService = nullptr;
         MeteorDDP *mDdp;
 
         QVector<QSharedPointer<RocketChatChannel>> processChannelData( const QJsonArray &pChannelArray, bool pJoined, bool pUpdateOnly );