diff --git a/CMakeLists.txt b/CMakeLists.txt
index 467704852d00b1fd38034e02d6e3fa06544cbed7..8907175dd2670965b86bc2267b04aa1c15feac3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,21 +12,11 @@ IF(POLICY CMP0020)
    CMAKE_POLICY(SET CMP0020 NEW)
 ENDIF(POLICY CMP0020)
 
-# First, check is the compiler is new enough, most version of Clang are fine
-# until problems arise, checking for GCC is enough
-IF (CMAKE_COMPILER_IS_GNUCC)
-   EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
-   IF (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
-      MESSAGE(STATUS "Found GCC version >= 4.8: " ${GCC_VERSION})
-   ELSE()
-      MESSAGE(FATAL_ERROR "Your version of GCC is too old, please install GCC 4.8 or later")
-   ENDIF()
-ENDIF()
-
 INCLUDE(GNUInstallDirs)
 INCLUDE(CMakePackageConfigHelpers)
 INCLUDE(GenerateExportHeader)
 
+
 ADD_DEFINITIONS("-std=c++1y")
 
 ADD_DEFINITIONS(
@@ -37,6 +27,17 @@ ADD_DEFINITIONS(
 
 PROJECT(ringclient)
 
+# First, check is the compiler is new enough, most version of Clang are fine
+# until problems arise, checking for GCC is enough
+IF (CMAKE_COMPILER_IS_GNUCC)
+   EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+   IF (GCC_VERSION VERSION_GREATER 4.8 OR GCC_VERSION VERSION_EQUAL 4.8)
+      MESSAGE(STATUS "Found GCC version >= 4.8: " ${GCC_VERSION})
+   ELSE()
+      MESSAGE(FATAL_ERROR "Your version of GCC is too old, please install GCC 4.8 or later")
+   ENDIF()
+ENDIF()
+
 SET(CMAKE_AUTOMOC TRUE)
 
 SET(LOCAL_CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/")
@@ -47,6 +48,7 @@ SET(QT5_MODULE_PATH ${QT5_PATH}/lib/cmake)
 FIND_PACKAGE(Ring REQUIRED)
 
 
+
 # Enable some useful warnings
 ADD_DEFINITIONS(
    -Wall
@@ -92,7 +94,7 @@ IF (CMAKE_COMPILER_IS_GNUCC)
       ADD_DEFINITIONS(
          -Wunused-but-set-parameter
          -Wconditionally-supported
-         -Wsuggest-attribute=const
+         #-Wsuggest-attribute=const
          -Wno-cpp
          -Wdouble-promotion
          -Wdate-time
@@ -101,11 +103,11 @@ IF (CMAKE_COMPILER_IS_GNUCC)
       )
    ENDIF()
 
-   IF (GCC_VERSION VERSION_GREATER 5.0 OR GCC_VERSION VERSION_EQUAL 5.0)
+   if (GCC_VERSION VERSION_GREATER 5.1 OR GCC_VERSION VERSION_EQUAL 5.1)
       ADD_DEFINITIONS(
-         -Wsuggest-override
-         -Wsuggest-final-types
-         -Wsuggest-final-methods
+         #-Wsuggest-override
+         #-Wsuggest-final-types
+         #-Wsuggest-final-methods
          -Wbool-compare
          -Wformat-signedness
          -Wlogical-not-parentheses
diff --git a/src/accountmodel.h b/src/accountmodel.h
index c4f69ea0d7462488f03c5cde610ea06d815d7222..33d7303cbb544800a0a4c8e4ff82b7b640389cec 100644
--- a/src/accountmodel.h
+++ b/src/accountmodel.h
@@ -150,7 +150,7 @@ Q_SIGNALS:
    void accountStateChanged  ( Account* account, const Account::RegistrationState state);
    ///Emitted when an account edit state change
    void accountEditStateChanged(Account* account, const Account::EditState state, const Account::EditState prev);
-   void editStateChanged(const EditState state, const EditState previous);
+   void editStateChanged(const EditState state, const EditState previous) const;
 };
 Q_DECLARE_METATYPE(AccountModel*)
 
diff --git a/src/audio/alsapluginmodel.cpp b/src/audio/alsapluginmodel.cpp
index 77a9f092a6f6dd32e4779a0953041ee81494704b..988021ef785cc178244c9baaa26e5badd4f2c08d 100644
--- a/src/audio/alsapluginmodel.cpp
+++ b/src/audio/alsapluginmodel.cpp
@@ -23,7 +23,7 @@
 //Ring
 #include "dbus/configurationmanager.h"
 
-class AlsaPluginModelPrivate : public QObject
+class AlsaPluginModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/audio/inputdevicemodel.cpp b/src/audio/inputdevicemodel.cpp
index b40eb45d2b723cee91bfc70e67b30037bba63318..e99324da05ceda02163060fe32c7dee1cd51a251 100644
--- a/src/audio/inputdevicemodel.cpp
+++ b/src/audio/inputdevicemodel.cpp
@@ -24,7 +24,7 @@
 #include "dbus/configurationmanager.h"
 #include "settings.h"
 
-class InputDeviceModelPrivate : public QObject
+class InputDeviceModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/audio/managermodel.cpp b/src/audio/managermodel.cpp
index f77be8fdc97a3ea7f124d842a5b8c2926a6598fa..99c1ef2d71a3ef04f3c8b9ecaba915ccf90b611e 100644
--- a/src/audio/managermodel.cpp
+++ b/src/audio/managermodel.cpp
@@ -24,7 +24,7 @@
 #include "dbus/configurationmanager.h"
 #include "settings.h"
 
-class ManagerModelPrivate : public QObject
+class ManagerModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/audio/outputdevicemodel.cpp b/src/audio/outputdevicemodel.cpp
index bea13e69e0285e2b7995d8f7e9b4f7f8b4a986c3..da5869cc0647650a262da38070cf1fbab8a66852 100644
--- a/src/audio/outputdevicemodel.cpp
+++ b/src/audio/outputdevicemodel.cpp
@@ -25,7 +25,7 @@
 #include "dbus/callmanager.h"
 #include "settings.h"
 
-class OutputDeviceModelPrivate : public QObject
+class OutputDeviceModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/audio/ringtonedevicemodel.cpp b/src/audio/ringtonedevicemodel.cpp
index 1e9d9cb007a03c2fe41bade3a8fe65fc1122041f..37ca71aeaad9e23d0ff95909b99336b8ed0f301f 100644
--- a/src/audio/ringtonedevicemodel.cpp
+++ b/src/audio/ringtonedevicemodel.cpp
@@ -24,7 +24,7 @@
 #include "dbus/configurationmanager.h"
 #include "settings.h"
 
-class RingtoneDeviceModelPrivate : public QObject
+class RingtoneDeviceModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/audio/settings.cpp b/src/audio/settings.cpp
index 6bb1250235c6e61939d74aba66ec2f5c2e1b5e18..8142a7940e9897426907a1a56005d5edb747dbb6 100644
--- a/src/audio/settings.cpp
+++ b/src/audio/settings.cpp
@@ -30,7 +30,7 @@
 #include "inputdevicemodel.h"
 
 namespace Audio {
-class SettingsPrivate : public QObject
+class SettingsPrivate final : public QObject
 {
    Q_OBJECT
 public:
@@ -210,13 +210,13 @@ bool Audio::Settings::isCaptureMuted() const
 int Audio::Settings::playbackVolume() const
 {
    ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance();
-   return configurationManager.getVolume(DeviceKey::PLAYBACK)*100;
+   return static_cast<int>(configurationManager.getVolume(DeviceKey::PLAYBACK)*100);
 }
 
 int Audio::Settings::captureVolume() const
 {
    ConfigurationManagerInterface& configurationManager = DBus::ConfigurationManager::instance();
-   return configurationManager.getVolume(DeviceKey::CAPTURE)*100;
+   return static_cast<int>(configurationManager.getVolume(DeviceKey::CAPTURE)*100);
 }
 
 void Audio::Settings::setPlaybackVolume(int volume)
diff --git a/src/availableaccountmodel.cpp b/src/availableaccountmodel.cpp
index be9595a944bc32bf51f493e988a5eb17b81fce6d..db78be058f6f4fefe4dfe5d3096a1ace165f9b56 100644
--- a/src/availableaccountmodel.cpp
+++ b/src/availableaccountmodel.cpp
@@ -29,7 +29,7 @@
 #include "contactmethod.h"
 #include "uri.h"
 
-class AvailableAccountModelPrivate : public QObject
+class AvailableAccountModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/callmodel.cpp b/src/callmodel.cpp
index cab7b34ba492c0de39e2d7413aadcedbd2e9ebb0..625de6247b33fc1c15ce68238adba4fb47500644 100644
--- a/src/callmodel.cpp
+++ b/src/callmodel.cpp
@@ -66,7 +66,7 @@ struct InternalStruct {
 //Static member
 CallModel*   CallModel::m_spInstance = nullptr;
 
-class CallModelPrivate : public QObject
+class CallModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
@@ -153,7 +153,7 @@ void CallModelPrivate::init()
    if (!dbusInit) {
       CallManagerInterface& callManager = DBus::CallManager::instance();
       #ifdef ENABLE_VIDEO
-      VideoManagerInterface& interface = DBus::VideoManager::instance();
+      DBus::VideoManager::instance();
       #endif
 
       //SLOTS
diff --git a/src/categorizedbookmarkmodel.cpp b/src/categorizedbookmarkmodel.cpp
index 737c075491a9eda8f234b0c702fa5f23e94bc06a..aadae46d45ac3c16c47c9485dc09d8f4a360528d 100644
--- a/src/categorizedbookmarkmodel.cpp
+++ b/src/categorizedbookmarkmodel.cpp
@@ -35,10 +35,10 @@
 #include "collectioninterface.h"
 
 ///Top level bookmark item
-class BookmarkTopLevelItem : public CategorizedCompositeNode {
+class BookmarkTopLevelItem final : public CategorizedCompositeNode {
    friend class CategorizedBookmarkModel;
    public:
-      virtual QObject* getSelf() const;
+      virtual QObject* getSelf() const override;
       int m_Row;
    private:
       explicit BookmarkTopLevelItem(QString name);
@@ -47,7 +47,7 @@ class BookmarkTopLevelItem : public CategorizedCompositeNode {
       bool m_MostPopular;
 };
 
-class CategorizedBookmarkModelPrivate : public QObject
+class CategorizedBookmarkModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
@@ -82,13 +82,13 @@ class BookmarkItemNode;
 
 static bool test = false;
 //Model item/index
-class NumberTreeBackend : public CategorizedCompositeNode
+class NumberTreeBackend final : public CategorizedCompositeNode
 {
    friend class CategorizedBookmarkModel;
    public:
       NumberTreeBackend(ContactMethod* number);
       virtual ~NumberTreeBackend();
-      virtual QObject* getSelf() const { return nullptr; }
+      virtual QObject* getSelf() const override { return nullptr; }
 
       ContactMethod* m_pNumber;
       BookmarkTopLevelItem* m_pParent;
@@ -96,7 +96,7 @@ class NumberTreeBackend : public CategorizedCompositeNode
       BookmarkItemNode* m_pNode;
 };
 
-class BookmarkItemNode : public QObject //TODO remove this once Qt4 support is dropped
+class BookmarkItemNode final : public QObject //TODO remove this once Qt4 support is dropped
 {
    Q_OBJECT
 public:
diff --git a/src/categorizedcontactmodel.cpp b/src/categorizedcontactmodel.cpp
index 09e5b55af354d8c7dd4de44faab6cd41c394c329..0da25cd17756addab1440d8c784afefa647d5349 100644
--- a/src/categorizedcontactmodel.cpp
+++ b/src/categorizedcontactmodel.cpp
@@ -37,7 +37,7 @@
 
 class ContactTreeNode;
 
-class ContactTreeNode : public CategorizedCompositeNode {
+class ContactTreeNode final : public CategorizedCompositeNode {
 public:
    friend class CategorizedContactModel;
    friend class CategorizedContactModelPrivate;
@@ -73,7 +73,7 @@ public:
    void slotContactMethodCountChanged      (int,int         );
    void slotContactMethodCountAboutToChange(int,int         );
 };
-class CategorizedContactModelPrivate : public QObject
+class CategorizedContactModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/categorizedhistorymodel.cpp b/src/categorizedhistorymodel.cpp
index 791e64249273fbda43c28d8ef58dad0981eecd08..3dcb492123714ea0b74844d74348427b55535225 100644
--- a/src/categorizedhistorymodel.cpp
+++ b/src/categorizedhistorymodel.cpp
@@ -47,18 +47,18 @@
 
 class HistoryTopLevelItem;
 
-class CategorizedHistoryModelPrivate : public QObject
+class CategorizedHistoryModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
    CategorizedHistoryModelPrivate(CategorizedHistoryModel* parent);
 
    //Model
-   class HistoryItem : public CategorizedCompositeNode {
+   class HistoryItem final : public CategorizedCompositeNode {
    public:
       explicit HistoryItem(Call* call);
       virtual ~HistoryItem();
-      virtual QObject* getSelf() const;
+      virtual QObject* getSelf() const override;
       Call* call() const;
       int m_Index;
       HistoryTopLevelItem* m_pParent;
@@ -91,11 +91,12 @@ public Q_SLOTS:
    void slotChanged(const QModelIndex& idx);
 };
 
-class HistoryTopLevelItem : public CategorizedCompositeNode,public QObject {
+class HistoryTopLevelItem final : public CategorizedCompositeNode, public QObject
+{
    friend class CategorizedHistoryModel;
    friend class CategorizedHistoryModelPrivate;
 public:
-   virtual QObject* getSelf() const;
+   virtual QObject* getSelf() const override final;
    virtual ~HistoryTopLevelItem();
    int m_Index;
    int m_AbsoluteIndex;
@@ -106,7 +107,7 @@ private:
    int modelRow;
 };
 
-class HistoryItemNode : public QObject //TODO remove this once Qt4 support is dropped
+class HistoryItemNode final : public QObject //TODO remove this once Qt4 support is dropped, use lambdas
 {
    Q_OBJECT
 public:
diff --git a/src/certificatemodel.cpp b/src/certificatemodel.cpp
index 29da31f822d7c867a4efdce5386957cdae114d04..d9bbf11db26590152fe8a3591689e9ebeaf1029a 100644
--- a/src/certificatemodel.cpp
+++ b/src/certificatemodel.cpp
@@ -70,7 +70,7 @@ struct CertificateNode {
    QHash<Account*,CertificateNode*> m_hSiblings;
 };
 
-class CertificateProxyModel : public QAbstractProxyModel
+class CertificateProxyModel final : public QAbstractProxyModel
 {
    Q_OBJECT
 public:
diff --git a/src/codecmodel.cpp b/src/codecmodel.cpp
index c270c67521fad8fc44b7bb6895dee343032eb1a4..930b4f6e7957d84a3cd205eadd57d808a9e5119f 100644
--- a/src/codecmodel.cpp
+++ b/src/codecmodel.cpp
@@ -33,7 +33,7 @@
 #include "mime.h"
 #include "callmodel.h"
 
-class CodecModelPrivate : public QObject
+class CodecModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/collectioninterface.cpp b/src/collectioninterface.cpp
index ff95a609a1b8fbdfa1a8c6a9e8c468f2f3ab9081..3b45aab72a59165a5c407defeaf0773dbf39ef4d 100644
--- a/src/collectioninterface.cpp
+++ b/src/collectioninterface.cpp
@@ -38,7 +38,7 @@
 #include <QtCore/QIdentityProxyModel>
 #include <QtCore/QCoreApplication>
 
-class EnabledExtensionsProxy : public QIdentityProxyModel
+class EnabledExtensionsProxy final : public QIdentityProxyModel
 {
    Q_OBJECT
 
diff --git a/src/collectionmanagerinterface.h b/src/collectionmanagerinterface.h
index ad63b6d291b29bd553a46a3e9f63ab41d3c5c866..6edf63f0fbf9fcd4956758a0cc7a8314e4971264 100644
--- a/src/collectionmanagerinterface.h
+++ b/src/collectionmanagerinterface.h
@@ -142,15 +142,15 @@ public:
 
 
    /// Do this manager have active collections
-   virtual bool hasEnabledCollections (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const final;
-   virtual bool hasCollections        (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const final;
+   bool hasEnabledCollections (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const;
+   bool hasCollections        (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const;
 
    /// List all Collections
-   virtual const QVector< CollectionInterface* > collections       (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const final;
-   virtual const QVector< CollectionInterface* > enabledCollections(FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const final;
+   const QVector< CollectionInterface* > collections       (FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const;
+   const QVector< CollectionInterface* > enabledCollections(FlagPack<CollectionInterface::SupportedFeatures> features = CollectionInterface::SupportedFeatures::NONE) const;
 
    ///Enable / disable a collection
-   virtual bool enableCollection( CollectionInterface*  collection, bool enabled) final;
+   bool enableCollection( CollectionInterface*  collection, bool enabled);
 
    virtual bool clearAllCollections() const;
 
diff --git a/src/collectionmodel.cpp b/src/collectionmodel.cpp
index d6083de4bf35288c524cea69dfb057aff1d28ad1..9e05d880a5cc19b54e3edb6a59c70068ed287dc8 100644
--- a/src/collectionmodel.cpp
+++ b/src/collectionmodel.cpp
@@ -29,7 +29,7 @@
 
 CollectionModel* CollectionModelPrivate::m_spInstance = nullptr;
 
-class ManageableCollectionProxy : public QSortFilterProxyModel
+class ManageableCollectionProxy final : public QSortFilterProxyModel
 {
 public:
    ManageableCollectionProxy(QAbstractItemModel* parent) : QSortFilterProxyModel(parent)
diff --git a/src/daemoncertificatecollection.cpp b/src/daemoncertificatecollection.cpp
index f8fbe4d745b890985ee4a52e8ac28392a0fdb409..392dad021c6bad126bbcc045c4824e819dc04afc 100644
--- a/src/daemoncertificatecollection.cpp
+++ b/src/daemoncertificatecollection.cpp
@@ -25,7 +25,7 @@
 //Dring
 #include "dbus/configurationmanager.h"
 
-class DaemonCertificateEditor : public CollectionEditor<Certificate>
+class DaemonCertificateEditor final : public CollectionEditor<Certificate>
 {
 public:
    DaemonCertificateEditor(CollectionMediator<Certificate>* m, const QString& path);
diff --git a/src/delegates/shortcutdelegate.cpp b/src/delegates/shortcutdelegate.cpp
index 9cca784e7679a6a410ceba8692cd82d903af0b0e..0dd58cb6b08420cab8c929b38303aea9786a424e 100644
--- a/src/delegates/shortcutdelegate.cpp
+++ b/src/delegates/shortcutdelegate.cpp
@@ -36,5 +36,6 @@ void ShortcutDelegate::setInstance(ShortcutDelegate* i)
 
 QVariant ShortcutDelegate::createAction(Macro* macro)
 {
+   Q_UNUSED(macro)
    return QVariant();
 }
diff --git a/src/fallbackpersoncollection.cpp b/src/fallbackpersoncollection.cpp
index 1df40ac90bd7c55837bcd373cbd4d8be1ae12f6b..621dc25ec16134d2c286d296447165eb526f949f 100644
--- a/src/fallbackpersoncollection.cpp
+++ b/src/fallbackpersoncollection.cpp
@@ -37,7 +37,7 @@
 #include "delegates/itemmodelstateserializationdelegate.h"
 
 
-class FallbackPersonBackendEditor : public CollectionEditor<Person>
+class FallbackPersonBackendEditor final : public CollectionEditor<Person>
 {
 public:
    FallbackPersonBackendEditor(CollectionMediator<Person>* m, const QString& path) : CollectionEditor<Person>(m),m_Path(path) {}
@@ -55,7 +55,7 @@ private:
    virtual QVector<Person*> items() const override;
 };
 
-class FallbackPersonCollectionPrivate : public QObject
+class FallbackPersonCollectionPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/foldercertificatecollection.cpp b/src/foldercertificatecollection.cpp
index 2bae71698064777d0f8446b21d6e6e012cac803e..020b1f1fc45da968b00db22cc131d03a255e18b5 100644
--- a/src/foldercertificatecollection.cpp
+++ b/src/foldercertificatecollection.cpp
@@ -33,7 +33,7 @@
 //Dring
 #include "dbus/configurationmanager.h"
 
-class FallbackLocalCertificateEditor : public CollectionEditor<Certificate>
+class FallbackLocalCertificateEditor final : public CollectionEditor<Certificate>
 {
 public:
    FallbackLocalCertificateEditor(CollectionMediator<Certificate>* m, const QString& path);
@@ -51,7 +51,7 @@ private:
    virtual QVector<Certificate*> items() const override;
 };
 
-class BackgroundLoader : public QThread
+class BackgroundLoader final : public QThread
 {
    Q_OBJECT
 public:
diff --git a/src/keyexchangemodel.cpp b/src/keyexchangemodel.cpp
index bffc2b872f9a623ac448d50e3aa21960a8a229cf..165fc83622d4fef5ea14db842f8ecd56cbd34932 100644
--- a/src/keyexchangemodel.cpp
+++ b/src/keyexchangemodel.cpp
@@ -29,7 +29,7 @@
 #include "private/account_p.h"
 #include "private/matrixutils.h"
 
-class KeyExchangeModelPrivate : public QObject
+class KeyExchangeModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/localbookmarkcollection.cpp b/src/localbookmarkcollection.cpp
index b89404ebb153ef662a16b7b7914262a3fae2ddfa..3a7c9ab84e0e52aa49759679d9d3cc90a9c06d38 100644
--- a/src/localbookmarkcollection.cpp
+++ b/src/localbookmarkcollection.cpp
@@ -49,7 +49,7 @@ namespace Serializable {
    };
 }
 
-class LocalBookmarkEditor : public CollectionEditor<ContactMethod>
+class LocalBookmarkEditor final : public CollectionEditor<ContactMethod>
 {
 public:
    LocalBookmarkEditor(CollectionMediator<ContactMethod>* m)
diff --git a/src/localmacrocollection.cpp b/src/localmacrocollection.cpp
index 63afcddfdc26c8a30962ff358c2d30cd0308eeef..6a2fcc1a013d785071216682a699c75d809ee703 100644
--- a/src/localmacrocollection.cpp
+++ b/src/localmacrocollection.cpp
@@ -42,7 +42,7 @@ namespace Serializable {
    };
 }
 
-class LocalMacroEditor : public CollectionEditor<Macro>
+class LocalMacroEditor final : public CollectionEditor<Macro>
 {
 public:
    LocalMacroEditor(CollectionMediator<Macro>* m) : CollectionEditor<Macro>(m),m_Tracked(false) {}
diff --git a/src/localrecordingcollection.cpp b/src/localrecordingcollection.cpp
index 45bf41adbd7bfea650097dd6be9790a37a326fd2..fb6d1b3c7eb3df68c30b6388ee9f06e85d7ccd8d 100644
--- a/src/localrecordingcollection.cpp
+++ b/src/localrecordingcollection.cpp
@@ -22,7 +22,7 @@
 #include <media/recording.h>
 #include <media/avrecording.h>
 
-class LocalRecordingEditor : public CollectionEditor<Media::Recording>
+class LocalRecordingEditor final : public CollectionEditor<Media::Recording>
 {
 public:
    LocalRecordingEditor(CollectionMediator<Media::Recording>* m) : CollectionEditor<Media::Recording>(m) {}
diff --git a/src/localringtonecollection.cpp b/src/localringtonecollection.cpp
index 319a43adf594d46d55af13dff4edafb99e3374e9..60f36c6c53fed97bbf7ea339015dfef5779efa43 100644
--- a/src/localringtonecollection.cpp
+++ b/src/localringtonecollection.cpp
@@ -44,7 +44,7 @@ namespace Serializable {
    };
 }
 
-class LocalRingtoneEditor : public CollectionEditor<Ringtone>
+class LocalRingtoneEditor final : public CollectionEditor<Ringtone>
 {
 public:
    LocalRingtoneEditor(CollectionMediator<Ringtone>* m)
diff --git a/src/localtextrecordingcollection.cpp b/src/localtextrecordingcollection.cpp
index 582b58c5cd319e5e9a23c3dd52ea4f37237500c0..586b569e5bf1dc4fa579aa7fd95b9746b5328b90 100644
--- a/src/localtextrecordingcollection.cpp
+++ b/src/localtextrecordingcollection.cpp
@@ -44,7 +44,7 @@
  * concatenated then hashed in sha1 again.
  */
 
-class LocalTextRecordingEditor : public CollectionEditor<Media::Recording>
+class LocalTextRecordingEditor final : public CollectionEditor<Media::Recording>
 {
 public:
    LocalTextRecordingEditor(CollectionMediator<Media::Recording>* m) : CollectionEditor<Media::Recording>(m) {}
diff --git a/src/media/avrecording.cpp b/src/media/avrecording.cpp
index cff4c3618dc24bebef3dc6e67dfa71bf6ebe0c05..e1476a7eda87213686e1050c2b98b9faa7672a5b 100644
--- a/src/media/avrecording.cpp
+++ b/src/media/avrecording.cpp
@@ -243,7 +243,7 @@ void Media::AVRecordingPrivate::notifySeek(int position, int size)
    //Update the metadata
    m_Duration = size/1000;
    m_Position = ((double)position)/((double)size);
-   m_Elapsed  = m_Duration * m_Position;
+   m_Elapsed  = m_Duration * static_cast<int>(m_Position);
    m_Left     = m_Duration - m_Elapsed ;
 
    if (oldDuration != m_Duration)
diff --git a/src/networkinterfacemodel.cpp b/src/networkinterfacemodel.cpp
index 0c5477c350a3ff03e5363e4ccd38e6046daa2fd6..afa3edb12f5b6df03a40e9e46abfc7ee6195e77e 100644
--- a/src/networkinterfacemodel.cpp
+++ b/src/networkinterfacemodel.cpp
@@ -29,7 +29,7 @@
 #include <account.h>
 #include <private/account_p.h>
 
-class NetworkInterfaceModelPrivate : public QObject {
+class NetworkInterfaceModelPrivate final : public QObject {
    Q_OBJECT
 public:
    NetworkInterfaceModelPrivate(NetworkInterfaceModel*);
diff --git a/src/numbercompletionmodel.cpp b/src/numbercompletionmodel.cpp
index 0133f90314f22ff05c0a0751094151d82a5c612c..36969a2639db7f8e38f744930730bd3521ffe554 100644
--- a/src/numbercompletionmodel.cpp
+++ b/src/numbercompletionmodel.cpp
@@ -42,7 +42,7 @@
 //Private
 #include "private/phonedirectorymodel_p.h"
 
-class NumberCompletionModelPrivate : public QObject
+class NumberCompletionModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
@@ -442,7 +442,7 @@ void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, co
 
       endOk = (iEnd.key().left(prefixLen) == pref);
 
-      size = ::ceil(size/2.0f);
+      size = ::ceil((static_cast<float>(size))/2.0f);
    }
 
    while (iBeg.key().left(prefixLen) != pref && iBeg != map.end() && iBeg != iEnd)
diff --git a/src/personmodel.cpp b/src/personmodel.cpp
index 7448cd968d2a0c49443391e35375a0fe8135a3fa..bae49494ae40c87223e819f29f8fe4842cea89c6 100644
--- a/src/personmodel.cpp
+++ b/src/personmodel.cpp
@@ -57,7 +57,7 @@ public:
 
 };
 
-class PersonModelPrivate : public QObject
+class PersonModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/account_p.h b/src/private/account_p.h
index ea5b4252ce0bc0a5f680d6d449b737f721d29caf..0c9eb29c80d46a62d82ff8b6ccba33c381596054 100644
--- a/src/private/account_p.h
+++ b/src/private/account_p.h
@@ -37,7 +37,7 @@ class BootstrapModel;
 
 typedef void (AccountPrivate::*account_function)();
 
-class AccountPrivate : public QObject
+class AccountPrivate final : public QObject
 {
 public:
    Q_OBJECT
diff --git a/src/private/accountmodel_p.h b/src/private/accountmodel_p.h
index b56e79fc8185b247957a3f2bbb050986e1c0ccdf..9bae7dc0601b44654d7f4a1037227c4bd62d1cb1 100644
--- a/src/private/accountmodel_p.h
+++ b/src/private/accountmodel_p.h
@@ -31,7 +31,7 @@ class AccountListColorDelegate;
 class ProtocolModel;
 class QItemSelectionModel;
 
-class AccountModelPrivate : public QObject
+class AccountModelPrivate final : public QObject
 {
    Q_OBJECT
    Q_DECLARE_PUBLIC(AccountModel)
diff --git a/src/private/call_p.h b/src/private/call_p.h
index 7dabbd5383e88226fed673d5e366faaeea06205e..19d5b73254260e4142e395523f1a0df434850da1 100644
--- a/src/private/call_p.h
+++ b/src/private/call_p.h
@@ -43,7 +43,7 @@ namespace Media {
    class Recording;
 }
 
-class CallPrivate : public QObject
+class CallPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/collectionmodel_p.h b/src/private/collectionmodel_p.h
index 15ddcb118cd8f8b41c2d39e06f821d994aea79cd..f9d41bba7ba9c8317805066efe76fcab579a26aa 100644
--- a/src/private/collectionmodel_p.h
+++ b/src/private/collectionmodel_p.h
@@ -31,7 +31,7 @@ class CollectionExtensionInterface;
 class CollectionConfigurationInterface;
 class CollectionCreationInterface;
 
-class CollectionModelPrivate : public QObject
+class CollectionModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/directrenderer.h b/src/private/directrenderer.h
index db6a2d99dfc528d24a4acb5dbfffa3b55d7d8904..2c1b8eab180de1c8c317225d4c71a60a3b21ded7 100644
--- a/src/private/directrenderer.h
+++ b/src/private/directrenderer.h
@@ -36,7 +36,7 @@ namespace Video {
 class DirectRendererPrivate;
 
 ///Manage shared memory and convert it to QByteArray
-class LIB_EXPORT DirectRenderer : public Renderer {
+class LIB_EXPORT DirectRenderer final : public Renderer {
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
    Q_OBJECT
diff --git a/src/private/imconversationmanagerprivate.h b/src/private/imconversationmanagerprivate.h
index 2ba5662b6e83413b621aa372fd39833feffe415f..a87e302582075202d6c2c64e7eec8291ef60e5e9 100644
--- a/src/private/imconversationmanagerprivate.h
+++ b/src/private/imconversationmanagerprivate.h
@@ -30,7 +30,7 @@ namespace Media {
    class TextRecording;
 }
 
-class IMConversationManagerPrivate : public QObject
+class IMConversationManagerPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/macromodel_p.h b/src/private/macromodel_p.h
index 6e5bc04ac84d5daff19f99719eaa4133f7417607..647a93a4f05beff01128f11307c675f3c2e33330 100644
--- a/src/private/macromodel_p.h
+++ b/src/private/macromodel_p.h
@@ -20,7 +20,7 @@
 
 #include <macromodel.h>
 
-class MacroModelPrivate : public QObject
+class MacroModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/phonedirectorymodel_p.h b/src/private/phonedirectorymodel_p.h
index 0a66230a88a88c96b8cb4a8ab56c86687b9ebe90..62d676419c4e68106c4110af032e97d30e7f6549 100644
--- a/src/private/phonedirectorymodel_p.h
+++ b/src/private/phonedirectorymodel_p.h
@@ -29,7 +29,7 @@ struct NumberWrapper {
    QVector<ContactMethod*> numbers;
 };
 
-class PhoneDirectoryModelPrivate : public QObject
+class PhoneDirectoryModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/securityevaluationmodel_p.h b/src/private/securityevaluationmodel_p.h
index 0f83788fa45947ae9d55d2625ab6caf0334d6bff..bced20b688a62991b781ae043aeea489fbcc5147 100644
--- a/src/private/securityevaluationmodel_p.h
+++ b/src/private/securityevaluationmodel_p.h
@@ -26,7 +26,7 @@ class Certificate;
 #include "private/matrixutils.h"
 #include <securityevaluationmodel.h>
 
-class SecurityEvaluationModelPrivate : public QObject
+class SecurityEvaluationModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/securityflaw_p.h b/src/private/securityflaw_p.h
index 38ff04a74d7a34885cb3fc18a8b2bd514fbf11af..710cc1d0e6833c7f2ff0da4c527bdc914c14f76f 100644
--- a/src/private/securityflaw_p.h
+++ b/src/private/securityflaw_p.h
@@ -23,7 +23,7 @@
 #include "securityevaluationmodel.h"
 class SecurityFlaw;
 
-class SecurityFlawPrivate : public QObject
+class SecurityFlawPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/shmrenderer.cpp b/src/private/shmrenderer.cpp
index 1b8e61ba8d3ea71a010103e255fb45bb26ef2b7b..bdc675abf374ecb6ec5ed1cb209c8e97a7a2808d 100644
--- a/src/private/shmrenderer.cpp
+++ b/src/private/shmrenderer.cpp
@@ -70,7 +70,7 @@ struct SHMHeader {
 
 namespace Video {
 
-class ShmRendererPrivate : public QObject
+class ShmRendererPrivate final : public QObject
 {
    Q_OBJECT
 
diff --git a/src/private/shmrenderer.h b/src/private/shmrenderer.h
index 63e042d209db3533dddd353ae8996752baaa376b..0eef717a0756b059a5598daff296960731e9a2ac 100644
--- a/src/private/shmrenderer.h
+++ b/src/private/shmrenderer.h
@@ -36,7 +36,7 @@ namespace Video {
 class ShmRendererPrivate;
 
 ///Manage shared memory and convert it to QByteArray
-class LIB_EXPORT ShmRenderer : public Renderer {
+class LIB_EXPORT ShmRenderer final : public Renderer {
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
    Q_OBJECT
@@ -66,8 +66,8 @@ private:
    Q_DECLARE_PRIVATE(ShmRenderer)
 
 public Q_SLOTS:
-   void startRendering();
-   void stopRendering ();
+   void startRendering() override;
+   void stopRendering () override;
 };
 
 }
diff --git a/src/private/textrecording_p.h b/src/private/textrecording_p.h
index cb03f423c732559b37b818cbf384d8b877babb11..868c6d30a48bbbdf44c61c0c1b7e085292e4279b 100644
--- a/src/private/textrecording_p.h
+++ b/src/private/textrecording_p.h
@@ -162,7 +162,7 @@ struct TextMessageNode
 };
 
 ///Model for the Instant Messaging (IM) features
-class InstantMessagingModel : public QAbstractListModel
+class InstantMessagingModel final : public QAbstractListModel
 {
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
diff --git a/src/private/videodevice_p.h b/src/private/videodevice_p.h
index 1fb46a00cb35a2cf9cccf5164a7e9b148a927cef..f003a855ce8faa1ae4f02038f1ca6e6a5cd8db41 100644
--- a/src/private/videodevice_p.h
+++ b/src/private/videodevice_p.h
@@ -26,7 +26,7 @@ namespace Video {
    class Device;
 }
 
-class VideoDevicePrivate : public QObject
+class VideoDevicePrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/private/videorenderer_p.h b/src/private/videorenderer_p.h
index 27d574ee569cc5b4f885b76abc8207a76d7cf214..e78887066c43c64ea1a3da06b30b8ed8d74f127f 100644
--- a/src/private/videorenderer_p.h
+++ b/src/private/videorenderer_p.h
@@ -30,7 +30,7 @@ namespace Video {
 
 class Renderer;
 
-class RendererPrivate : public QObject
+class RendererPrivate final : public QObject
 {
 Q_OBJECT
 public:
diff --git a/src/private/videorenderermanager.cpp b/src/private/videorenderermanager.cpp
index 50d55938e6f225fff0787a3b64d96fe5482c669b..cf6d09b61126b72aea3a32a88dc14f1cb00d91bb 100644
--- a/src/private/videorenderermanager.cpp
+++ b/src/private/videorenderermanager.cpp
@@ -48,7 +48,7 @@ constexpr static const char PREVIEW_RENDERER_ID[] = "local";
 //Static member
 VideoRendererManager* VideoRendererManager::m_spInstance = nullptr;
 
-class VideoRendererManagerPrivate : public QObject
+class VideoRendererManagerPrivate final : public QObject
 {
    Q_OBJECT
 
diff --git a/src/private/videorenderermanager.h b/src/private/videorenderermanager.h
index 2cf14aedb4ec1599aba3fa61ec0c913936f5bbb1..07133d4889ea2d661241cc30f17f7810c697243e 100644
--- a/src/private/videorenderermanager.h
+++ b/src/private/videorenderermanager.h
@@ -37,7 +37,7 @@ struct SHMHeader;
 class VideoRendererManagerPrivate;
 
 ///VideoModel: Video event dispatcher
-class VideoRendererManager : public QObject
+class VideoRendererManager final : public QObject
 {
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
diff --git a/src/profilemodel.cpp b/src/profilemodel.cpp
index 226e300466b196af9449dbe88641ccf9cf87b322..8987b58530b45db9b1db4a6692eee73a5fea4c5e 100644
--- a/src/profilemodel.cpp
+++ b/src/profilemodel.cpp
@@ -45,7 +45,7 @@ class Person;
 class Account;
 struct Node;
 
-class ProfileEditor : public CollectionEditor<Person>
+class ProfileEditor final : public CollectionEditor<Person>
 {
 public:
    ProfileEditor(CollectionMediator<Person>* m) : CollectionEditor<Person>(m) {}
@@ -67,7 +67,7 @@ private:
 };
 
 ///ProfileContentBackend: Implement a backend for Profiles
-class ProfileContentBackend : public QObject, public CollectionInterface {
+class ProfileContentBackend final : public QObject, public CollectionInterface {
    Q_OBJECT
 public:
    template<typename T>
@@ -479,7 +479,7 @@ ProfileModel* ProfileModel::instance()
    return m_spInstance;
 }
 
-class ProfileModelPrivate : public QObject {
+class ProfileModelPrivate final : public QObject {
    Q_OBJECT
 public:
    ProfileModelPrivate(ProfileModel* parent);
diff --git a/src/protocolmodel.cpp b/src/protocolmodel.cpp
index 56b01d9875b0d7100c5ad5ee029e87fc9cc57f21..fea3a40a342aa89b6d2e01432402e659ad3e414b 100644
--- a/src/protocolmodel.cpp
+++ b/src/protocolmodel.cpp
@@ -28,7 +28,8 @@
 #include <account.h>
 #include <private/account_p.h>
 
-class ProtocolModelPrivate : public QObject {
+class ProtocolModelPrivate final : public QObject
+{
    Q_OBJECT
 public:
 
diff --git a/src/ringtonemodel.cpp b/src/ringtonemodel.cpp
index 1befec561b8c6f0511040a7c26e84c67c20920f5..d8568aacf261ddf86f9bdeba93b3e6c80fbfee69 100644
--- a/src/ringtonemodel.cpp
+++ b/src/ringtonemodel.cpp
@@ -31,7 +31,7 @@
 #include "ringtone.h"
 #include <localringtonecollection.h>
 
-class RingtoneModelPrivate : public QObject
+class RingtoneModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
diff --git a/src/tlsmethodmodel.cpp b/src/tlsmethodmodel.cpp
index 028b08ec014658114e85abc8819d09770d4c3072..6d2aee2d427cf345229baa87ccd4be77cde74ee4 100644
--- a/src/tlsmethodmodel.cpp
+++ b/src/tlsmethodmodel.cpp
@@ -28,7 +28,7 @@
 #include <account.h>
 #include <private/account_p.h>
 
-class TlsMethodModelPrivate : public QObject {
+class TlsMethodModelPrivate final : public QObject {
    Q_OBJECT
 public:
 
diff --git a/src/transitionalpersonbackend.cpp b/src/transitionalpersonbackend.cpp
index 9200b95e2633f8f7c96a6130ff6cae9fe3f00cd6..bac6cb9e8ae5e39eeab0df45964caaf190c6f904 100644
--- a/src/transitionalpersonbackend.cpp
+++ b/src/transitionalpersonbackend.cpp
@@ -27,7 +27,7 @@ class TransitionalPersonBackendPrivate
 
 };
 
-class TransitionalPersonEditor : public CollectionEditor<Person>
+class TransitionalPersonEditor final : public CollectionEditor<Person>
 {
 public:
    TransitionalPersonEditor(CollectionMediator<Person>* m) : CollectionEditor<Person>(m) {}
diff --git a/src/useractionmodel.cpp b/src/useractionmodel.cpp
index 3d39accfec6f5e892bca580f6526e652fe0f9238..5ec9c2f7050fc078d2146b708c8550b14defee78 100644
--- a/src/useractionmodel.cpp
+++ b/src/useractionmodel.cpp
@@ -41,7 +41,7 @@ public:
    virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
 };
 
-class UserActionModelPrivate : public QObject
+class UserActionModelPrivate final : public QObject
 {
    Q_OBJECT
 public: