diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3384e04af0ed91ae381e31623b684eb4b9856063..b058758192903c605c4f40cdeb2b940a42e750af 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -145,7 +145,7 @@ ENDIF(${ENABLE_VIDEO} MATCHES true)
 
 FIND_PACKAGE(Qt5Core REQUIRED)
 FIND_PACKAGE(Qt5DBus)
-ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=0)
+# ADD_DEFINITIONS(-DQT_DISABLE_DEPRECATED_BEFORE=1)
 
 SET(GENERIC_LIB_VERSION "1.4.1")
 
diff --git a/src/accountmodel.cpp b/src/accountmodel.cpp
index 30978066f0484bae2e39a2317dd637d410b80d02..7c18b2f24347c92a480d790bfca8e693d7546aad 100644
--- a/src/accountmodel.cpp
+++ b/src/accountmodel.cpp
@@ -69,7 +69,6 @@ int AccountListNoCheckProxyModel::rowCount(const QModelIndex& parentIdx ) const
 AccountModelPrivate::AccountModelPrivate(AccountModel* parent) : QObject(parent),q_ptr(parent),
 m_pIP2IP(nullptr)
 {
-   setupRoleName();
 }
 
 ///Constructors
@@ -110,53 +109,56 @@ AccountModel::~AccountModel()
    delete d_ptr;
 }
 
-void AccountModelPrivate::setupRoleName()
-{
-   QHash<int, QByteArray> roles = q_ptr->roleNames();
-   roles.insert(Account::Role::Alias                    ,QByteArray("alias"                         ));
-   roles.insert(Account::Role::Proto                    ,QByteArray("protocol"                      ));
-   roles.insert(Account::Role::Hostname                 ,QByteArray("hostname"                      ));
-   roles.insert(Account::Role::Username                 ,QByteArray("username"                      ));
-   roles.insert(Account::Role::Mailbox                  ,QByteArray("mailbox"                       ));
-   roles.insert(Account::Role::Proxy                    ,QByteArray("proxy"                         ));
-   roles.insert(Account::Role::TlsPassword              ,QByteArray("tlsPassword"                   ));
-   roles.insert(Account::Role::TlsCaListCertificate     ,QByteArray("tlsCaListCertificate"          ));
-   roles.insert(Account::Role::TlsCertificate           ,QByteArray("tlsCertificate"                ));
-   roles.insert(Account::Role::TlsPrivateKeyCertificate ,QByteArray("tlsPrivateKeyCertificate"      ));
-   roles.insert(Account::Role::TlsServerName            ,QByteArray("tlsServerName"                 ));
-   roles.insert(Account::Role::SipStunServer            ,QByteArray("sipStunServer"                 ));
-   roles.insert(Account::Role::PublishedAddress         ,QByteArray("publishedAddress"              ));
-   roles.insert(Account::Role::LocalInterface           ,QByteArray("localInterface"                ));
-   roles.insert(Account::Role::RingtonePath             ,QByteArray("ringtonePath"                  ));
-   roles.insert(Account::Role::TlsMethod                ,QByteArray("tlsMethod"                     ));
-   roles.insert(Account::Role::RegistrationExpire       ,QByteArray("registrationExpire"            ));
-   roles.insert(Account::Role::TlsNegotiationTimeoutSec ,QByteArray("tlsNegotiationTimeoutSec"      ));
-   roles.insert(Account::Role::TlsNegotiationTimeoutMsec,QByteArray("tlsNegotiationTimeoutMsec"     ));
-   roles.insert(Account::Role::LocalPort                ,QByteArray("localPort"                     ));
-   roles.insert(Account::Role::TlsListenerPort          ,QByteArray("tlsListenerPort"               ));
-   roles.insert(Account::Role::PublishedPort            ,QByteArray("publishedPort"                 ));
-   roles.insert(Account::Role::Enabled                  ,QByteArray("enabled"                       ));
-   roles.insert(Account::Role::AutoAnswer               ,QByteArray("autoAnswer"                    ));
-   roles.insert(Account::Role::TlsVerifyServer          ,QByteArray("tlsVerifyServer"               ));
-   roles.insert(Account::Role::TlsVerifyClient          ,QByteArray("tlsVerifyClient"               ));
-   roles.insert(Account::Role::TlsRequireClientCertificate,QByteArray("tlsRequireClientCertificate" ));
-   roles.insert(Account::Role::TlsEnabled               ,QByteArray("tlsEnabled"                    ));
-   roles.insert(Account::Role::DisplaySasOnce           ,QByteArray("displaySasOnce"                ));
-   roles.insert(Account::Role::SrtpRtpFallback          ,QByteArray("srtpRtpFallback"               ));
-   roles.insert(Account::Role::ZrtpDisplaySas           ,QByteArray("zrtpDisplaySas"                ));
-   roles.insert(Account::Role::ZrtpNotSuppWarning       ,QByteArray("zrtpNotSuppWarning"            ));
-   roles.insert(Account::Role::ZrtpHelloHash            ,QByteArray("zrtpHelloHash"                 ));
-   roles.insert(Account::Role::SipStunEnabled           ,QByteArray("sipStunEnabled"                ));
-   roles.insert(Account::Role::PublishedSameAsLocal     ,QByteArray("publishedSameAsLocal"          ));
-   roles.insert(Account::Role::RingtoneEnabled          ,QByteArray("ringtoneEnabled"               ));
-   roles.insert(Account::Role::dTMFType                 ,QByteArray("dTMFType"                      ));
-   roles.insert(Account::Role::Id                       ,QByteArray("id"                            ));
-   roles.insert(Account::Role::Object                   ,QByteArray("object"                        ));
-   roles.insert(Account::Role::TypeName                 ,QByteArray("typeName"                      ));
-   roles.insert(Account::Role::PresenceStatus           ,QByteArray("presenceStatus"                ));
-   roles.insert(Account::Role::PresenceMessage          ,QByteArray("presenceMessage"               ));
-
-   q_ptr->setRoleNames(roles);
+QHash<int,QByteArray> AccountModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(Account::Role::Alias                    ,QByteArray("alias"                         ));
+      roles.insert(Account::Role::Proto                    ,QByteArray("protocol"                      ));
+      roles.insert(Account::Role::Hostname                 ,QByteArray("hostname"                      ));
+      roles.insert(Account::Role::Username                 ,QByteArray("username"                      ));
+      roles.insert(Account::Role::Mailbox                  ,QByteArray("mailbox"                       ));
+      roles.insert(Account::Role::Proxy                    ,QByteArray("proxy"                         ));
+      roles.insert(Account::Role::TlsPassword              ,QByteArray("tlsPassword"                   ));
+      roles.insert(Account::Role::TlsCaListCertificate     ,QByteArray("tlsCaListCertificate"          ));
+      roles.insert(Account::Role::TlsCertificate           ,QByteArray("tlsCertificate"                ));
+      roles.insert(Account::Role::TlsPrivateKeyCertificate ,QByteArray("tlsPrivateKeyCertificate"      ));
+      roles.insert(Account::Role::TlsServerName            ,QByteArray("tlsServerName"                 ));
+      roles.insert(Account::Role::SipStunServer            ,QByteArray("sipStunServer"                 ));
+      roles.insert(Account::Role::PublishedAddress         ,QByteArray("publishedAddress"              ));
+      roles.insert(Account::Role::LocalInterface           ,QByteArray("localInterface"                ));
+      roles.insert(Account::Role::RingtonePath             ,QByteArray("ringtonePath"                  ));
+      roles.insert(Account::Role::TlsMethod                ,QByteArray("tlsMethod"                     ));
+      roles.insert(Account::Role::RegistrationExpire       ,QByteArray("registrationExpire"            ));
+      roles.insert(Account::Role::TlsNegotiationTimeoutSec ,QByteArray("tlsNegotiationTimeoutSec"      ));
+      roles.insert(Account::Role::TlsNegotiationTimeoutMsec,QByteArray("tlsNegotiationTimeoutMsec"     ));
+      roles.insert(Account::Role::LocalPort                ,QByteArray("localPort"                     ));
+      roles.insert(Account::Role::TlsListenerPort          ,QByteArray("tlsListenerPort"               ));
+      roles.insert(Account::Role::PublishedPort            ,QByteArray("publishedPort"                 ));
+      roles.insert(Account::Role::Enabled                  ,QByteArray("enabled"                       ));
+      roles.insert(Account::Role::AutoAnswer               ,QByteArray("autoAnswer"                    ));
+      roles.insert(Account::Role::TlsVerifyServer          ,QByteArray("tlsVerifyServer"               ));
+      roles.insert(Account::Role::TlsVerifyClient          ,QByteArray("tlsVerifyClient"               ));
+      roles.insert(Account::Role::TlsRequireClientCertificate,QByteArray("tlsRequireClientCertificate" ));
+      roles.insert(Account::Role::TlsEnabled               ,QByteArray("tlsEnabled"                    ));
+      roles.insert(Account::Role::DisplaySasOnce           ,QByteArray("displaySasOnce"                ));
+      roles.insert(Account::Role::SrtpRtpFallback          ,QByteArray("srtpRtpFallback"               ));
+      roles.insert(Account::Role::ZrtpDisplaySas           ,QByteArray("zrtpDisplaySas"                ));
+      roles.insert(Account::Role::ZrtpNotSuppWarning       ,QByteArray("zrtpNotSuppWarning"            ));
+      roles.insert(Account::Role::ZrtpHelloHash            ,QByteArray("zrtpHelloHash"                 ));
+      roles.insert(Account::Role::SipStunEnabled           ,QByteArray("sipStunEnabled"                ));
+      roles.insert(Account::Role::PublishedSameAsLocal     ,QByteArray("publishedSameAsLocal"          ));
+      roles.insert(Account::Role::RingtoneEnabled          ,QByteArray("ringtoneEnabled"               ));
+      roles.insert(Account::Role::dTMFType                 ,QByteArray("dTMFType"                      ));
+      roles.insert(Account::Role::Id                       ,QByteArray("id"                            ));
+      roles.insert(Account::Role::Object                   ,QByteArray("object"                        ));
+      roles.insert(Account::Role::TypeName                 ,QByteArray("typeName"                      ));
+      roles.insert(Account::Role::PresenceStatus           ,QByteArray("presenceStatus"                ));
+      roles.insert(Account::Role::PresenceMessage          ,QByteArray("presenceMessage"               ));
+   }
+   return roles;
 }
 
 ///Get the IP2IP account
