diff --git a/CustomModels/channelmodel.cpp b/CustomModels/channelmodel.cpp
index 975a1940fe56bf282a41e43b9e98a60759af344a..23a7d367299da492cf03d006095fc335742aae87 100644
--- a/CustomModels/channelmodel.cpp
+++ b/CustomModels/channelmodel.cpp
@@ -93,6 +93,11 @@ QVariant ChannelModel::data( const QModelIndex &index, int role ) const
     if ( role == blocked ) {
         return currentChannel->getBlocked();
     }
+
+    if ( role == username ) {
+        return currentChannel->getUsername();
+    }
+
     return QVariant();
 
 }
@@ -130,6 +135,7 @@ QHash<int, QByteArray> ChannelModel::roleNames() const
     roles[deleted] = QByteArrayLiteral( "deleted" );
     roles[ownerId] = QByteArrayLiteral( "ownerId" );
     roles[ownerName] = QByteArrayLiteral( "ownerName" );
+    roles[username] = QByteArrayLiteral( "username" );
 
     return roles;
 }
diff --git a/CustomModels/channelmodel.h b/CustomModels/channelmodel.h
index 62f6fd9bc74a2a0a6b268199c1d90ec1b90313f9..681e9d330c5bf0c9780a51a01412fe8241d41e1d 100644
--- a/CustomModels/channelmodel.h
+++ b/CustomModels/channelmodel.h
@@ -49,7 +49,8 @@ class ChannelModel : public QAbstractListModel
             blocked,
             deleted,
             ownerId,
-            ownerName
+            ownerName,
+            username
         };
     public:
         ChannelModel();
diff --git a/persistancelayer.cpp b/persistancelayer.cpp
index 119a72aa8f76df8c2471ac39d0f1c74717ec6b6e..c3602f303f4ee03425602dec5c26ee55457fe096 100755
--- a/persistancelayer.cpp
+++ b/persistancelayer.cpp
@@ -97,7 +97,8 @@ void PersistanceLayer::initShema()
                                    "muted text,"
                                    "archived bool,"
                                    "joined bool, "
-                                   "blocked bool DEFAULT 0)" ) );
+                                   "blocked bool DEFAULT 0, "
+                                   "username varchar(100) DEFAULT \"\")" ) );
 
     if ( !query.exec() ) {
         qWarning() << query.lastError();
@@ -298,6 +299,9 @@ void PersistanceLayer::upgradeSchema()
             } else if ( dbVersion < 3 ) {
                 currentTarget = 3;
                 sqlFile.setFileName( QStringLiteral( ":/sql/migrations/3.sql" ) );
+            } else if ( dbVersion < 4 ) {
+                currentTarget = 4;
+                sqlFile.setFileName( QStringLiteral( ":/sql/migrations/4.sql" ) );
             }
 
             if ( !sqlFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
@@ -757,12 +761,12 @@ void PersistanceLayer::setSetting( const QString &pProperty, const QString &pVal
 
 }
 
-void PersistanceLayer::addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, bool pReadOnly, const QString &pMuted, bool pArchived, bool pBlocked )
+void PersistanceLayer::addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, bool pReadOnly, const QString &pMuted, bool pArchived, bool pBlocked, const QString &pUsername )
 {
     transaction();
     QSqlQuery setChannel;
     setChannel.prepare( QStringLiteral( "REPLACE INTO rooms "
-                                        "(id,name,type,joined,read_only,muted,archived,blocked) VALUES(:id,:name,:type,:joined,:read_only,:muted,:archived,:blocked)" ) );
+                                        "(id,name,type,joined,read_only,muted,archived,blocked,username) VALUES(:id,:name,:type,:joined,:read_only,:muted,:archived,:blocked,:username)" ) );
     setChannel.bindValue( QStringLiteral( ":id" ), pId );
     setChannel.bindValue( QStringLiteral( ":name" ), pName );
     setChannel.bindValue( QStringLiteral( ":joined" ), pJoined );
@@ -771,6 +775,7 @@ void PersistanceLayer::addChannel( const QString &pId, const QString &pName, con
     setChannel.bindValue( QStringLiteral( ":muted" ), pMuted );
     setChannel.bindValue( QStringLiteral( ":archived" ), pArchived );
     setChannel.bindValue( QStringLiteral( ":blocked" ), pBlocked );
+    setChannel.bindValue( QStringLiteral( ":username" ), pUsername );
 
     if ( !setChannel.exec() ) {
         qWarning() << setChannel.lastError();
@@ -779,13 +784,13 @@ void PersistanceLayer::addChannel( const QString &pId, const QString &pName, con
     commit();
 }
 
-void PersistanceLayer::addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined )
+void PersistanceLayer::addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, const QString &pUsername )
 {
     bool readOnly = false;
     QString muted = "";
     bool archived = false;
     bool blocked = false;
-    addChannel( pId, pName, pType, pJoined, readOnly, muted, archived, blocked );
+    addChannel( pId, pName, pType, pJoined, readOnly, muted, archived, blocked, pUsername );
 }
 
 void PersistanceLayer::deleteChannel( const QString &pId )
