From 45633356f154f394c21b7414e1d0f54baf319c31 Mon Sep 17 00:00:00 2001
From: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
Date: Wed, 11 Feb 2015 23:48:05 +0000
Subject: [PATCH] Compile without Qt4 support

Refs #64190
---
 CMakeLists.txt                    |  2 +-
 src/accountmodel.cpp              | 98 ++++++++++++++++---------------
 src/accountmodel.h                | 15 ++---
 src/accountstatusmodel.cpp        | 11 ++++
 src/accountstatusmodel.h          |  1 +
 src/audio/alsapluginmodel.cpp     | 15 ++++-
 src/audio/alsapluginmodel.h       |  1 +
 src/audio/codecmodel.cpp          | 20 +++++--
 src/audio/codecmodel.h            |  7 ++-
 src/audio/inputdevicemodel.cpp    | 13 +++-
 src/audio/inputdevicemodel.h      |  1 +
 src/audio/managermodel.cpp        | 11 ++++
 src/audio/managermodel.h          |  1 +
 src/audio/outputdevicemodel.cpp   | 15 ++++-
 src/audio/outputdevicemodel.h     |  1 +
 src/audio/ringtonedevicemodel.cpp | 13 +++-
 src/audio/ringtonedevicemodel.h   |  1 +
 src/bookmarkmodel.cpp             | 11 ++++
 src/bookmarkmodel.h               |  1 +
 src/callmodel.cpp                 | 66 ++++++++++-----------
 src/callmodel.h                   |  1 +
 src/certificatemodel.cpp          | 11 ++++
 src/certificatemodel.h            |  1 +
 src/ciphermodel.cpp               | 11 ++++
 src/ciphermodel.h                 |  1 +
 src/collectionmodel.cpp           | 11 ++++
 src/collectionmodel.h             |  1 +
 src/contactproxymodel.cpp         | 30 ++++++----
 src/contactproxymodel.h           |  1 +
 src/credentialmodel.cpp           | 17 ++++--
 src/credentialmodel.h             |  1 +
 src/historymodel.cpp              | 62 ++++++++++---------
 src/historymodel.h                |  2 +-
 src/historytimecategorymodel.cpp  | 11 ++++
 src/historytimecategorymodel.h    |  1 +
 src/instantmessagingmodel.cpp     | 23 +++++---
 src/instantmessagingmodel.h       |  7 ++-
 src/keyexchangemodel.cpp          | 11 ++++
 src/keyexchangemodel.h            |  1 +
 src/lastusednumbermodel.cpp       | 11 ++++
 src/lastusednumbermodel.h         |  1 +
 src/networkinterfacemodel.cpp     | 11 ++++
 src/networkinterfacemodel.h       |  2 +-
 src/numbercategorymodel.cpp       | 11 ++++
 src/numbercategorymodel.h         |  1 +
 src/numbercompletionmodel.cpp     | 13 ++++
 src/numbercompletionmodel.h       |  1 +
 src/personmodel.cpp               | 19 ++++++
 src/personmodel.h                 |  1 +
 src/phonedirectorymodel.cpp       | 11 ++++
 src/phonedirectorymodel.h         |  1 +
 src/presencestatusmodel.cpp       | 13 +++-
 src/presencestatusmodel.h         |  1 +
 src/private/accountmodel_p.h      |  1 -
 src/profilemodel.cpp              | 11 ++++
 src/profilemodel.h                |  1 +
 src/ringtonemodel.cpp             | 12 ++++
 src/ringtonemodel.h               | 11 ++--
 src/securityvalidationmodel.cpp   | 11 ++++
 src/securityvalidationmodel.h     |  9 +--
 src/tlsmethodmodel.cpp            | 11 ++++
 src/tlsmethodmodel.h              |  1 +
 src/useractionmodel.h             |  3 +
 src/video/codecmodel2.cpp         | 11 ++++
 src/video/codecmodel2.h           |  1 +
 src/video/devicemodel.cpp         | 11 ++++
 src/video/devicemodel.h           |  1 +
 src/video/sourcesmodel.cpp        | 13 +++-
 src/video/sourcesmodel.h          |  1 +
 69 files changed, 543 insertions(+), 171 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3384e04a..b0587581 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 30978066..7c18b2f2 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 6b82f52b..adb1a82c 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 96ce35a5..668601d3 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 bddb74a9..f753545f 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 482849cb..9553c5d6 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 84d41854..5436c600 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 1b350f78..a33563eb 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 9b8e420e..01829a07 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 9e510299..4e3f7b9b 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 2abc25df..f71b4fbf 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 9fd9af47..72981a25 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 5ed998ca..40217217 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 987f0b8c..9a4daa80 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 faabf5a5..3b79e1c4 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 aa2d308e..46710d04 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 54b6715a..750566b4 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 0acfa5d7..837e3db9 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 37195d84..d7b08d17 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 683c5641..1b6a08a0 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 6854e666..5fe3fc66 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 c6334eb7..cb3a2738 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 f71df11b..f5107923 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 dd6a77d8..dff40609 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 98b4c0a1..0fa83d9d 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 9e895a11..4ddc3267 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 1c871ff6..aaec2659 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 0fc82317..430bac02 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 a33bc18f..f6b39c0c 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 cb2c7dcf..b729c866 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 c065c33c..b208af43 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 a101aab3..9023b683 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 6ee0954d..af0e0340 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 1192619d..169a6ed7 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 735fbfea..38c03b39 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 d96fdb6e..5400c8a7 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 38e74449..1e25911d 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 e23d4e42..99e3d116 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 5b28ae23..1f1d44fe 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 562f9945..c01ce96f 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 484d6810..3a972dfd 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 45b6acd0..2f28250f 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 2af3d38a..29e59735 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 0d2c7845..d6d4367d 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 4a5f7ddc..974be02f 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 580a49fa..affe6d9d 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 72dd3e06..772ca941 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 6e16e9b0..67f816ec 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 91d55e1e..1888b91c 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 bfccd93d..2fa54407 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 483db464..1a409aa9 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 c655941b..3dd21754 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 d5f0111b..bf17c384 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 f312ca1b..02f880bb 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 2cb5b81d..05ee6b2b 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 66622ef2..28cde02a 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 2bcbc2fd..91aa2d26 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 fa967726..25d3b90a 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 39de71bf..c1804738 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 c8806461..1b2bf577 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 276c3ff4..00936a01 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 1fee183e..03c28190 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 d0ca7e4a..52828a6e 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 1f3b942c..6f998e12 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 4b669148..076a2fd2 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 1cedab04..2e8b3fd8 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 314d1ebc..a208c6ca 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 dae4830e..ad7356d9 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 23c0cf6b..1e0cfcb4 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;
 
-- 
GitLab