diff --git a/src/accountmodel.h b/src/accountmodel.h
index 6b82f52bf7c04830602af2ff101edf41d763f12e..adb1a82cb78cca9a01a087429d36fc9d6a838994 100644
--- a/src/accountmodel.h
+++ b/src/accountmodel.h
@@ -52,22 +52,23 @@ public:
    //Getters
    Q_INVOKABLE Account*        getById                     ( const QByteArray& id, bool ph = false) const;
    int                         size                        (                                      ) const;
-   static Account*             currentAccount              (                                      );
+   static Account*             currentAccount              (                                      )      ;
    Account*                    getAccountByModelIndex      ( const QModelIndex& item              ) const;
-   static QString              getSimilarAliasIndex        ( const QString& alias                 );
+   static QString              getSimilarAliasIndex        ( const QString& alias                 )      ;
    Account*                    ip2ip                       (                                      ) const;
    bool                        isPresenceEnabled           (                                      ) const;
    bool                        isPresencePublishSupported  (                                      ) const;
    bool                        isPresenceSubscribeSupported(                                      ) const;
 
    //Abstract model accessors
-   QVariant      data     ( const QModelIndex& index, int role = Qt::DisplayRole ) const;
-   int           rowCount ( const QModelIndex& parent = QModelIndex()            ) const;
-   Qt::ItemFlags flags    ( const QModelIndex& index                             ) const;
+   virtual QVariant              data     ( const QModelIndex& index, int role = Qt::DisplayRole     ) const override;
+   virtual int                   rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
+   virtual Qt::ItemFlags         flags    ( const QModelIndex& index                                 ) const override;
+   virtual bool                  setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames(                                                          ) const override;
 
    //Setters
-   void setPriorAccount          ( const Account*                                           );
-   virtual bool setData          ( const QModelIndex& index, const QVariant &value, int role);
+   void setPriorAccount ( const Account* );
 
    //Mutators
    Q_INVOKABLE Account* add                 ( const QString& alias     );
diff --git a/src/accountstatusmodel.cpp b/src/accountstatusmodel.cpp
index 96ce35a560cb31e2d7dda2414d65b2f56b397ebc..668601d3e6d71205b069f768a99b706adc8a45fb 100644
--- a/src/accountstatusmodel.cpp
+++ b/src/accountstatusmodel.cpp
@@ -344,6 +344,17 @@ d_ptr(new AccountStatusModelPrivate(parent))
 AccountStatusModel::~AccountStatusModel()
 {}
 
+QHash<int,QByteArray> AccountStatusModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Model functions
 QVariant AccountStatusModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/accountstatusmodel.h b/src/accountstatusmodel.h
index bddb74a954f60e0009c8bf6896d454b4de55debb..f753545f4d6486207bec3dca0893f596079a2a8c 100644
--- a/src/accountstatusmodel.h
+++ b/src/accountstatusmodel.h
@@ -60,6 +60,7 @@ public:
    virtual int           columnCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags       ( const QModelIndex& index                                 ) const override;
    virtual bool          setData     ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
 private:
    //Private mutators
diff --git a/src/audio/alsapluginmodel.cpp b/src/audio/alsapluginmodel.cpp
index 482849cb62a85c5e45a22c0017f485a98d9ec99a..9553c5d68043e8a02723f66cffa866d8ea548ad9 100644
--- a/src/audio/alsapluginmodel.cpp
+++ b/src/audio/alsapluginmodel.cpp
@@ -33,7 +33,7 @@ private:
 
 AlsaPluginModelPrivate::AlsaPluginModelPrivate(Audio::AlsaPluginModel* parent) : q_ptr(parent)
 {
-   
+
 }
 
 ///Constructor
@@ -47,7 +47,18 @@ d_ptr(new AlsaPluginModelPrivate(this))
 ///Destructor
 Audio::AlsaPluginModel::~AlsaPluginModel()
 {
-   
+
+}
+
+QHash<int,QByteArray> Audio::AlsaPluginModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
 }
 
 ///Re-implement QAbstractListModel data
diff --git a/src/audio/alsapluginmodel.h b/src/audio/alsapluginmodel.h
index 84d41854aa8a004f452d11e58b7f3bad1f454776..5436c6002f8c481c8d369279e7a8b5106e2c3850 100644
--- a/src/audio/alsapluginmodel.h
+++ b/src/audio/alsapluginmodel.h
@@ -41,6 +41,7 @@ public:
    virtual int           rowCount( const QModelIndex& parent = QModelIndex()            ) const override;
    virtual Qt::ItemFlags flags   ( const QModelIndex& index                             ) const override;
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, int role) override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex currentPlugin() const;
diff --git a/src/audio/codecmodel.cpp b/src/audio/codecmodel.cpp
index 1b350f78672fb03e55d0a06ba66d94ecfa9efb8d..a33563eb38b0aeccfc27eba4c55b6eb3e707477a 100644
--- a/src/audio/codecmodel.cpp
+++ b/src/audio/codecmodel.cpp
@@ -61,12 +61,6 @@ QAbstractListModel(account?(QObject*)account:(QObject*)QCoreApplication::instanc
 {
    d_ptr->m_pAccount = account;
    setObjectName("CodecModel: "+(account?account->id():"Unknown"));
-   QHash<int, QByteArray> roles = roleNames();
-   roles.insert(Audio::CodecModel::Role::ID        ,QByteArray("id"));
-   roles.insert(Audio::CodecModel::Role::NAME      ,QByteArray("name"));
-   roles.insert(Audio::CodecModel::Role::BITRATE   ,QByteArray("bitrate"));
-   roles.insert(Audio::CodecModel::Role::SAMPLERATE,QByteArray("samplerate"));
-   setRoleNames(roles);
 }
 
 Audio::CodecModel::~CodecModel()
@@ -78,6 +72,20 @@ Audio::CodecModel::~CodecModel()
    }
 }
 
+QHash<int,QByteArray> Audio::CodecModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(Audio::CodecModel::Role::ID        ,QByteArray("id"));
+      roles.insert(Audio::CodecModel::Role::NAME      ,QByteArray("name"));
+      roles.insert(Audio::CodecModel::Role::BITRATE   ,QByteArray("bitrate"));
+      roles.insert(Audio::CodecModel::Role::SAMPLERATE,QByteArray("samplerate"));
+   }
+   return roles;
+}
+
 ///Model data
 QVariant Audio::CodecModel::data(const QModelIndex& idx, int role) const {
    if(idx.column() == 0      && role == Qt::DisplayRole                   ) {
diff --git a/src/audio/codecmodel.h b/src/audio/codecmodel.h
index 9b8e420e355cda7f1aa18acc24a17f4d54465603..01829a07d0a640bd97904a8394ba45163bc0fed0 100644
--- a/src/audio/codecmodel.h
+++ b/src/audio/codecmodel.h
@@ -52,10 +52,11 @@ public:
    virtual ~CodecModel();
 
    //Abstract model member
-   QVariant data        (const QModelIndex& index, int role = Qt::DisplayRole      ) const override;
-   int rowCount         (const QModelIndex& parent = QModelIndex()                 ) const override;
-   Qt::ItemFlags flags  (const QModelIndex& index                                  ) const override;
+   virtual QVariant data        (const QModelIndex& index, int role = Qt::DisplayRole      ) const override;
+   virtual int rowCount         (const QModelIndex& parent = QModelIndex()                 ) const override;
+   virtual Qt::ItemFlags flags  (const QModelIndex& index                                  ) const override;
    virtual bool setData (const QModelIndex& index, const QVariant &value, int role )       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Mutator
    QModelIndex add();
diff --git a/src/audio/inputdevicemodel.cpp b/src/audio/inputdevicemodel.cpp
index 9e510299c688d731126eb40fd9ac1bf612518d23..4e3f7b9b9040c52401813ad36df2b2ff374703d9 100644
--- a/src/audio/inputdevicemodel.cpp
+++ b/src/audio/inputdevicemodel.cpp
@@ -34,7 +34,18 @@ private:
 
 InputDeviceModelPrivate::InputDeviceModelPrivate(Audio::InputDeviceModel* parent) : q_ptr(parent)
 {
-   
+
+}
+
+QHash<int,QByteArray> Audio::InputDeviceModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
 }
 
 ///Constructor
diff --git a/src/audio/inputdevicemodel.h b/src/audio/inputdevicemodel.h
index 2abc25df3f0b5f3c6b4bb5e4dbb8cc2a5acb7b5c..f71b4fbfb1e9729c9b33823814f136901c91c495 100644
--- a/src/audio/inputdevicemodel.h
+++ b/src/audio/inputdevicemodel.h
@@ -41,6 +41,7 @@ public:
    virtual int           rowCount( const QModelIndex& parent = QModelIndex()            ) const override;
    virtual Qt::ItemFlags flags   ( const QModelIndex& index                             ) const override;
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, int role)   override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex currentDevice() const;
diff --git a/src/audio/managermodel.cpp b/src/audio/managermodel.cpp
index 9fd9af47e08920f144a167d63f8779f0afb17e4e..72981a2560421d182ab5f2e31faa34f15b61a160 100644
--- a/src/audio/managermodel.cpp
+++ b/src/audio/managermodel.cpp
@@ -75,6 +75,17 @@ Audio::ManagerModel::~ManagerModel()
    d_ptr->m_lDeviceList.clear();
 }
 