@@ -1203,6 +1208,7 @@ QList<QVariantHash> PersistanceLayer::getChannels( void )
         int mutedCol =  rec.indexOf( QStringLiteral( "muted" ) );
         int archivedCol = rec.indexOf( QStringLiteral( "archived" ) );
         int blocked = rec.indexOf( QStringLiteral( "blocked" ) );
+        int usernameCol = rec.indexOf( QStringLiteral( "username" ) );
 
         while ( rooms.next() ) {
             QVariantHash roomsHash;
@@ -1216,6 +1222,7 @@ QList<QVariantHash> PersistanceLayer::getChannels( void )
             roomsHash[QStringLiteral( "list" )] = muted.split( ',' );
             roomsHash[QStringLiteral( "archived" )] = rooms.value( archivedCol ).toBool();
             roomsHash[QStringLiteral( "blocked" )] = rooms.value( blocked ).toBool();
+            roomsHash[QStringLiteral( "username" )] = rooms.value( usernameCol ).toString();
             roomsList.append( roomsHash );
         }
     }
diff --git a/persistancelayer.h b/persistancelayer.h
index 23a9d3aacc7b9fcf08986013ba9150eb569cf4fc..c9dc4df78b4657595d9331d911a704a5ad18ca85 100755
--- a/persistancelayer.h
+++ b/persistancelayer.h
@@ -39,8 +39,8 @@ class PersistanceLayer : public QObject
         void setUserName( const QString & );
         void setPassword( const QString & );
         void setToken( const QString &, uint );
-        void addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, bool pReadOnly, const QString &pMuted, bool pArchived, bool pBlocked );
-        void addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined );
+        void addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, bool pReadOnly, const QString &pMuted, bool pArchived, bool pBlocked, const QString &pUsername );
+        void addChannel( const QString &pId, const QString &pName, const QString &pType, bool pJoined, const QString &pUsername );
         void deleteChannel( const QString &pId );
         void addMessage( const QString &pId, const QString &pRid, const QString &pAuthor, qint64 pTs, const QString &pJson, const QString &pUserId );
         void addFileCacheEntry( const QString &pUrl, const QString &pPath );
diff --git a/repos/entities/rocketchatchannel.cpp b/repos/entities/rocketchatchannel.cpp
index 92c244adb07d8464a8b4354db47ebaefa40b3b89..f0fd26fc701ee73a04d4f8f117772ace50c2fefe 100755
--- a/repos/entities/rocketchatchannel.cpp
+++ b/repos/entities/rocketchatchannel.cpp
@@ -84,6 +84,7 @@ QString RocketChatChannel::getName() const
 void RocketChatChannel::setName( const QString &value )
 {
     mName = value;
+    emit dataChanged( mName, "name" );
 }
 
 
@@ -217,20 +218,6 @@ void RocketChatChannel::setArchived( bool value )
     mArchived = value;
 }
 
-
-QJsonObject RocketChatChannel::toJsonObject()
-{
-    QJsonObject currentChannelObject;
-    currentChannelObject[QStringLiteral( "name" )] =       getName();
-    currentChannelObject[QStringLiteral( "joined" )] =     getJoined();
-    currentChannelObject[QStringLiteral( "ro" )] =         getReadOnly();
-    currentChannelObject[QStringLiteral( "muted" )] =      QJsonArray::fromStringList( getMuted() );
-    currentChannelObject[QStringLiteral( "archived" )] =   getArchived();
-    currentChannelObject[QStringLiteral( "type" )] =       getType();
-    currentChannelObject[QStringLiteral( "roomId" )] =     getRoomId();
-    return currentChannelObject;
-}
-
 bool RocketChatChannel::getSelfMuted() const
 {
     return mSelfMuted;
@@ -286,7 +273,7 @@ QString RocketChatChannel::getUsername() const
     return mUsername;
 }
 
-void RocketChatChannel::setUsername(const QString &username)
+void RocketChatChannel::setUsername( const QString &username )
 {
     mUsername = username;
 }
diff --git a/repos/entities/rocketchatchannel.h b/repos/entities/rocketchatchannel.h
index 050f94fedb71ec1c61ad453b9991c42323dab7da..e006388eef7ecb64606f628d0a6aa979e56d7561 100755
--- a/repos/entities/rocketchatchannel.h
+++ b/repos/entities/rocketchatchannel.h
@@ -95,8 +95,6 @@ class RocketChatChannel : public QObject
         bool getArchived() const;
         void setArchived( bool pValue );
 
-        QJsonObject toJsonObject( void );
-
         void sendUnsentMessages( void );
 
         bool getSelfMuted() const;
@@ -118,9 +116,9 @@ class RocketChatChannel : public QObject
         void setOwnerId( const QString &ownerId );
 
         QString getUsername() const;
-        void setUsername(const QString &username);
+        void setUsername( const QString &username );
 
-protected:
+    protected:
         QString mOwnerName;
         QString mOwnerId;
         bool mDeleted;
