diff --git a/plugins/itemdata/itemdata.cpp b/plugins/itemdata/itemdata.cpp
index c1993182ea97313d5500e22573365e2a2c2a4971..e0435599068188c4921a6b14d6b1e2d5a3d2b0b3 100644
--- a/plugins/itemdata/itemdata.cpp
+++ b/plugins/itemdata/itemdata.cpp
@@ -151,14 +151,8 @@ void ItemData::contextMenuEvent(QContextMenuEvent *e)
     e->ignore();
 }
 
-ItemDataLoader::ItemDataLoader()
-    : ui(NULL)
-{
-}
-
 ItemDataLoader::~ItemDataLoader()
 {
-    delete ui;
 }
 
 ItemWidget *ItemDataLoader::create(const QModelIndex &index, QWidget *parent) const
@@ -187,8 +181,7 @@ QVariantMap ItemDataLoader::applySettings()
 
 QWidget *ItemDataLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemDataSettings;
+    ui.reset(new Ui::ItemDataSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
 
diff --git a/plugins/itemdata/itemdata.h b/plugins/itemdata/itemdata.h
index b97656f607b2f3e605e7782bc9dcc41e4c8a635d..a613b2faadc700fd0541bab221cc049fed6439c6 100644
--- a/plugins/itemdata/itemdata.h
+++ b/plugins/itemdata/itemdata.h
@@ -24,6 +24,7 @@
 #include "gui/icons.h"
 
 #include <QLabel>
+#include <QScopedPointer>
 
 namespace Ui {
 class ItemDataSettings;
@@ -58,8 +59,6 @@ class ItemDataLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemDataLoader();
-
     ~ItemDataLoader();
 
     virtual ItemWidget *create(const QModelIndex &index, QWidget *parent) const;
@@ -83,7 +82,7 @@ private slots:
 
 private:
     QVariantMap m_settings;
-    Ui::ItemDataSettings *ui;
+    QScopedPointer<Ui::ItemDataSettings> ui;
 };
 
 #endif // ITEMDATA_H
diff --git a/plugins/itemencrypted/itemencrypted.cpp b/plugins/itemencrypted/itemencrypted.cpp
index 4ef2c7153dab2bc8176b8b97a74f3d7b15c904f2..7e91496b0f4221030045a35912ae917a71cf6f18 100644
--- a/plugins/itemencrypted/itemencrypted.cpp
+++ b/plugins/itemencrypted/itemencrypted.cpp
@@ -117,7 +117,7 @@ void ItemEncrypted::setModelData(QWidget *editor, QAbstractItemModel *model,
 }
 
 ItemEncryptedLoader::ItemEncryptedLoader()
-    : ui(NULL)
+    : ui()
     , m_settings()
     , m_gpgProcessStatus(GpgNotRunning)
     , m_gpgProcess(NULL)
@@ -127,7 +127,6 @@ ItemEncryptedLoader::ItemEncryptedLoader()
 ItemEncryptedLoader::~ItemEncryptedLoader()
 {
     terminateGpgProcess();
-    delete ui;
 }
 
 ItemWidget *ItemEncryptedLoader::create(const QModelIndex &index, QWidget *parent) const
@@ -150,8 +149,7 @@ QVariantMap ItemEncryptedLoader::applySettings()
 
 QWidget *ItemEncryptedLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemEncryptedSettings;
+    ui.reset(new Ui::ItemEncryptedSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
 
diff --git a/plugins/itemencrypted/itemencrypted.h b/plugins/itemencrypted/itemencrypted.h
index b94892313aefa8dd2e03b86fae23faf32a9370b7..6232c79fc54a82e6c505def985c3144a4eb9ff99 100644
--- a/plugins/itemencrypted/itemencrypted.h
+++ b/plugins/itemencrypted/itemencrypted.h
@@ -24,6 +24,7 @@
 #include "gui/icons.h"
 
 #include <QProcess>
+#include <QScopedPointer>
 #include <QWidget>
 
 namespace Ui {
@@ -97,7 +98,7 @@ private:
 
     void updateUi();
 
-    Ui::ItemEncryptedSettings *ui;
+    QScopedPointer<Ui::ItemEncryptedSettings> ui;
     QVariantMap m_settings;
 
     GpgProcessStatus m_gpgProcessStatus;
diff --git a/plugins/itemfakevim/itemfakevim.cpp b/plugins/itemfakevim/itemfakevim.cpp
index 2151c60c8df772b177a85b54623420a307082e58..a9d45bd40bf7c8ac170149e7c7e2796a0a06a71d 100644
--- a/plugins/itemfakevim/itemfakevim.cpp
+++ b/plugins/itemfakevim/itemfakevim.cpp
@@ -531,14 +531,8 @@ QObject *ItemFakeVim::createExternalEditor(const QModelIndex &index, QWidget *pa
     return m_childItem->createExternalEditor(index, parent);
 }
 
-ItemFakeVimLoader::ItemFakeVimLoader()
-    : ui(NULL)
-{
-}
-
 ItemFakeVimLoader::~ItemFakeVimLoader()
 {
-    delete ui;
 }
 
 QVariant ItemFakeVimLoader::icon() const
@@ -563,8 +557,7 @@ void ItemFakeVimLoader::loadSettings(const QVariantMap &settings)
 
 QWidget *ItemFakeVimLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemFakeVimSettings;
+    ui.reset(new Ui::ItemFakeVimSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
 
diff --git a/plugins/itemfakevim/itemfakevim.h b/plugins/itemfakevim/itemfakevim.h
index b5cc7dd3cb56934e460773a471bcd1450be24ae2..252b2229dcbfe67e005cabc749603baa463b0758 100644
--- a/plugins/itemfakevim/itemfakevim.h
+++ b/plugins/itemfakevim/itemfakevim.h
@@ -66,8 +66,6 @@ class ItemFakeVimLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemFakeVimLoader();
-
     ~ItemFakeVimLoader();
 
     virtual QString id() const { return "itemfakevim"; }
@@ -91,7 +89,7 @@ public:
 private:
     bool m_enabled;
     QString m_sourceFileName;
-    Ui::ItemFakeVimSettings *ui;
+    QScopedPointer<Ui::ItemFakeVimSettings> ui;
 };
 
 #endif // ITEMFAKEVIM_H
diff --git a/plugins/itemimage/itemimage.cpp b/plugins/itemimage/itemimage.cpp
index 92c505c1a03391358d36568a964772253a51ddcf..5335c07693b94573780ae05321de23c5e6919069 100644
--- a/plugins/itemimage/itemimage.cpp
+++ b/plugins/itemimage/itemimage.cpp
@@ -99,14 +99,8 @@ QObject *ItemImage::createExternalEditor(const QModelIndex &index, QWidget *pare
     return cmd.isEmpty() ? NULL : new ItemEditor(data, mime, cmd, parent);
 }
 
-ItemImageLoader::ItemImageLoader()
-    : ui(NULL)
-{
-}
-
 ItemImageLoader::~ItemImageLoader()
 {
-    delete ui;
 }
 
 ItemWidget *ItemImageLoader::create(const QModelIndex &index, QWidget *parent) const
@@ -137,7 +131,6 @@ QStringList ItemImageLoader::formatsToSave() const
 
 QVariantMap ItemImageLoader::applySettings()
 {
-    Q_ASSERT(ui != NULL);
     m_settings["max_image_width"] = ui->spinBoxImageWidth->value();
     m_settings["max_image_height"] = ui->spinBoxImageHeight->value();
     m_settings["image_editor"] = ui->lineEditImageEditor->text();
@@ -147,8 +140,7 @@ QVariantMap ItemImageLoader::applySettings()
 
 QWidget *ItemImageLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemImageSettings;
+    ui.reset(new Ui::ItemImageSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
     ui->spinBoxImageWidth->setValue( m_settings.value("max_image_width", 320).toInt() );
diff --git a/plugins/itemimage/itemimage.h b/plugins/itemimage/itemimage.h
index 537a8203b33b4ba5b68139eacfd5c1d0c31648fd..cfbc476a39ec48d7991a482276e081e196fca2ae 100644
--- a/plugins/itemimage/itemimage.h
+++ b/plugins/itemimage/itemimage.h
@@ -24,6 +24,7 @@
 #include "item/itemwidget.h"
 
 #include <QLabel>
+#include <QScopedPointer>
 
 namespace Ui {
 class ItemImageSettings;
@@ -53,8 +54,6 @@ class ItemImageLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemImageLoader();
-
     ~ItemImageLoader();
 
     virtual ItemWidget *create(const QModelIndex &index, QWidget *parent) const;
@@ -77,7 +76,7 @@ public:
 
 private:
     QVariantMap m_settings;
-    Ui::ItemImageSettings *ui;
+    QScopedPointer<Ui::ItemImageSettings> ui;
 };
 
 #endif // ITEMIMAGE_H
diff --git a/plugins/itemnotes/itemnotes.cpp b/plugins/itemnotes/itemnotes.cpp
index baf0ecdcdba1bcd85e5051d6292dcab197838c73..db6a952e4cc41baa897d688281144286409efd14 100644
--- a/plugins/itemnotes/itemnotes.cpp
+++ b/plugins/itemnotes/itemnotes.cpp
@@ -273,14 +273,8 @@ void ItemNotes::showToolTip()
     QToolTip::showText(toolTipPosition, m_toolTipText, this);
 }
 
-ItemNotesLoader::ItemNotesLoader()
-    : ui(NULL)
-{
-}
-
 ItemNotesLoader::~ItemNotesLoader()
 {
-    delete ui;
 }
 
 QStringList ItemNotesLoader::formatsToSave() const
@@ -298,8 +292,7 @@ QVariantMap ItemNotesLoader::applySettings()
 
 QWidget *ItemNotesLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemNotesSettings;
+    ui.reset(new Ui::ItemNotesSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
 
diff --git a/plugins/itemnotes/itemnotes.h b/plugins/itemnotes/itemnotes.h
index 3c01b2eeb8facb301409294b782adf0e7800f34b..f6a61ccc2566c1cf48911a6d6fc1ad8a56ed80cd 100644
--- a/plugins/itemnotes/itemnotes.h
+++ b/plugins/itemnotes/itemnotes.h
@@ -87,8 +87,6 @@ class ItemNotesLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemNotesLoader();
-
     ~ItemNotesLoader();
 
     virtual QString id() const { return "itemnotes"; }
@@ -111,7 +109,7 @@ public:
 
 private:
     QVariantMap m_settings;
-    Ui::ItemNotesSettings *ui;
+    QScopedPointer<Ui::ItemNotesSettings> ui;
 };
 
 #endif // ITEMNOTES_H
diff --git a/plugins/itemsync/itemsync.cpp b/plugins/itemsync/itemsync.cpp
index ae7ba823f07516de7056223b572d04ca1cba7c6e..494a8010facf87f63d7107a516b2de493d7f6184 100644
--- a/plugins/itemsync/itemsync.cpp
+++ b/plugins/itemsync/itemsync.cpp
@@ -1250,20 +1250,12 @@ private:
     QMap<QPersistentModelIndex, IndexData> m_indexData;
 };
 
-ItemSyncLoader::ItemSyncLoader()
-    : ui(NULL)
-    , m_settings()
-{
-}
-
 ItemSyncLoader::~ItemSyncLoader()
 {
 }
 
 QVariantMap ItemSyncLoader::applySettings()
 {
-    Q_ASSERT(ui);
-
     // Apply settings from tab sync path table.
     QTableWidget *t = ui->tableWidgetSyncTabs;
     QStringList tabPaths;
@@ -1341,8 +1333,7 @@ void setNormalStretchFixedColumns(QTableWidget *table, int normalColumn, int str
 
 QWidget *ItemSyncLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemSyncSettings;
+    ui.reset(new Ui::ItemSyncSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
 
diff --git a/plugins/itemsync/itemsync.h b/plugins/itemsync/itemsync.h
index b8d3757d98a98bca6449c255c3d0ef3f323da986..e3f22014a87b7ac99fe971402b794300aaa1a32f 100644
--- a/plugins/itemsync/itemsync.h
+++ b/plugins/itemsync/itemsync.h
@@ -23,6 +23,7 @@
 #include "gui/icons.h"
 #include "item/itemwidget.h"
 
+#include <QScopedPointer>
 #include <QWidget>
 
 namespace Ui {
@@ -100,8 +101,6 @@ class ItemSyncLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemSyncLoader();
-
     ~ItemSyncLoader();
 
     virtual QString id() const { return "itemsync"; }
@@ -152,7 +151,7 @@ private:
 
     bool loadItems(QAbstractItemModel *model, const QStringList &files);
 
-    Ui::ItemSyncSettings *ui;
+    QScopedPointer<Ui::ItemSyncSettings> ui;
     QVariantMap m_settings;
     QMap<const QObject*, FileWatcher*> m_watchers;
     QMap<QString, QString> m_tabPaths;
diff --git a/plugins/itemtext/itemtext.cpp b/plugins/itemtext/itemtext.cpp
index 86715ae5909a58e484c9fb73644c4500241a4a09..18db9e2ce6ec7ff0d56235f30fd46f7128e289e1 100644
--- a/plugins/itemtext/itemtext.cpp
+++ b/plugins/itemtext/itemtext.cpp
@@ -188,14 +188,8 @@ void ItemText::onSelectionChanged()
     m_copyOnMouseUp = true;
 }
 
-ItemTextLoader::ItemTextLoader()
-    : ui(NULL)
-{
-}
-
 ItemTextLoader::~ItemTextLoader()
 {
-    delete ui;
 }
 
 ItemWidget *ItemTextLoader::create(const QModelIndex &index, QWidget *parent) const
@@ -221,7 +215,6 @@ QStringList ItemTextLoader::formatsToSave() const
 
 QVariantMap ItemTextLoader::applySettings()
 {
-    Q_ASSERT(ui != NULL);
     m_settings[optionUseRichText] = ui->checkBoxUseRichText->isChecked();
     m_settings[optionMaximumLines] = ui->spinBoxMaxLines->value();
     m_settings[optionMaximumHeight] = ui->spinBoxMaxHeight->value();
@@ -230,8 +223,7 @@ QVariantMap ItemTextLoader::applySettings()
 
 QWidget *ItemTextLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemTextSettings;
+    ui.reset(new Ui::ItemTextSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
     ui->checkBoxUseRichText->setChecked( m_settings.value(optionUseRichText, true).toBool() );
diff --git a/plugins/itemtext/itemtext.h b/plugins/itemtext/itemtext.h
index 2bf88fc8f9ce1c68b8c26ed2ded55e561c600a2e..86509e2486f194e4195ffb60b679b850df4492fd 100644
--- a/plugins/itemtext/itemtext.h
+++ b/plugins/itemtext/itemtext.h
@@ -23,6 +23,7 @@
 #include "gui/icons.h"
 #include "item/itemwidget.h"
 
+#include <QScopedPointer>
 #include <QTextDocument>
 #include <QTextEdit>
 
@@ -63,8 +64,6 @@ class ItemTextLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemTextLoader();
-
     ~ItemTextLoader();
 
     virtual ItemWidget *create(const QModelIndex &index, QWidget *parent) const;
@@ -85,7 +84,7 @@ public:
 
 private:
     QVariantMap m_settings;
-    Ui::ItemTextSettings *ui;
+    QScopedPointer<Ui::ItemTextSettings> ui;
 };
 
 #endif // ITEMTEXT_H
diff --git a/plugins/itemweb/itemweb.cpp b/plugins/itemweb/itemweb.cpp
index 2dd0c95bef7379ac932df2fccca56ff74dc97539..a8667292f030f4ec4d2bf7355106e77281b6a987 100644
--- a/plugins/itemweb/itemweb.cpp
+++ b/plugins/itemweb/itemweb.cpp
@@ -162,8 +162,7 @@ void ItemWeb::mouseReleaseEvent(QMouseEvent *e)
     }
 }
 
-ItemWebLoader::ItemWebLoader()
-    : ui(NULL)
+ItemWebLoader::~ItemWebLoader()
 {
 }
 
@@ -189,8 +188,7 @@ QVariantMap ItemWebLoader::applySettings()
 
 QWidget *ItemWebLoader::createSettingsWidget(QWidget *parent)
 {
-    delete ui;
-    ui = new Ui::ItemWebSettings;
+    ui.reset(new Ui::ItemWebSettings);
     QWidget *w = new QWidget(parent);
     ui->setupUi(w);
     ui->spinBoxMaxHeight->setValue( m_settings.value(optionMaximumHeight, 0).toInt() );
diff --git a/plugins/itemweb/itemweb.h b/plugins/itemweb/itemweb.h
index d50c33b94249af154be0ae1cfbfe3384fe88fb18..a103abcb9665ff6d293f72dc1a05ab7d5c2435ca 100644
--- a/plugins/itemweb/itemweb.h
+++ b/plugins/itemweb/itemweb.h
@@ -23,6 +23,7 @@
 #include "gui/icons.h"
 #include "item/itemwidget.h"
 
+#include <QScopedPointer>
 #include <QVariantMap>
 
 #if QT_VERSION < 0x050000
@@ -73,7 +74,7 @@ class ItemWebLoader : public QObject, public ItemLoaderInterface
     Q_INTERFACES(ItemLoaderInterface)
 
 public:
-    ItemWebLoader();
+    ~ItemWebLoader();
 
     virtual ItemWidget *create(const QModelIndex &index, QWidget *parent) const;
 
@@ -95,7 +96,7 @@ public:
 
 private:
     QVariantMap m_settings;
-    Ui::ItemWebSettings *ui;
+    QScopedPointer<Ui::ItemWebSettings> ui;
 };
 
 #endif // ITEMWEB_H
diff --git a/utils/sanitize.sh b/utils/sanitize.sh
index 20d1056a8538a26df6efcf750c4bf7154cee82ea..60408c16ff83336ef1f07f402e8e1a83ad6a1035 100755
--- a/utils/sanitize.sh
+++ b/utils/sanitize.sh
@@ -25,7 +25,7 @@ if [ "$sanitize" == "address" ]; then
     sanitize_other="$sanitize_other,address-full,init-order"
 
     export ASAN_SYMBOLIZER_PATH=${ASAN_SYMBOLIZER_PATH:-$(which llvm-symbolizer)}
-    export ASAN_OPTIONS=${ASAN_OPTIONS:-"detect_stack_use_after_return=1 print_stats=1"}
+    export ASAN_OPTIONS=${ASAN_OPTIONS:-"detect_leaks=1 detect_stack_use_after_return=1 print_stats=1"}
 elif [ "$sanitize" == "memory" ]; then
     compiler_flags="$compiler_flags -fsanitize-memory-track-origins"