+QHash<int,QByteArray> Audio::ManagerModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 ///Re-implement QAbstractListModel data
 QVariant Audio::ManagerModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/audio/managermodel.h b/src/audio/managermodel.h
index 5ed998ca1c22da13e583a120cfc4430dbf2a4fbb..40217217d407d7f7175beb90c3f920cdf19bf9d9 100644
--- a/src/audio/managermodel.h
+++ b/src/audio/managermodel.h
@@ -47,6 +47,7 @@ public:
    virtual int           rowCount( const QModelIndex& parent = QModelIndex()            ) const override;
    virtual Qt::ItemFlags flags   ( const QModelIndex& index                             ) const override;
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, int role)   override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex currentManagerIndex() const;
diff --git a/src/audio/outputdevicemodel.cpp b/src/audio/outputdevicemodel.cpp
index 987f0b8cc6c93f118076c857c2487fff7a62e044..9a4daa8081ee8f88a552f2d8f3c3c91179754d4f 100644
--- a/src/audio/outputdevicemodel.cpp
+++ b/src/audio/outputdevicemodel.cpp
@@ -36,7 +36,7 @@ private:
 
 OutputDeviceModelPrivate::OutputDeviceModelPrivate(Audio::OutputDeviceModel* parent) : q_ptr(parent)
 {
-   
+
 }
 
 ///Constructor
@@ -50,7 +50,18 @@ d_ptr(new OutputDeviceModelPrivate(this))
 ///Destructor
 Audio::OutputDeviceModel::~OutputDeviceModel()
 {
-   
+
+}
+
+QHash<int,QByteArray> Audio::OutputDeviceModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
 }
 
 ///Re-implement QAbstractListModel data
diff --git a/src/audio/outputdevicemodel.h b/src/audio/outputdevicemodel.h
index faabf5a5573deb023dc5d2df563651ddad8ec5fb..3b79e1c4363fbbb6aa91666a2f356c608a084cba 100644
--- a/src/audio/outputdevicemodel.h
+++ b/src/audio/outputdevicemodel.h
@@ -41,6 +41,7 @@ public:
    virtual int           rowCount( const QModelIndex& parent = QModelIndex()            ) const override;
    virtual Qt::ItemFlags flags   ( const QModelIndex& index                             ) const override;
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, int role)   override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex currentDevice() const;
diff --git a/src/audio/ringtonedevicemodel.cpp b/src/audio/ringtonedevicemodel.cpp
index aa2d308eb1bd053c7eb89ff5cb129bd00f796fe7..46710d0434256711972b6025447c3c19f878c23f 100644
--- a/src/audio/ringtonedevicemodel.cpp
+++ b/src/audio/ringtonedevicemodel.cpp
@@ -48,7 +48,18 @@ d_ptr(new RingtoneDeviceModelPrivate(this))
 ///Destructor
 Audio::RingtoneDeviceModel::~RingtoneDeviceModel()
 {
-   
+
+}
+
+QHash<int,QByteArray> Audio::RingtoneDeviceModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
 }
 
 ///Re-implement QAbstractListModel data
diff --git a/src/audio/ringtonedevicemodel.h b/src/audio/ringtonedevicemodel.h
index 54b6715abf15ff69c170125fff71ca593025da79..750566b42534c06f485db29c97ae4caaded8ff11 100644
--- a/src/audio/ringtonedevicemodel.h
+++ b/src/audio/ringtonedevicemodel.h
@@ -41,6 +41,7 @@ public:
    virtual int           rowCount( const QModelIndex& parent = QModelIndex()            ) const override;
    virtual Qt::ItemFlags flags   ( const QModelIndex& index                             ) const override;
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, int role)   override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex currentDevice() const;
diff --git a/src/bookmarkmodel.cpp b/src/bookmarkmodel.cpp
index 0acfa5d7e926f91cb4a7a5b4fb9ae6b28dbc03e5..837e3db9b75837a72cb900e99302981450e4854b 100644
--- a/src/bookmarkmodel.cpp
+++ b/src/bookmarkmodel.cpp
@@ -159,6 +159,17 @@ BookmarkModel* BookmarkModel::instance()
    return m_spInstance;
 }
 