diff --git a/services/rocketchatchannelservice.cpp b/services/rocketchatchannelservice.cpp
index d7b082d0dcc2a55336c811421925c2e8449e111a..08c0cbe6a6387048251200b32592c0f23da0b509 100755
--- a/services/rocketchatchannelservice.cpp
+++ b/services/rocketchatchannelservice.cpp
@@ -49,6 +49,22 @@ QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject(
     return ptr;
 }
 
+QSharedPointer<RocketChatChannel> RocketChatChannelService::createChannelObject( QString pRoomId, QString pName, QString pType, QString pUsername )
+{
+    QSharedPointer<RocketChatChannel> ptr( new RocketChatChannel( mServer, mMessageService, pRoomId, pName, pType ) );
+    ptr->setUsername( pUsername );
+
+    if ( Q_LIKELY( mChannels ) ) {
+        mChannels->add( ptr );
+    } else {
+        qCritical() << "Channelsrepo not available to ChannelService";
+    }
+
+    fillChannelWithMessages( ptr );
+
+    return ptr;
+}
+
 
 QVector<QSharedPointer<RocketChatChannel> > RocketChatChannelService::processChannelData( QJsonArray pChannelArray, bool pJoined, bool pUpdateOnly )
 {
@@ -68,6 +84,12 @@ QVector<QSharedPointer<RocketChatChannel> > RocketChatChannelService::processCha
             QString id = currentChannelObject["rid"].toString();
             QString name = currentChannelObject["name"].toString();
             QString type = currentChannelObject["t"].toString();
+            QString username = "";
+
+            if ( type == "d" ) {
+                username = name;
+                name = currentChannelObject["fname"].toString();
+            }
 
             if ( id == "" ) {
                 id = currentChannelObject["_id"].toString();
@@ -89,19 +111,27 @@ QVector<QSharedPointer<RocketChatChannel> > RocketChatChannelService::processCha
             if ( mChannels->contains( id ) ) {
                 channel = mChannels->get( id );
             } else {
-                channel = createChannelObject( id, name, type );
+                channel = createChannelObject( id, name, type, username );
             }
 
             if ( !channel.isNull() ) {
 
 
                 if ( type == "d" ) {
-                    QString username = currentChannelObject["username"].toString();
-                    channel->setUsername( username );
+                    /* QString name = currentChannelObject["name"].toString();
+                     QString fname = currentChannelObject["fname"].toString();
+
+                     if ( fname.isEmpty() ) {
+                         channel->setName( name );
+                     } else {
+                         channel->setName( fname );
+                     }
+
+                     channel->setUsername( name );*/
                 }
 
                 if ( !name.isEmpty() ) {
-                    channel->setName( currentChannelObject["name"].toString() );
+                    channel->setName( name );
                 }
 
                 if ( currentChannelObject.contains( "ro" ) ) {
@@ -223,7 +253,7 @@ void RocketChatChannelService::loadJoinedChannelsFromDb()
         QVector<QSharedPointer<RocketChatChannel>> channels;
 
         for ( const auto &roomHash : roomsList ) {
-            QSharedPointer<RocketChatChannel> channelPointer =  createChannelObject( roomHash["id"].toString(), roomHash["name"].toString(), roomHash["type"].toString() );
+            QSharedPointer<RocketChatChannel> channelPointer =  createChannelObject( roomHash["id"].toString(), roomHash["name"].toString(), roomHash["type"].toString(), roomHash["username"].toString() );
 
             if ( !channelPointer.isNull() ) {
                 channelPointer->setMuted( roomHash["list"].toStringList() );
@@ -249,11 +279,12 @@ void RocketChatChannelService::persistChannel( QSharedPointer<RocketChatChannel>
     QString name  = pChannel->getName();
     QString type = pChannel->getType();
     QString muted = pChannel->getMuted().join( "," );
+    QString username = pChannel->getUsername();
     bool joined = pChannel->getJoined();
     bool archived = pChannel->getArchived();
     bool readonly = pChannel->getReadOnly();
     bool blocked = pChannel->getBlocked();
-    mStorage->addChannel( id, name, type, joined, readonly, muted, archived, blocked );
+    mStorage->addChannel( id, name, type, joined, readonly, muted, archived, blocked, username );
 }
 /**
  * Fills the channel with users, which are loaded from the server
diff --git a/services/rocketchatchannelservice.h b/services/rocketchatchannelservice.h
index 120b58f029573240d18a32d1080d52e7ce67737e..2198d5e6520d2a7dfe8c5a4f385da13007fd34a1 100755
--- a/services/rocketchatchannelservice.h
+++ b/services/rocketchatchannelservice.h
@@ -64,6 +64,8 @@ class RocketChatChannelService : public QObject
         void setDdp( MeteorDDP *ddp );
 
         QSharedPointer<RocketChatChannel> createChannelObject( QString pRoomId, QString pName, QString pType );
+        QSharedPointer<RocketChatChannel> createChannelObject( QString pRoomId, QString pName, QString pType, QString username );
+
         void openPrivateChannelWith( QString pUsername );
 
         void loadJoinedChannelsFromServer( void );