+QHash<int,QByteArray> BookmarkModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[Call::Role::Name] = CallModel::instance()->roleNames()[Call::Role::Name];
+   }
+   return roles;
+}
+
 ///Reload bookmark cateogries
 void BookmarkModel::reloadCategories()
 {
diff --git a/src/bookmarkmodel.h b/src/bookmarkmodel.h
index 37195d84e997b3f87482c5ddb75fa4d63bd36ce4..d7b08d17e0623c3a62efcb694c74d2d770ef71b9 100644
--- a/src/bookmarkmodel.h
+++ b/src/bookmarkmodel.h
@@ -67,6 +67,7 @@ public:
    virtual QStringList   mimeTypes   (                                                             ) const override;
    virtual QMimeData*    mimeData    ( const QModelIndexList &indexes                              ) const override;
    virtual QVariant      headerData  ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Management
    void remove        (const QModelIndex& idx );
diff --git a/src/callmodel.cpp b/src/callmodel.cpp
index 683c56414ca09a31f2c69319c0b9e3d341976b7e..1b6a08a0aecc03250ad13f747742d0737ef218c9 100644
--- a/src/callmodel.cpp
+++ b/src/callmodel.cpp
@@ -82,7 +82,6 @@ public:
 
       //Helpers
       bool isPartOf(const QModelIndex& confIdx, Call* call);
-      void initRoles();
       void removeConference       ( Call* conf                    );
       void removeInternal(InternalStruct* internal);
 
@@ -139,7 +138,6 @@ CallModel::CallModel() : QAbstractItemModel(QCoreApplication::instance()),d_ptr(
 void CallModelPrivate::init()
 {
    static bool dbusInit = false;
-   initRoles();
    if (!dbusInit) {
       CallManagerInterface& callManager = DBus::CallManager::instance();
       #ifdef ENABLE_VIDEO
@@ -209,35 +207,39 @@ CallModel::~CallModel()
 #endif //ENABLE_LIBWRAP
 }
 
-void CallModelPrivate::initRoles()
+QHash<int,QByteArray> CallModel::roleNames() const
 {
-   QHash<int, QByteArray> roles = q_ptr->roleNames();
-   roles.insert(Call::Role::Name          ,QByteArray("name"));
-   roles.insert(Call::Role::Number        ,QByteArray("number"));
-   roles.insert(Call::Role::Direction2    ,QByteArray("direction"));
-   roles.insert(Call::Role::Date          ,QByteArray("date"));
-   roles.insert(Call::Role::Length        ,QByteArray("length"));
-   roles.insert(Call::Role::FormattedDate ,QByteArray("formattedDate"));
-   roles.insert(Call::Role::HasRecording  ,QByteArray("hasRecording"));
-   roles.insert(Call::Role::Historystate  ,QByteArray("historyState"));
-   roles.insert(Call::Role::Filter        ,QByteArray("filter"));
-   roles.insert(Call::Role::FuzzyDate     ,QByteArray("fuzzyDate"));
-   roles.insert(Call::Role::IsBookmark    ,QByteArray("isBookmark"));
-   roles.insert(Call::Role::Security      ,QByteArray("security"));
-   roles.insert(Call::Role::Department    ,QByteArray("department"));
-   roles.insert(Call::Role::Email         ,QByteArray("email"));
-   roles.insert(Call::Role::Organisation  ,QByteArray("organisation"));
-   roles.insert(Call::Role::Object        ,QByteArray("object"));
-   roles.insert(Call::Role::PhotoPtr      ,QByteArray("photoPtr"));
-   roles.insert(Call::Role::CallState     ,QByteArray("callState"));
-   roles.insert(Call::Role::Id            ,QByteArray("id"));
-   roles.insert(Call::Role::StartTime     ,QByteArray("startTime"));
-   roles.insert(Call::Role::StopTime      ,QByteArray("stopTime"));
-   roles.insert(Call::Role::DropState     ,QByteArray("dropState"));
-   roles.insert(Call::Role::DTMFAnimState ,QByteArray("dTMFAnimState"));
-   roles.insert(Call::Role::LastDTMFidx   ,QByteArray("lastDTMFidx"));
-   roles.insert(Call::Role::IsRecording   ,QByteArray("isRecording"));
-   q_ptr->setRoleNames(roles);
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(Call::Role::Name          ,QByteArray("name"));
+      roles.insert(Call::Role::Number        ,QByteArray("number"));
+      roles.insert(Call::Role::Direction2    ,QByteArray("direction"));
+      roles.insert(Call::Role::Date          ,QByteArray("date"));
+      roles.insert(Call::Role::Length        ,QByteArray("length"));
+      roles.insert(Call::Role::FormattedDate ,QByteArray("formattedDate"));
+      roles.insert(Call::Role::HasRecording  ,QByteArray("hasRecording"));
+      roles.insert(Call::Role::Historystate  ,QByteArray("historyState"));
+      roles.insert(Call::Role::Filter        ,QByteArray("filter"));
+      roles.insert(Call::Role::FuzzyDate     ,QByteArray("fuzzyDate"));
+      roles.insert(Call::Role::IsBookmark    ,QByteArray("isBookmark"));
+      roles.insert(Call::Role::Security      ,QByteArray("security"));
+      roles.insert(Call::Role::Department    ,QByteArray("department"));
+      roles.insert(Call::Role::Email         ,QByteArray("email"));
+      roles.insert(Call::Role::Organisation  ,QByteArray("organisation"));
+      roles.insert(Call::Role::Object        ,QByteArray("object"));
+      roles.insert(Call::Role::PhotoPtr      ,QByteArray("photoPtr"));
+      roles.insert(Call::Role::CallState     ,QByteArray("callState"));
+      roles.insert(Call::Role::Id            ,QByteArray("id"));
+      roles.insert(Call::Role::StartTime     ,QByteArray("startTime"));
+      roles.insert(Call::Role::StopTime      ,QByteArray("stopTime"));
+      roles.insert(Call::Role::DropState     ,QByteArray("dropState"));
+      roles.insert(Call::Role::DTMFAnimState ,QByteArray("dTMFAnimState"));
+      roles.insert(Call::Role::LastDTMFidx   ,QByteArray("lastDTMFidx"));
+      roles.insert(Call::Role::IsRecording   ,QByteArray("isRecording"));
+   }
+   return roles;
 }
 
 
@@ -254,14 +256,12 @@ int CallModel::size()
 }
 
 ///Return the action call list
- CallList CallModel::getActiveCalls()
+CallList CallModel::getActiveCalls()
 {
    CallList callList;
-   #pragma GCC diagnostic ignored "-Wshadow"
    foreach(InternalStruct* internalS, d_ptr->m_lInternalModel) {
       callList.push_back(internalS->call_real);
       if (internalS->m_lChildren.size()) {
-         #pragma GCC diagnostic ignored "-Wshadow"
          foreach(InternalStruct* childInt,internalS->m_lChildren) {
             callList.push_back(childInt->call_real);
          }
diff --git a/src/callmodel.h b/src/callmodel.h
index 6854e66671f3d7b07eedafc090b436a1c8704048..5fe3fc660497aca9615e73c272943e500eb38c23 100644
--- a/src/callmodel.h
+++ b/src/callmodel.h
@@ -97,6 +97,7 @@ class LIB_EXPORT CallModel : public QAbstractItemModel
       virtual QStringList   mimeTypes    (                                                             ) const override;
       virtual QMimeData*    mimeData     ( const QModelIndexList &indexes                              ) const override;
       virtual bool          dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) override;
+      virtual QHash<int,QByteArray> roleNames() const override;
 
       //Singleton
       static CallModel* instance();
diff --git a/src/certificatemodel.cpp b/src/certificatemodel.cpp
index c6334eb75666f7b377f484dd843b45061288d4a2..cb3a2738eb8d662bb0d741eefb671c34f7fd1a2b 100644
--- a/src/certificatemodel.cpp
+++ b/src/certificatemodel.cpp
@@ -114,6 +114,17 @@ CertificateModel* CertificateModel::instance()
    return CertificateModelPrivate::m_spInstance;
 }
 
+QHash<int,QByteArray> CertificateModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 void CertificateNode::setStrings(const QString& col1, const QVariant& col2, const QString& tooltip)
 {
    m_Col1    = col1;
diff --git a/src/certificatemodel.h b/src/certificatemodel.h
index f71df11bb21131bd1d5ea33658079335dd001f44..f5107923070db3a3b6358a62efc8b2997249a8ff 100644
--- a/src/certificatemodel.h
+++ b/src/certificatemodel.h
@@ -47,6 +47,7 @@ public:
    virtual QModelIndex   parent      ( const QModelIndex& index                                    ) const override;
    virtual QModelIndex   index       ( int row, int column, const QModelIndex& parent=QModelIndex()) const override;
    virtual QVariant      headerData  ( int section, Qt::Orientation, int role = Qt::DisplayRole    ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Mutator
    Certificate* getCertificate(const QUrl& path, Certificate::Type type = Certificate::Type::NONE);
diff --git a/src/ciphermodel.cpp b/src/ciphermodel.cpp
index dd6a77d8fa14965701d3ef205160f2a5ba2d2c15..dff4060984a74bf12e79caa807e2548d3058b448 100644
--- a/src/ciphermodel.cpp
+++ b/src/ciphermodel.cpp
@@ -83,6 +83,17 @@ d_ptr(new CipherModelPrivate(parent))
 CipherModel::~CipherModel()
 {}
 
+QHash<int,QByteArray> CipherModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   /*if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Model functions
 QVariant CipherModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/ciphermodel.h b/src/ciphermodel.h
index 98b4c0a1525e53f99248ebda17d657829a743365..0fa83d9da1c70bf82d75f4859bdb43c8548dcad4 100644
--- a/src/ciphermodel.h
+++ b/src/ciphermodel.h
@@ -47,6 +47,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
 private:
 
diff --git a/src/collectionmodel.cpp b/src/collectionmodel.cpp
index 9e895a11837bfcd6889cbadb2ba582159499f99c..4ddc32675244adf3b6eeb7ad6ee29df9b3bb03ee 100644
--- a/src/collectionmodel.cpp
+++ b/src/collectionmodel.cpp
@@ -77,6 +77,17 @@ CollectionModel::~CollectionModel()
    }
 }
 
+QHash<int,QByteArray> CollectionModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 QVariant CollectionModel::data (const QModelIndex& idx, int role) const
 {
    if (idx.isValid()) {
diff --git a/src/collectionmodel.h b/src/collectionmodel.h
index 1c871ff6de23686b273fad206062c329533a4fae..aaec265929e07c96df94664b01ee9769e2174f06 100644
--- a/src/collectionmodel.h
+++ b/src/collectionmodel.h
@@ -47,6 +47,7 @@ public:
    virtual bool setData         (const QModelIndex& index, const QVariant &value, int role    )       override;
    virtual QModelIndex   parent ( const QModelIndex& index                                    ) const override;
    virtual QModelIndex   index  ( int row, int column, const QModelIndex& parent=QModelIndex()) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    CollectionInterface* backendAt(const QModelIndex& index);
 
diff --git a/src/contactproxymodel.cpp b/src/contactproxymodel.cpp
index 0fc82317724214f3ffe9dcd8c2cae56a32b7baf8..430bac02d423b8095f48f6156691fc94f9a63d60 100644
--- a/src/contactproxymodel.cpp
+++ b/src/contactproxymodel.cpp
@@ -195,17 +195,6 @@ ContactProxyModel::ContactProxyModel(int role, bool showAll) : QAbstractItemMode
    d_ptr->m_lMimes << RingMimes::PLAIN_TEXT << RingMimes::PHONENUMBER;
    connect(PersonModel::instance(),SIGNAL(reloaded()),d_ptr.data(),SLOT(reloadCategories()));
    connect(PersonModel::instance(),SIGNAL(newContactAdded(Person*)),d_ptr.data(),SLOT(slotContactAdded(Person*)));
-   QHash<int, QByteArray> roles = roleNames();
-   roles.insert(PersonModel::Role::Organization      ,QByteArray("organization")     );
-   roles.insert(PersonModel::Role::Group             ,QByteArray("group")            );
-   roles.insert(PersonModel::Role::Department        ,QByteArray("department")       );
-   roles.insert(PersonModel::Role::PreferredEmail    ,QByteArray("preferredEmail")   );
-   roles.insert(PersonModel::Role::FormattedLastUsed ,QByteArray("formattedLastUsed"));
-   roles.insert(PersonModel::Role::IndexedLastUsed   ,QByteArray("indexedLastUsed")  );
-   roles.insert(PersonModel::Role::DatedLastUsed     ,QByteArray("datedLastUsed")    );
-   roles.insert(PersonModel::Role::Filter            ,QByteArray("filter")           );
-   roles.insert(PersonModel::Role::DropState         ,QByteArray("dropState")        );
-   setRoleNames(roles);
 }
 
 ContactProxyModel::~ContactProxyModel()
@@ -215,6 +204,25 @@ ContactProxyModel::~ContactProxyModel()
    }
 }
 
+QHash<int,QByteArray> ContactProxyModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(PersonModel::Role::Organization      ,QByteArray("organization")     );
+      roles.insert(PersonModel::Role::Group             ,QByteArray("group")            );
+      roles.insert(PersonModel::Role::Department        ,QByteArray("department")       );
+      roles.insert(PersonModel::Role::PreferredEmail    ,QByteArray("preferredEmail")   );
+      roles.insert(PersonModel::Role::FormattedLastUsed ,QByteArray("formattedLastUsed"));
+      roles.insert(PersonModel::Role::IndexedLastUsed   ,QByteArray("indexedLastUsed")  );
+      roles.insert(PersonModel::Role::DatedLastUsed     ,QByteArray("datedLastUsed")    );
+      roles.insert(PersonModel::Role::Filter            ,QByteArray("filter")           );
+      roles.insert(PersonModel::Role::DropState         ,QByteArray("dropState")        );
+   }
+   return roles;
+}
+
 ContactTopLevelItem* ContactProxyModelPrivate::getContactTopLevelItem(const QString& category)
 {
    if (!m_hCategories[category]) {
diff --git a/src/contactproxymodel.h b/src/contactproxymodel.h
index a33bc18fd25353d0a0b427b56cc81fcae2c51dfa..f6b39c0cfe24bea3fc79666424f4b45033d8be27 100644
--- a/src/contactproxymodel.h
+++ b/src/contactproxymodel.h
@@ -60,6 +60,7 @@ public:
    virtual QStringList   mimeTypes   (                                                             ) const override;
    virtual QMimeData*    mimeData    ( const QModelIndexList &indexes                              ) const override;
    virtual bool dropMimeData         ( const QMimeData*, Qt::DropAction, int, int, const QModelIndex& ) override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getter
    static int acceptedPayloadTypes();
diff --git a/src/credentialmodel.cpp b/src/credentialmodel.cpp
index cb2c7dcf6321d0e73aaf456212d9a566184eb503..b729c8660c6a2cf80f32a41d98c131f6db576b14 100644
--- a/src/credentialmodel.cpp
+++ b/src/credentialmodel.cpp
@@ -39,10 +39,6 @@ CredentialModel::CredentialModel(QObject* par) : QAbstractListModel(par?par:QCor
 d_ptr(new CredentialModelPrivate())
 {
    QHash<int, QByteArray> roles = roleNames();
-   roles.insert(CredentialModel::Role::NAME    ,QByteArray("name"));
-   roles.insert(CredentialModel::Role::PASSWORD,QByteArray("password"));
-   roles.insert(CredentialModel::Role::REALM   ,QByteArray("realm"));
-   setRoleNames(roles);
 }
 
 CredentialModel::~CredentialModel()
@@ -52,6 +48,19 @@ CredentialModel::~CredentialModel()
    }
 }
 
+QHash<int,QByteArray> CredentialModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(CredentialModel::Role::NAME    ,QByteArray("name"));
+      roles.insert(CredentialModel::Role::PASSWORD,QByteArray("password"));
+      roles.insert(CredentialModel::Role::REALM   ,QByteArray("realm"));
+   }
+   return roles;
+}
+
 ///Model data
 QVariant CredentialModel::data(const QModelIndex& idx, int role) const {
    if (idx.column() == 0) {
diff --git a/src/credentialmodel.h b/src/credentialmodel.h
index c065c33c2165f9b0930b082fcb56d484a7a20dcc..b208af43152b3df852dc1aaa2ff9653cc54f3577 100644
--- a/src/credentialmodel.h
+++ b/src/credentialmodel.h
@@ -48,6 +48,7 @@ public:
    int rowCount(const QModelIndex& parent = QModelIndex()             ) const override;
    Qt::ItemFlags flags(const QModelIndex& index                       ) const override;
    virtual bool setData(const QModelIndex& index, const QVariant &value, int role) override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Mutator
    QModelIndex addCredentials();
diff --git a/src/historymodel.cpp b/src/historymodel.cpp
index a101aab3efa35411c73e7bb3d83a14a98c2882a4..9023b683d5e4e8b9b74480ddb1b0465ee2d47ca6 100644
--- a/src/historymodel.cpp
+++ b/src/historymodel.cpp
@@ -191,33 +191,6 @@ HistoryModel::HistoryModel():QAbstractItemModel(QCoreApplication::instance()),d_
 {
    m_spInstance  = this;
    d_ptr->m_lMimes << RingMimes::PLAIN_TEXT << RingMimes::PHONENUMBER << RingMimes::HISTORYID;
-   QHash<int, QByteArray> roles = roleNames();
-   roles.insert(Call::Role::Name          ,QByteArray("name"          ));
-   roles.insert(Call::Role::Number        ,QByteArray("number"        ));
-   roles.insert(Call::Role::Direction2    ,QByteArray("direction"     ));
-   roles.insert(Call::Role::Date          ,QByteArray("date"          ));
-   roles.insert(Call::Role::Length        ,QByteArray("length"        ));
-   roles.insert(Call::Role::FormattedDate ,QByteArray("formattedDate" ));
-   roles.insert(Call::Role::HasRecording  ,QByteArray("hasRecording"  ));
-   roles.insert(Call::Role::Historystate  ,QByteArray("historyState"  ));
-   roles.insert(Call::Role::Filter        ,QByteArray("filter"        ));
-   roles.insert(Call::Role::FuzzyDate     ,QByteArray("fuzzyDate"     ));
-   roles.insert(Call::Role::IsBookmark    ,QByteArray("isBookmark"    ));
-   roles.insert(Call::Role::Security      ,QByteArray("security"      ));
-   roles.insert(Call::Role::Department    ,QByteArray("department"    ));
-   roles.insert(Call::Role::Email         ,QByteArray("email"         ));
-   roles.insert(Call::Role::Organisation  ,QByteArray("organisation"  ));
-   roles.insert(Call::Role::Object        ,QByteArray("object"        ));
-   roles.insert(Call::Role::PhotoPtr      ,QByteArray("photoPtr"      ));
-   roles.insert(Call::Role::CallState     ,QByteArray("callState"     ));
-   roles.insert(Call::Role::Id            ,QByteArray("id"            ));
-   roles.insert(Call::Role::StartTime     ,QByteArray("startTime"     ));
-   roles.insert(Call::Role::StopTime      ,QByteArray("stopTime"      ));
-   roles.insert(Call::Role::DropState     ,QByteArray("dropState"     ));
-   roles.insert(Call::Role::DTMFAnimState ,QByteArray("dTMFAnimState" ));
-   roles.insert(Call::Role::LastDTMFidx   ,QByteArray("lastDTMFidx"   ));
-   roles.insert(Call::Role::IsRecording   ,QByteArray("isRecording"   ));
-   setRoleNames(roles);
 } //initHistory
 
 ///Destructor
@@ -235,6 +208,41 @@ HistoryModel::~HistoryModel()
    m_spInstance = nullptr;
 }
 
+QHash<int,QByteArray> HistoryModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(Call::Role::Name          ,QByteArray("name"          ));
+      roles.insert(Call::Role::Number        ,QByteArray("number"        ));
+      roles.insert(Call::Role::Direction2    ,QByteArray("direction"     ));
+      roles.insert(Call::Role::Date          ,QByteArray("date"          ));
+      roles.insert(Call::Role::Length        ,QByteArray("length"        ));
+      roles.insert(Call::Role::FormattedDate ,QByteArray("formattedDate" ));
+      roles.insert(Call::Role::HasRecording  ,QByteArray("hasRecording"  ));
+      roles.insert(Call::Role::Historystate  ,QByteArray("historyState"  ));
+      roles.insert(Call::Role::Filter        ,QByteArray("filter"        ));
+      roles.insert(Call::Role::FuzzyDate     ,QByteArray("fuzzyDate"     ));
+      roles.insert(Call::Role::IsBookmark    ,QByteArray("isBookmark"    ));
+      roles.insert(Call::Role::Security      ,QByteArray("security"      ));
+      roles.insert(Call::Role::Department    ,QByteArray("department"    ));
+      roles.insert(Call::Role::Email         ,QByteArray("email"         ));
+      roles.insert(Call::Role::Organisation  ,QByteArray("organisation"  ));
+      roles.insert(Call::Role::Object        ,QByteArray("object"        ));
+      roles.insert(Call::Role::PhotoPtr      ,QByteArray("photoPtr"      ));
+      roles.insert(Call::Role::CallState     ,QByteArray("callState"     ));
+      roles.insert(Call::Role::Id            ,QByteArray("id"            ));
+      roles.insert(Call::Role::StartTime     ,QByteArray("startTime"     ));
+      roles.insert(Call::Role::StopTime      ,QByteArray("stopTime"      ));
+      roles.insert(Call::Role::DropState     ,QByteArray("dropState"     ));
+      roles.insert(Call::Role::DTMFAnimState ,QByteArray("dTMFAnimState" ));
+      roles.insert(Call::Role::LastDTMFidx   ,QByteArray("lastDTMFidx"   ));
+      roles.insert(Call::Role::IsRecording   ,QByteArray("isRecording"   ));
+   }
+   return roles;
+}
+
 ///Singleton
 HistoryModel* HistoryModel::instance()
 {
diff --git a/src/historymodel.h b/src/historymodel.h
index 6ee0954d18f54ba59b6bc9f24ce7bda3ac7f9393..af0e034057750c77f0a39c93cdd97a242cfba94a 100644
--- a/src/historymodel.h
+++ b/src/historymodel.h
@@ -81,7 +81,7 @@ public:
    virtual QMimeData*    mimeData    ( const QModelIndexList &indexes                              ) const override;
    virtual bool          dropMimeData( const QMimeData*, Qt::DropAction, int, int, const QModelIndex& ) override;
    virtual bool          insertRows  ( int row, int count, const QModelIndex & parent = QModelIndex() ) override;
-
+   virtual QHash<int,QByteArray> roleNames() const override;
 
 private:
    //Constructor
diff --git a/src/historytimecategorymodel.cpp b/src/historytimecategorymodel.cpp
index 1192619d088ac65ff450b18d7110e4346a66fb16..169a6ed79e6f1d97619fdd36a6a8ad5b2af88bde 100644
--- a/src/historytimecategorymodel.cpp
+++ b/src/historytimecategorymodel.cpp
@@ -56,6 +56,17 @@ HistoryTimeCategoryModel::HistoryTimeCategoryModel(QObject* parent) : QAbstractL
    m_lCategories << tr("Never")                                 ;//24
 }
 
+QHash<int,QByteArray> HistoryTimeCategoryModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Abstract model member
 QVariant HistoryTimeCategoryModel::data(const QModelIndex& index, int role ) const
 {
diff --git a/src/historytimecategorymodel.h b/src/historytimecategorymodel.h
index 735fbfea83d74ca5a844062fb997c856263c88e2..38c03b39eb446e90323285b8dfef4be5fa43653f 100644
--- a/src/historytimecategorymodel.h
+++ b/src/historytimecategorymodel.h
@@ -67,6 +67,7 @@ public:
    virtual int           rowCount(const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags   (const QModelIndex& index                                 ) const override;
    virtual bool          setData (const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    static QString indexToName(int idx);
diff --git a/src/instantmessagingmodel.cpp b/src/instantmessagingmodel.cpp
index d96fdb6e218b7918b30a17b7fc403163aca17859..5400c8a7435007ab6819af03095bf201659b41db 100644
--- a/src/instantmessagingmodel.cpp
+++ b/src/instantmessagingmodel.cpp
@@ -33,14 +33,6 @@ InstantMessagingModelPrivate::InstantMessagingModelPrivate(InstantMessagingModel
 InstantMessagingModel::InstantMessagingModel(Call* call, QObject* par) : QAbstractListModel(par), d_ptr(new InstantMessagingModelPrivate(this))
 {
    d_ptr->m_pCall = call;
-   //QStringList callList = callManager.getCallList();
-   QHash<int, QByteArray> roles = roleNames();
-   roles.insert(InstantMessagingModel::Role::TYPE    ,QByteArray("type"));
-   roles.insert(InstantMessagingModel::Role::FROM    ,QByteArray("from"));
-   roles.insert(InstantMessagingModel::Role::TEXT    ,QByteArray("text"));
-   roles.insert(InstantMessagingModel::Role::IMAGE   ,QByteArray("image"));
-   roles.insert(InstantMessagingModel::Role::CONTACT ,QByteArray("contact"));
-   setRoleNames(roles);
 }
 
 InstantMessagingModel::~InstantMessagingModel()
@@ -48,6 +40,21 @@ InstantMessagingModel::~InstantMessagingModel()
 //    delete d_ptr;
 }
 
+QHash<int,QByteArray> InstantMessagingModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles.insert(InstantMessagingModel::Role::TYPE    ,QByteArray( "type"    ));
+      roles.insert(InstantMessagingModel::Role::FROM    ,QByteArray( "from"    ));
+      roles.insert(InstantMessagingModel::Role::TEXT    ,QByteArray( "text"    ));
+      roles.insert(InstantMessagingModel::Role::IMAGE   ,QByteArray( "image"   ));
+      roles.insert(InstantMessagingModel::Role::CONTACT ,QByteArray( "contact" ));
+   }
+   return roles;
+}
+
 ///Get data from the model
 QVariant InstantMessagingModel::data( const QModelIndex& idx, int role) const
 {
diff --git a/src/instantmessagingmodel.h b/src/instantmessagingmodel.h
index 38e744498cdf5dd7014a3c0e91a210abd885df16..1e25911d9d8527256439512854586d9d99e6a840 100644
--- a/src/instantmessagingmodel.h
+++ b/src/instantmessagingmodel.h
@@ -60,10 +60,11 @@ public:
    virtual ~InstantMessagingModel();
 
    //Abstract model function
-   QVariant      data     ( const QModelIndex& index, int role = Qt::DisplayRole     ) const override;
-   int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
-   Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
+   virtual QVariant      data     ( const QModelIndex& index, int role = Qt::DisplayRole     ) const override;
+   virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
+   virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool  setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
 private:
    const QScopedPointer<InstantMessagingModelPrivate> d_ptr;
diff --git a/src/keyexchangemodel.cpp b/src/keyexchangemodel.cpp
index e23d4e4285909e4a395e839e8213e1d41864f3ed..99e3d116897243e33d0057d40d15b81b440832e2 100644
--- a/src/keyexchangemodel.cpp
+++ b/src/keyexchangemodel.cpp
@@ -53,6 +53,17 @@ KeyExchangeModel::~KeyExchangeModel()
 //    delete d_ptr;
 }
 
+QHash<int,QByteArray> KeyExchangeModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Model functions
 QVariant KeyExchangeModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/keyexchangemodel.h b/src/keyexchangemodel.h
index 5b28ae23e4a6d1237961c7cb8ce7d4ac2af29a7c..1f1d44fef05ebc122567078b676596d2dd04df1b 100644
--- a/src/keyexchangemodel.h
+++ b/src/keyexchangemodel.h
@@ -75,6 +75,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex                   toIndex       (KeyExchangeModel::Type type) const;
diff --git a/src/lastusednumbermodel.cpp b/src/lastusednumbermodel.cpp
index 562f9945cbf792d4d789d4b6ecb717fedfc387a6..c01ce96f6a7d69a084072188569687095cbca079 100644
--- a/src/lastusednumbermodel.cpp
+++ b/src/lastusednumbermodel.cpp
@@ -67,6 +67,17 @@ LastUsedNumberModel* LastUsedNumberModel::instance()
    return m_spInstance;
 }
 
+QHash<int,QByteArray> LastUsedNumberModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 ///Push 'call' phoneNumber on the top of the stack
 void LastUsedNumberModel::addCall(Call* call)
 {
diff --git a/src/lastusednumbermodel.h b/src/lastusednumbermodel.h
index 484d6810d625888608d64767996dad8f687b2fc7..3a972dfd4b5210f2781f0acfbf238ddf0c50f75d 100644
--- a/src/lastusednumbermodel.h
+++ b/src/lastusednumbermodel.h
@@ -40,6 +40,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Mutator
    Q_INVOKABLE void addCall(Call* call);
diff --git a/src/networkinterfacemodel.cpp b/src/networkinterfacemodel.cpp
index 45b6acd0a254e40a9b1d4a99beaaa71b232c1fb3..2f28250fe0126e8b141ed6573b2f0d0209a80524 100644
--- a/src/networkinterfacemodel.cpp
+++ b/src/networkinterfacemodel.cpp
@@ -38,6 +38,17 @@ d_ptr(new NetworkInterfaceModelPrivate())
    d_ptr->m_Interfaces = DBus::ConfigurationManager::instance().getAllIpInterfaceByName();
 }
 
+QHash<int,QByteArray> NetworkInterfaceModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Model functions
 QVariant NetworkInterfaceModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/networkinterfacemodel.h b/src/networkinterfacemodel.h
index 2af3d38a9b3dcaef7ddfd1c35be5681531598134..29e597352e0e68b2ce3d3d710b0dac64b58bc5a0 100644
--- a/src/networkinterfacemodel.h
+++ b/src/networkinterfacemodel.h
@@ -40,7 +40,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
-
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Singleton
    static NetworkInterfaceModel* instance();
diff --git a/src/numbercategorymodel.cpp b/src/numbercategorymodel.cpp
index 0d2c7845e9ad6987a6dff8565b5cdba4d5873500..d6d4367d8c0760d457363be624ef6bc1e4cd5df0 100644
--- a/src/numbercategorymodel.cpp
+++ b/src/numbercategorymodel.cpp
@@ -48,6 +48,17 @@ NumberCategoryModel::~NumberCategoryModel()
 //    delete d_ptr;
 }
 
+QHash<int,QByteArray> NumberCategoryModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[Role::INDEX] = "index";
+   }
+   return roles;
+}
+
 //Abstract model member
 QVariant NumberCategoryModel::data(const QModelIndex& index, int role) const
 {
diff --git a/src/numbercategorymodel.h b/src/numbercategorymodel.h
index 4a5f7ddcf270ceb11804a9d8df6a843677a6c7aa..974be02fac239cacf6573790d95d0e3b035f2048 100644
--- a/src/numbercategorymodel.h
+++ b/src/numbercategorymodel.h
@@ -40,6 +40,7 @@ public:
    virtual int           rowCount (const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    (const QModelIndex& index                                 ) const override;
    virtual bool          setData  (const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Mutator
    NumberCategory* addCategory(const QString& name, const QVariant& icon, int index = -1, bool enabled = true);
diff --git a/src/numbercompletionmodel.cpp b/src/numbercompletionmodel.cpp
index 580a49fa6c2ef8b449c684923aa23b53454544b5..affe6d9d3d185ac3b80f5031917b69452529ba0c 100644
--- a/src/numbercompletionmodel.cpp
+++ b/src/numbercompletionmodel.cpp
@@ -86,6 +86,19 @@ NumberCompletionModel::~NumberCompletionModel()
 
 }
 
+QHash<int,QByteArray> NumberCompletionModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[Role::ALTERNATE_ACCOUNT]= "AlternateAccount";
+      roles[Role::FORCE_ACCOUNT    ]= "ForceAccount";
+      roles[Role::ACCOUNT          ]= "Account";
+   }
+   return roles;
+}
+
 QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const
 {
    if (!index.isValid()) return QVariant();
diff --git a/src/numbercompletionmodel.h b/src/numbercompletionmodel.h
index 72dd3e06aa5a84ea80496f4ebb0829224c36f735..772ca94144f14416fddac4a192b3bc1022179de9 100644
--- a/src/numbercompletionmodel.h
+++ b/src/numbercompletionmodel.h
@@ -53,6 +53,7 @@ public:
    virtual bool          setData    ( const QModelIndex& index, const QVariant &value, int role            )       override;
    virtual int           columnCount( const QModelIndex& parent = QModelIndex()                            ) const override;
    virtual QVariant      headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Setters
    void setCall(Call* call);
diff --git a/src/personmodel.cpp b/src/personmodel.cpp
index 6e16e9b02141de5b2541a67980642bdb12ad9c15..67f816ec1d7320ec8679f23a9614f521e6ed25c0 100644
--- a/src/personmodel.cpp
+++ b/src/personmodel.cpp
@@ -94,6 +94,25 @@ PersonModel* PersonModel::instance() {
  *                                                                           *
  ****************************************************************************/
 
+QHash<int,QByteArray> PersonModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[ Role::Organization      ] = "Organization";
+      roles[ Role::Group             ] = "Group";
+      roles[ Role::Department        ] = "Department";
+      roles[ Role::PreferredEmail    ] = "PreferredEmail";
+      roles[ Role::FormattedLastUsed ] = "FormattedLastUsed";
+      roles[ Role::IndexedLastUsed   ] = "IndexedLastUsed";
+      roles[ Role::DatedLastUsed     ] = "DatedLastUsed";
+      roles[ Role::Active            ] = "Active";
+      roles[ Role::Filter            ] = "Filter"; //All roles, all at once
+      roles[ Role::DropState         ] = "DropState"; //State for drag and drop
+   }
+   return roles;
+}
 
 bool PersonModel::setData( const QModelIndex& idx, const QVariant &value, int role)
 {
diff --git a/src/personmodel.h b/src/personmodel.h
index 91d55e1e874936a2132af95dd50936a1a2369e73..1888b91c3de2533380f0f889e5e246ae9291b167 100644
--- a/src/personmodel.h
+++ b/src/personmodel.h
@@ -82,6 +82,7 @@ public:
    virtual QModelIndex   parent      ( const QModelIndex& index                                    ) const override;
    virtual QModelIndex   index       ( int row, int column, const QModelIndex& parent=QModelIndex()) const override;
    virtual QVariant      headerData  ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Singleton
    static PersonModel* instance();
diff --git a/src/phonedirectorymodel.cpp b/src/phonedirectorymodel.cpp
index bfccd93dc3e6ccf4484c5a816036452a928b2822..2fa54407e19d873967ff4b650405fc12a772232c 100644
--- a/src/phonedirectorymodel.cpp
+++ b/src/phonedirectorymodel.cpp
@@ -85,6 +85,17 @@ PhoneDirectoryModel* PhoneDirectoryModel::instance()
    return m_spInstance;
 }
 
+QHash<int,QByteArray> PhoneDirectoryModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 QVariant PhoneDirectoryModel::data(const QModelIndex& index, int role ) const
 {
    if (!index.isValid() || index.row() >= d_ptr->m_lNumbers.size()) return QVariant();
diff --git a/src/phonedirectorymodel.h b/src/phonedirectorymodel.h
index 483db4645ae0954e4df3875a2e1aa6596a4ed626..1a409aa9b0788340764bf077a4bc7e0ebcdc2baa 100644
--- a/src/phonedirectorymodel.h
+++ b/src/phonedirectorymodel.h
@@ -63,6 +63,7 @@ public:
    virtual Qt::ItemFlags flags      (const QModelIndex& index                                             ) const override;
    virtual bool          setData    (const QModelIndex& index, const QVariant &value, int role            )       override;
    virtual QVariant      headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Singleton
    static PhoneDirectoryModel* instance();
diff --git a/src/presencestatusmodel.cpp b/src/presencestatusmodel.cpp
index c655941bd7be20910e3ff2644bc1608f251ded67..3dd21754c3a7477a928c8bba9da28168d5efee29 100644
--- a/src/presencestatusmodel.cpp
+++ b/src/presencestatusmodel.cpp
@@ -61,6 +61,17 @@ PresenceStatusModel::~PresenceStatusModel()
    }
 }
 
+QHash<int,QByteArray> PresenceStatusModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 ///Get model data
 QVariant PresenceStatusModel::data(const QModelIndex& index, int role ) const
 {
@@ -158,7 +169,7 @@ bool PresenceStatusModel::setData(const QModelIndex& index, const QVariant &valu
             break;
          case PresenceStatusModel::Columns::Color:
             if (role == Qt::EditRole) {
-               
+
             }
             break;
          case PresenceStatusModel::Columns::Status:
diff --git a/src/presencestatusmodel.h b/src/presencestatusmodel.h
index d5f0111b439a433122e4b988fb56fe68c1b2c467..bf17c384dfc1157b64f31b16eee656c8a3aa7703 100644
--- a/src/presencestatusmodel.h
+++ b/src/presencestatusmodel.h
@@ -82,6 +82,7 @@ public:
    virtual Qt::ItemFlags flags      (const QModelIndex& index                                             ) const override;
    virtual bool          setData    (const QModelIndex& index, const QVariant &value, int role            )       override;
    virtual QVariant      headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Singleton
    static PresenceStatusModel* instance();
diff --git a/src/private/accountmodel_p.h b/src/private/accountmodel_p.h
index f312ca1bf52207170fd0e4ad6919da0eadc91c53..02f880bb9454433ac3496869de66cbf0cc02ef68 100644
--- a/src/private/accountmodel_p.h
+++ b/src/private/accountmodel_p.h
@@ -34,7 +34,6 @@ public:
    //Constructor
    AccountModelPrivate(AccountModel* parent);
    void init();
-   void setupRoleName();
 
    //Helpers
    Account* firstRegisteredAccount() const;
diff --git a/src/profilemodel.cpp b/src/profilemodel.cpp
index 2cb5b81d44c99204ed011c8e2af46637eec737c2..05ee6b2be60be5b256387c16fc61df8060131f53 100644
--- a/src/profilemodel.cpp
+++ b/src/profilemodel.cpp
@@ -646,6 +646,17 @@ ProfileModel::~ProfileModel()
    delete d_ptr;
 }
 
+QHash<int,QByteArray> ProfileModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = AccountModel::instance()->roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 QModelIndex ProfileModel::mapToSource(const QModelIndex& idx) const
 {
    if (!idx.isValid() || !idx.parent().isValid() || idx.model() != this)
diff --git a/src/profilemodel.h b/src/profilemodel.h
index 66622ef2ce6b19a2c7af4b30c0740b08102aeec3..28cde02a739b904b08c18eb7d7fddd316960b137 100644
--- a/src/profilemodel.h
+++ b/src/profilemodel.h
@@ -52,6 +52,7 @@ public:
    virtual QStringList   mimeTypes   (                                                              ) const override;
    virtual QMimeData*    mimeData    ( const QModelIndexList &indexes                               ) const override;
    virtual bool          dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getter
    QModelIndex mapToSource  (const QModelIndex& idx) const;
diff --git a/src/ringtonemodel.cpp b/src/ringtonemodel.cpp
index 2bcbc2fda51d6749dda6b0d35310895a6adc1a83..91aa2d2675ee49b4ebe33c889f02a100602fd58a 100644
--- a/src/ringtonemodel.cpp
+++ b/src/ringtonemodel.cpp
@@ -51,6 +51,18 @@ RingToneModel::~RingToneModel()
    }
 }
 
+QHash<int,QByteArray> RingToneModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[Role::IsPlaying ] = "IsPlaying";
+      roles[Role::FullPath  ] = "FullPath";
+   }
+   return roles;
+}
+
 QVariant RingToneModel::data( const QModelIndex& index, int role ) const
 {
    if (!index.isValid())
diff --git a/src/ringtonemodel.h b/src/ringtonemodel.h
index fa967726849e3abed35071d14ab5580262c7c22a..25d3b90a533637c89db438d00d94dff9f40b7cb3 100644
--- a/src/ringtonemodel.h
+++ b/src/ringtonemodel.h
@@ -41,11 +41,12 @@ public:
    virtual ~RingToneModel();
 
    //Model functions
-   QVariant      data        ( const QModelIndex& index, int role = Qt::DisplayRole     ) const;
-   int           rowCount    ( const QModelIndex& parent = QModelIndex()                ) const;
-   int           columnCount ( const QModelIndex& parent = QModelIndex()                ) const;
-   Qt::ItemFlags flags       ( const QModelIndex& index                                 ) const;
-   virtual bool  setData     ( const QModelIndex& index, const QVariant &value, int role)      ;
+   virtual QVariant      data        ( const QModelIndex& index, int role = Qt::DisplayRole     ) const override;
+   virtual int           rowCount    ( const QModelIndex& parent = QModelIndex()                ) const override;
+   virtual int           columnCount ( const QModelIndex& parent = QModelIndex()                ) const override;
+   virtual Qt::ItemFlags flags       ( const QModelIndex& index                                 ) const override;
+   virtual bool  setData     ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QString     currentRingTone() const;
diff --git a/src/securityvalidationmodel.cpp b/src/securityvalidationmodel.cpp
index 39de71bfd6492d2e064b44d40dd5aa052bef659a..c1804738249e14a832e176dbc5c011ebabc14759 100644
--- a/src/securityvalidationmodel.cpp
+++ b/src/securityvalidationmodel.cpp
@@ -95,6 +95,17 @@ SecurityValidationModel::~SecurityValidationModel()
    
 }
 
+QHash<int,QByteArray> SecurityValidationModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+      roles[Role::SeverityRole] = "SeverityRole";
+   }
+   return roles;
+}
+
 QVariant SecurityValidationModel::data( const QModelIndex& index, int role) const
 {
    if (index.isValid())  {
diff --git a/src/securityvalidationmodel.h b/src/securityvalidationmodel.h
index c88064618b193e9f4f25eb0a62a389f6cdccb8e2..1b2bf57745f4396b17b7508b00ff0dbabd020315 100644
--- a/src/securityvalidationmodel.h
+++ b/src/securityvalidationmodel.h
@@ -107,10 +107,11 @@ public:
 
 
    //Model functions
-   QVariant      data     ( const QModelIndex& index, int role = Qt::DisplayRole     ) const;
-   int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const;
-   Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const;
-   virtual bool  setData  ( const QModelIndex& index, const QVariant &value, int role)      ;
+   virtual QVariant      data     ( const QModelIndex& index, int role = Qt::DisplayRole     ) const override;
+   virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
+   virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
+   virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getter
    QList<Flaw*> currentFlaws();
diff --git a/src/tlsmethodmodel.cpp b/src/tlsmethodmodel.cpp
index 276c3ff4d311519f473535352baa37af8782cb92..00936a01950b8f787ea2b8583710a23e93e5126d 100644
--- a/src/tlsmethodmodel.cpp
+++ b/src/tlsmethodmodel.cpp
@@ -34,6 +34,17 @@ d_ptr(new TlsMethodModelPrivate())
 
 }
 
+QHash<int,QByteArray> TlsMethodModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 //Model functions
 QVariant TlsMethodModel::data( const QModelIndex& index, int role) const
 {
diff --git a/src/tlsmethodmodel.h b/src/tlsmethodmodel.h
index 1fee183e0a932b9bd6acdbb5dd39c5a62b74ad90..03c28190abc3b6dbadd0147e0712f1e8f87df789 100644
--- a/src/tlsmethodmodel.h
+++ b/src/tlsmethodmodel.h
@@ -68,6 +68,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    QModelIndex toIndex (TlsMethodModel::Type type);
diff --git a/src/useractionmodel.h b/src/useractionmodel.h
index d0ca7e4afd94a82f8200ff75cdede440d1a349f3..52828a6eb6e0a95ef4eb7b11fe849b9eb758e576 100644
--- a/src/useractionmodel.h
+++ b/src/useractionmodel.h
@@ -29,6 +29,8 @@ class UserActionModelPrivate;
 
 /**
  * @class UserActionModel Hold available actions for a given call state
+ *
+ * @todo This is not a model yet, however, it would be nice if it was
  **/
 class LIB_EXPORT UserActionModel : public QObject/*QAbstractItemModel*/ {
    #pragma GCC diagnostic push
@@ -80,6 +82,7 @@ public:
 //    virtual int           columnCount(const QModelIndex& parent = QModelIndex()             ) const;
 //    virtual Qt::ItemFlags flags      (const QModelIndex& index                              ) const;
 //    virtual bool          setData    (const QModelIndex& index, const QVariant &value, int role);
+//    virtual QHash<int,QByteArray> roleNames() const override;
 
    //Getters
    Q_INVOKABLE bool isActionEnabled ( UserActionModel::Action action ) const;
diff --git a/src/video/codecmodel2.cpp b/src/video/codecmodel2.cpp
index 1f3b942cac9699711b41ac538b4097487aec2da7..6f998e121a85aaa282090a47ebebcf59e30f4ee7 100644
--- a/src/video/codecmodel2.cpp
+++ b/src/video/codecmodel2.cpp
@@ -57,6 +57,17 @@ Video::CodecModel2::~CodecModel2()
 //    delete d_ptr;
 }
 
+QHash<int,QByteArray> Video::CodecModel2::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 ///Get data from the model
 QVariant Video::CodecModel2::data( const QModelIndex& idx, int role) const
 {
diff --git a/src/video/codecmodel2.h b/src/video/codecmodel2.h
index 4b669148fcaf75998390ae0606b72bc7b679b185..076a2fd22fd9726f2a674b111c16d213253c2ad9 100644
--- a/src/video/codecmodel2.h
+++ b/src/video/codecmodel2.h
@@ -58,6 +58,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool  setData          ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    void reload();
    void save();
diff --git a/src/video/devicemodel.cpp b/src/video/devicemodel.cpp
index 1cedab04176140612914e9d367209978f835f50a..2e8b3fd8b1c55d35b78a9b49d1d9403cd3e24ef6 100644
--- a/src/video/devicemodel.cpp
+++ b/src/video/devicemodel.cpp
@@ -70,6 +70,17 @@ Video::DeviceModel* Video::DeviceModel::instance()
    return m_spInstance;
 }
 
+QHash<int,QByteArray> Video::DeviceModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   /*static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }*/
+   return roles;
+}
+
 ///Get data from the model
 QVariant Video::DeviceModel::data( const QModelIndex& idx, int role) const
 {
diff --git a/src/video/devicemodel.h b/src/video/devicemodel.h
index 314d1ebc0ffb33eb0ca6e1c6f1aa07ee0bd0452c..a208c6ca1a7e6616dccb8730099f8a42a6e8fc4a 100644
--- a/src/video/devicemodel.h
+++ b/src/video/devicemodel.h
@@ -49,6 +49,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    static DeviceModel* instance();
 
diff --git a/src/video/sourcesmodel.cpp b/src/video/sourcesmodel.cpp
index dae4830e79f2b5dba50d2241a88cc10d233cf49a..ad7356d9ae3a8f311b8b77331789824678073334 100644
--- a/src/video/sourcesmodel.cpp
+++ b/src/video/sourcesmodel.cpp
@@ -50,7 +50,7 @@ public:
 
 Video::SourcesModelPrivate::SourcesModelPrivate() : m_CurrentSelection(-1)
 {
-   
+
 }
 
 Video::SourcesModel* Video::SourcesModel::m_spInstance = nullptr;
@@ -68,6 +68,17 @@ Video::SourcesModel* Video::SourcesModel::instance()
    return m_spInstance;
 }
 
+QHash<int,QByteArray> Video::SourcesModel::roleNames() const
+{
+   static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
+   static bool initRoles = false;
+   if (!initRoles) {
+      initRoles = true;
+
+   }
+   return roles;
+}
+
 QVariant Video::SourcesModel::data( const QModelIndex& index, int role ) const
 {
    switch (index.row()) {
diff --git a/src/video/sourcesmodel.h b/src/video/sourcesmodel.h
index 23c0cf6b33264f94cc3e629dd660fae341725afb..1e0cfcb4b60c2aac3ab1bdd74c1486c24cb1779f 100644
--- a/src/video/sourcesmodel.h
+++ b/src/video/sourcesmodel.h
@@ -42,6 +42,7 @@ public:
    virtual int           rowCount ( const QModelIndex& parent = QModelIndex()                ) const override;
    virtual Qt::ItemFlags flags    ( const QModelIndex& index                                 ) const override;
    virtual bool          setData  ( const QModelIndex& index, const QVariant &value, int role)       override;
+   virtual QHash<int,QByteArray> roleNames() const override;
 
    Device* deviceAt(const QModelIndex& idx) const;