diff --git a/callwidget.cpp b/callwidget.cpp
index 4d09fb74b72ecf86f621a3e0dcb3f977130b64e5..7051f26eb7da29de91a3408be4d1c2f922a8e60c 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -27,6 +27,7 @@
 #include <QDesktopServices>
 #include <QScrollBar>
 #include <QWebEngineScript>
+#include <QMimeData>
 
 #include <algorithm>
 #include <memory>
@@ -50,7 +51,6 @@
 #include "pixbufmanipulator.h"
 #include "ringthemeutils.h"
 #include "settingskey.h"
-#include "windowscontactbackend.h"
 
 CallWidget::CallWidget(QWidget* parent) :
     NavWidget(parent),
diff --git a/callwidget.h b/callwidget.h
index ac93342c40b33a36443472bc4fac87a47c2aa721..a2eb2873925f92d5d3a1642900ad0bbee6169a54 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -33,12 +33,6 @@
 #include "navwidget.h"
 #include "smartlistmodel.h"
 
-// old LRC
-#include "accountmodel.h"
-#include "media/textrecording.h"
-#include "video/previewmanager.h"
-#include "video/renderer.h"
-
 // new LRC
 #include "api/account.h"
 #include "api/contact.h"
diff --git a/lrcinstance.h b/lrcinstance.h
index c4247d151fcc34cf9576a91f0efd450141a28520..7f0c5408956f08cf768b0ef03d2d869210cf534c 100644
--- a/lrcinstance.h
+++ b/lrcinstance.h
@@ -46,8 +46,6 @@
 #include "api/conversationmodel.h"
 #include "api/peerdiscoverymodel.h"
 
-#include "account.h"
-
 using namespace lrc::api;
 
 class LRCInstance : public QObject
@@ -61,8 +59,6 @@ public:
     };
     static void init() {
         instance();
-        // TODO: remove when all platforms migrate to avModel
-        instance().avModel().deactivateOldVideoModels();
     };
     static Lrc& getAPI() {
         return *(instance().lrc_);
diff --git a/mainwindow.cpp b/mainwindow.cpp
index b4a88346c71a19ff71bca798cc0b3125b2ee043c..6ae4a9c85a445802a20ebce21a1450a19daff1ec 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -27,9 +27,6 @@
 #include <QTimer>
 #include <QWindow>
 
-#include "media/text.h"
-#include "media/textrecording.h"
-
 #ifdef Q_OS_WIN
 #include <QWinThumbnailToolBar>
 #include <QWinThumbnailToolButton>
@@ -37,7 +34,6 @@
 #endif
 
 #include "aboutdialog.h"
-#include "callmodel.h"
 #include "callwidget.h"
 #include "settingskey.h"
 #include "utils.h"
@@ -140,10 +136,11 @@ MainWindow::MainWindow(QWidget* parent)
 
     connect(&GlobalSystemTray::instance(), SIGNAL(messageClicked()), this, SLOT(notificationClicked()));
 
-    connect(&netManager_, &QNetworkConfigurationManager::onlineStateChanged, [=](bool online) {
-        Q_UNUSED(online)
-        AccountModel::instance().slotConnectivityChanged();
-    });
+    connect(&netManager_, &QNetworkConfigurationManager::onlineStateChanged,
+        [=](bool online) {
+            Q_UNUSED(online);
+            LRCInstance::connectivityChanged();
+        });
 
     auto flags_ = windowFlags();
 
diff --git a/newwizardwidget.cpp b/newwizardwidget.cpp
index c8cea46df04a827ef133434ceaf1750d561c0091..0043a204d719f8605c89322c7708ff48e28e06b4 100644
--- a/newwizardwidget.cpp
+++ b/newwizardwidget.cpp
@@ -306,7 +306,7 @@ NewWizardWidget::timeoutNameLookupTimer()
 {
     if (ui->signUpCheckbox->isChecked() && !ui->usernameEdit->text().isEmpty()) {
         updateNameRegistrationUi(NameRegistrationUIState::SEARCHING);
-        NameDirectory::instance().lookupName(nullptr, QString(), registeredName_);
+        NameDirectory::instance().lookupName(QString(), registeredName_);
     }
 }
 
diff --git a/newwizardwidget.h b/newwizardwidget.h
index 8651ff23ec2cd6948c1771bdb75ddf52347dc3d1..c759dad608c69354df501192219a0fd28203aa01 100644
--- a/newwizardwidget.h
+++ b/newwizardwidget.h
@@ -25,6 +25,8 @@
 #include "lrcinstance.h"
 #include "navwidget.h"
 
+#include "namedirectory.h"
+
 namespace Ui {
 class NewWizardWidget;
 }
diff --git a/pixbufmanipulator.cpp b/pixbufmanipulator.cpp
index 2d71554b2fda45fb34eb2014b6315ac0fe05be63..8a49d4ff9c515b6a6a7b2ae2f701442fc551f509 100644
--- a/pixbufmanipulator.cpp
+++ b/pixbufmanipulator.cpp
@@ -29,9 +29,6 @@
 #include <QBuffer>
 #include <QPainter>
 
-#include "person.h"
-#include "call.h"
-#include "contactmethod.h"
 #include "globalinstances.h"
 
  // new LRC
@@ -44,40 +41,6 @@
 #include "ringthemeutils.h"
 #undef interface
 
-QVariant
-PixbufManipulator::callPhoto(Call* c, const QSize& size, bool displayPresence)
-{
-    if (!c || c->type() == Call::Type::CONFERENCE){
-        return QVariant::fromValue(Utils::fallbackAvatar(size,
-                                                         c->peerContactMethod()->uri().full(),
-                                                         c->peerContactMethod()->bestName()));
-    }
-    return callPhoto(c->peerContactMethod(), size, displayPresence);
-}
-
-QVariant
-PixbufManipulator::callPhoto(const ContactMethod* cm, const QSize& size, bool displayPresence)
-{
-    if (cm && cm->contact()) {
-        return contactPhoto(cm->contact(), size, displayPresence);
-    } else {
-        return QVariant::fromValue(Utils::fallbackAvatar(size, cm));
-    }
-}
-
-QVariant
-PixbufManipulator::contactPhoto(Person* p, const QSize& size, bool displayPresence)
-{
-    Q_UNUSED(displayPresence);
-    QImage photo;
-    if (p->photo().isValid()) {
-        photo = p->photo().value<QImage>();
-    } else {
-        photo = Utils::fallbackAvatar(IMAGE_SIZE, p->phoneNumbers().at(0));
-    }
-    return QVariant::fromValue(Utils::scaleAndFrame(photo, size));
-}
-
 QVariant PixbufManipulator::personPhoto(const QByteArray& data, const QString& type)
 {
     QImage avatar;
@@ -99,13 +62,6 @@ PixbufManipulator::numberCategoryIcon(const QVariant& p, const QSize& size, bool
     return QVariant();
 }
 
-QVariant
-PixbufManipulator::securityIssueIcon(const QModelIndex& index)
-{
-    Q_UNUSED(index)
-    return QVariant();
-}
-
 QByteArray
 PixbufManipulator::toByteArray(const QVariant& pxm)
 {
@@ -114,19 +70,6 @@ PixbufManipulator::toByteArray(const QVariant& pxm)
     return ba;
 }
 
-QVariant
-PixbufManipulator::collectionIcon(const CollectionInterface* colItf, PixmapManipulatorI::CollectionIconHint hint) const
-{
-    Q_UNUSED(colItf)
-    Q_UNUSED(hint)
-    return QVariant();
-}
-QVariant
-PixbufManipulator::securityLevelIcon(const SecurityEvaluationModel::SecurityLevel level) const
-{
-    Q_UNUSED(level)
-    return QVariant();
-}
 QVariant
 PixbufManipulator::userActionIcon(const UserActionElement& state) const
 {
@@ -140,48 +83,6 @@ QVariant PixbufManipulator::decorationRole(const QModelIndex& index)
     return QVariant();
 }
 
-QVariant PixbufManipulator::decorationRole(const Call* c)
-{
-    QImage photo;
-    if (c   && c->peerContactMethod()
-            && c->peerContactMethod()->contact()
-            && c->peerContactMethod()->contact()->photo().isValid()) {
-        photo =  c->peerContactMethod()->contact()->photo().value<QImage>();
-    } else {
-        Utils::fallbackAvatar(IMAGE_SIZE, c->peerContactMethod());
-    }
-    return QVariant::fromValue(Utils::scaleAndFrame(photo, IMAGE_SIZE));
-}
-
-QVariant PixbufManipulator::decorationRole(const ContactMethod* cm)
-{
-    QImage photo;
-    if (cm  && cm->contact()
-            && cm->contact()->photo().isValid()) {
-        photo = cm->contact()->photo().value<QImage>();
-    } else {
-        photo = Utils::fallbackAvatar(IMAGE_SIZE, cm);
-    }
-    return QVariant::fromValue(Utils::scaleAndFrame(photo, IMAGE_SIZE));
-}
-
-QVariant PixbufManipulator::decorationRole(const Person* p)
-{
-    QImage photo;
-    if (p && p->photo().isValid()) {
-        photo = p->photo().value<QImage>();
-    } else {
-        photo = Utils::fallbackAvatar(IMAGE_SIZE, p->phoneNumbers().at(0));
-    }
-    return QVariant::fromValue(Utils::scaleAndFrame(photo, IMAGE_SIZE));
-}
-
-QVariant PixbufManipulator::decorationRole(const Account* acc)
-{
-    Q_UNUSED(acc);
-    return QVariant();
-}
-
 QVariant
 PixbufManipulator::decorationRole(const lrc::api::conversation::Info & conversationInfo,
                                   const lrc::api::account::Info & accountInfo)
diff --git a/pixbufmanipulator.h b/pixbufmanipulator.h
index 044f8e61212a5bc4d5c9aba44222f03529535a07..1414015f8ec98c056a7d4195106622715697c183 100644
--- a/pixbufmanipulator.h
+++ b/pixbufmanipulator.h
@@ -31,25 +31,13 @@ QByteArray QImageToByteArray(QImage image);
 
 class PixbufManipulator : public Interfaces::PixmapManipulatorI {
 public:
-    QVariant callPhoto(Call* c, const QSize& size, bool displayPresence = true) override;
-    QVariant callPhoto(const ContactMethod* n, const QSize& size, bool displayPresence = true) override;
-    QVariant contactPhoto(Person* c, const QSize& size, bool displayPresence = true) override;
     QVariant personPhoto(const QByteArray& data, const QString& type = "PNG") override;
 
     /* TODO: the following methods return an empty QVariant/QByteArray */
     QVariant   numberCategoryIcon(const QVariant& p, const QSize& size, bool displayPresence = false, bool isPresent = false) override;
-    QVariant   securityIssueIcon(const QModelIndex& index) override;
     QByteArray toByteArray(const QVariant& pxm) override;
-    QVariant   collectionIcon(const CollectionInterface* colItf,
-                              Interfaces::PixmapManipulatorI::CollectionIconHint hint =
-                                Interfaces::PixmapManipulatorI::CollectionIconHint::NONE) const override;
-    QVariant   securityLevelIcon(const SecurityEvaluationModel::SecurityLevel level) const override;
     QVariant   userActionIcon(const UserActionElement& state) const override;
     QVariant   decorationRole(const QModelIndex& index) override;
-    QVariant   decorationRole(const Call* c) override;
-    QVariant   decorationRole(const ContactMethod* cm) override;
-    QVariant   decorationRole(const Person* p) override;
-    QVariant   decorationRole(const Account* acc) override;
     QVariant   decorationRole(const lrc::api::conversation::Info& conversation,
                               const lrc::api::account::Info& accountInfo) override;
 };
diff --git a/ring-client-windows.vcxproj b/ring-client-windows.vcxproj
index 3aec6d09dad6c8f2a13cbc8e0bd328b466b46263..6722e765d99188ef8c8503d24f4450080eea243d 100644
--- a/ring-client-windows.vcxproj
+++ b/ring-client-windows.vcxproj
@@ -306,7 +306,6 @@
     <ClCompile Include="updateconfirmdialog.cpp" />
     <ClCompile Include="videowidget.cpp" />
     <ClCompile Include="webchathelpers.cpp" />
-    <ClCompile Include="windowscontactbackend.cpp" />
   </ItemGroup>
   <ItemGroup>
     <QtMoc Include="aboutdialog.h">
@@ -502,7 +501,6 @@
     </QtMoc>
     <ClInclude Include="version.h" />
     <ClInclude Include="webchathelpers.h" />
-    <ClInclude Include="windowscontactbackend.h" />
   </ItemGroup>
   <ItemGroup>
     <CustomBuild Include="debug\moc_predefs.h.cbt">
diff --git a/ring-client-windows.vcxproj.filters b/ring-client-windows.vcxproj.filters
index ab3adb4053b2c6c62c157d3bfd5891c0c868dddb..a3e80917dfd0ae4cd35c368e78ad26cbe656f7dc 100644
--- a/ring-client-windows.vcxproj.filters
+++ b/ring-client-windows.vcxproj.filters
@@ -108,9 +108,6 @@
     <ClCompile Include="videowidget.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="windowscontactbackend.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="smartlistview.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
@@ -266,9 +263,6 @@
     <QtMoc Include="videowidget.h">
       <Filter>Header Files</Filter>
     </QtMoc>
-    <ClInclude Include="windowscontactbackend.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
     <QtMoc Include="smartlistmodel.h">
       <Filter>Header Files</Filter>
     </QtMoc>
diff --git a/settingswidget.cpp b/settingswidget.cpp
index 8ff55500c5aae608f57ecfa902f8e31143651756..1cd2a433f0031731a15c28656c46dd0c1929f79a 100644
--- a/settingswidget.cpp
+++ b/settingswidget.cpp
@@ -33,8 +33,8 @@
 #include "banneditemwidget.h"
 #include "version.h"
 
+#include "namedirectory.h"
 #include "api/newdevicemodel.h"
-#include "media/recordingmodel.h"
 
 #include <QFileDialog>
 #include <QInputDialog>
@@ -389,7 +389,7 @@ void SettingsWidget::receiveRegNameSlot(const std::string& accountID,
 
 void SettingsWidget::beforeNameLookup()
 {
-    NameDirectory::instance().lookupName(nullptr, QString(), registeredName_);
+    NameDirectory::instance().lookupName(QString(), registeredName_);
 }
 
 void SettingsWidget::afterNameLookup(lrc::api::account::LookupStatus status, const std::string& regName)
@@ -765,8 +765,6 @@ void SettingsWidget::setConnections()
 
     connect(ui->downloadButton, &QAbstractButton::clicked, this, &SettingsWidget::openDownloadFolderSlot);
 
-    connect(ui->alwaysRecordingCheckBox, &QAbstractButton::clicked, this, &SettingsWidget::slotSetAlwaysRecording);
-
     connect(ui->checkUpdateButton, &QAbstractButton::clicked, this, &SettingsWidget::checkForUpdateSlot);
 
     connect(ui->autoUpdateCheckBox, &QAbstractButton::clicked, this, &SettingsWidget::slotSetUpdateAutomatic);
@@ -797,14 +795,14 @@ void SettingsWidget::populateGeneralSettings()
     ui->notificationCheckBox->setChecked(notifs);
 
     //recordings
-    ui->alwaysRecordingCheckBox->setChecked(media::RecordingModel::instance().isAlwaysRecording());
-
-    if (media::RecordingModel::instance().recordPath().isEmpty()) {
-        QString recordPath = QDir::toNativeSeparators(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
-        media::RecordingModel::instance().setRecordPath(recordPath);
+    if (LRCInstance::avModel().getRecordPath().empty()) {
+        QString recordPath = QDir::toNativeSeparators(
+            QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
+        LRCInstance::avModel().setRecordPath(recordPath.toStdString());
     }
 
-    Utils::setElidedText(ui->recordPathButton, media::RecordingModel::instance().recordPath());
+    Utils::setElidedText(ui->recordPathButton,
+        QString::fromStdString(LRCInstance::avModel().getRecordPath()));
 
 #ifdef Q_OS_WIN
     ui->autoUpdateCheckBox->setChecked(settings.value(SettingsKey::autoUpdate).toBool());
@@ -851,19 +849,20 @@ void SettingsWidget::openDownloadFolderSlot()
     }
 }
 
-void SettingsWidget::slotSetAlwaysRecording(bool state)
-{
-    media::RecordingModel::instance().setAlwaysRecording(state);
-}
-
 void SettingsWidget::openRecordFolderSlot()
 {
-    QString dir = QFileDialog::getExistingDirectory(this, tr("Select A Folder For Your Recordings"),
-        media::RecordingModel::instance().recordPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+    QString dir = QFileDialog::getExistingDirectory(
+        this,
+        tr("Select A Folder For Your Recordings"),
+        QString::fromStdString(LRCInstance::avModel().getRecordPath()),
+        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks
+    );
 
     if (!dir.isEmpty()) {
-        media::RecordingModel::instance().setRecordPath(dir);
-        Utils::setElidedText(ui->recordPathButton, media::RecordingModel::instance().recordPath());
+        LRCInstance::avModel().setRecordPath(dir.toStdString());
+        Utils::setElidedText(ui->recordPathButton,
+            QString::fromStdString(LRCInstance::avModel().getRecordPath())
+        );
     }
 }
 
diff --git a/settingswidget.h b/settingswidget.h
index 74560daf687489fec8ecb40e3c2563ea03e53434..43cbd6f181a5e96e9817ba8052b9bf632edbaa86 100644
--- a/settingswidget.h
+++ b/settingswidget.h
@@ -129,7 +129,6 @@ private slots:
     void checkForUpdateSlot();
     void slotSetClosedOrMin(bool state);
     void openDownloadFolderSlot();
-    void slotSetAlwaysRecording(bool state);
     void openRecordFolderSlot();
     void slotSetUpdateAutomatic(bool state);
     void outputDevIndexChangedSlot(int index);
diff --git a/settingswidget.ui b/settingswidget.ui
index 5afad8fd134a925924d7e0a1289355ae4315324a..0dc9b7466f768f882ecaa366c15899a4c96ea5e8 100644
--- a/settingswidget.ui
+++ b/settingswidget.ui
@@ -376,7 +376,7 @@
             </size>
            </property>
            <property name="currentIndex">
-            <number>3</number>
+            <number>0</number>
            </property>
            <widget class="QWidget" name="generalSettings">
             <property name="sizePolicy">
@@ -867,46 +867,6 @@
                            </item>
                           </layout>
                          </item>
-                         <item>
-                          <layout class="QHBoxLayout" name="horizontalLayout_30">
-                           <property name="spacing">
-                            <number>12</number>
-                           </property>
-                           <property name="leftMargin">
-                            <number>0</number>
-                           </property>
-                           <property name="topMargin">
-                            <number>0</number>
-                           </property>
-                           <item>
-                            <widget class="ToggleSwitch" name="alwaysRecordingCheckBox" native="true">
-                             <property name="enabled">
-                              <bool>false</bool>
-                             </property>
-                             <property name="sizePolicy">
-                              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-                               <horstretch>0</horstretch>
-                               <verstretch>0</verstretch>
-                              </sizepolicy>
-                             </property>
-                             <property name="minimumSize">
-                              <size>
-                               <width>0</width>
-                               <height>30</height>
-                              </size>
-                             </property>
-                             <property name="font">
-                              <font>
-                               <pointsize>10</pointsize>
-                              </font>
-                             </property>
-                             <property name="text" stdset="0">
-                              <string>Always Recording</string>
-                             </property>
-                            </widget>
-                           </item>
-                          </layout>
-                         </item>
                         </layout>
                        </item>
                       </layout>
@@ -1250,7 +1210,7 @@
                  <rect>
                   <x>0</x>
                   <y>0</y>
-                  <width>749</width>
+                  <width>705</width>
                   <height>1387</height>
                  </rect>
                 </property>
@@ -2573,7 +2533,7 @@
                  <rect>
                   <x>0</x>
                   <y>0</y>
-                  <width>749</width>
+                  <width>683</width>
                   <height>864</height>
                  </rect>
                 </property>
@@ -3941,18 +3901,18 @@
                        </property>
                       </widget>
                      </item>
-                      <item row="0" column="0">
-                        <widget class="ToggleSwitch" name="hardwareAccelCheckBox" native="false">
-                          <property name="font">
-                            <font>
-                              <pointsize>11</pointsize>
-                            </font>
-                          </property>
-                          <property name="text" stdset="0">
-                            <string>Enable hardware acceleration</string>
-                          </property>
-                        </widget>
-                      </item>
+                     <item>
+                      <widget class="ToggleSwitch" name="hardwareAccelCheckBox" native="true">
+                       <property name="font">
+                        <font>
+                         <pointsize>11</pointsize>
+                        </font>
+                       </property>
+                       <property name="text" stdset="0">
+                        <string>Enable hardware acceleration</string>
+                       </property>
+                      </widget>
+                     </item>
                      <item>
                       <spacer name="verticalSpacer_24">
                        <property name="orientation">
diff --git a/utils.cpp b/utils.cpp
index dd1929b6a1b2429d2af28318dbead417dbef4933..134df0abb933262c3c17e766b28388f099c26ccd 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -623,23 +623,6 @@ Utils::fallbackAvatar(const QSize size, const QString& canonicalUriStr, const QS
     return avatar;
 }
 
-QImage
-Utils::fallbackAvatar(const QSize size, const ContactMethod* cm)
-{
-    if (cm == nullptr) {
-        return QImage();
-    }
-    QImage image;
-    auto letterStr = QString();
-    if (cm->uri().userinfo() != cm->bestName()) {
-        letterStr = cm->bestName();
-    }
-    image = fallbackAvatar(size,
-        cm->uri().full(),
-        letterStr);
-    return image;
-}
-
 QImage
 Utils::fallbackAvatar(const QSize size, const std::string& alias, const std::string& uri)
 {
diff --git a/utils.h b/utils.h
index eb5512716028f2e3c19e7ac798488e3976ff3b21..ed4863752b050aef52eba7d905fa870cffed2304 100644
--- a/utils.h
+++ b/utils.h
@@ -42,11 +42,10 @@
 #define LPCWSTR char*
 #endif
 
-#include <api/conversationmodel.h>
-#include <api/account.h>
-#include <api/contactmodel.h>
-#include <api/contact.h>
-#include <contactmethod.h>
+#include "api/conversationmodel.h"
+#include "api/account.h"
+#include "api/contactmodel.h"
+#include "api/contact.h"
 
 static const QSize IMAGE_SIZE{ 128, 128 };
 
@@ -96,7 +95,6 @@ QImage getCirclePhoto(const QImage original, int sizePhoto);
 QImage conversationPhoto(const std::string& convUid, const lrc::api::account::Info& accountInfo);
 QColor getAvatarColor(const QString& canonicalUri);
 QImage fallbackAvatar(const QSize size, const QString& canonicalUriStr, const QString& letterStr = QString());
-QImage fallbackAvatar(const QSize size, const ContactMethod* cm);
 QImage fallbackAvatar(const QSize size, const std::string& alias, const std::string& uri);
 QByteArray QImageToByteArray(QImage image);
 QByteArray QByteArrayFromFile(const QString& filename);
diff --git a/videooverlay.cpp b/videooverlay.cpp
index acfde4745d06d074b7091760f7006f1fbc1e36f5..06a1378dc3a1a63f092d668d3895ab2e0dd48754 100644
--- a/videooverlay.cpp
+++ b/videooverlay.cpp
@@ -22,11 +22,6 @@
 
 #include <QTime>
 
-// LRC
-#include "callmodel.h"
-#include "person.h"
-#include "account.h"
-
 #include "lrcinstance.h"
 #include "utils.h"
 
@@ -46,6 +41,8 @@ VideoOverlay::VideoOverlay(QWidget* parent) :
     ui->noMicButton->setCheckable(true);
 
     ui->onHoldLabel->setVisible(false);
+
+    ui->recButton->setVisible(false);
 }
 
 VideoOverlay::~VideoOverlay()
diff --git a/videoview.h b/videoview.h
index fbcfc36156a22a50218b205e4559b115e3e210de..44e07a189739a4ce42f669cc0ea84c9c6778f3e3 100644
--- a/videoview.h
+++ b/videoview.h
@@ -23,11 +23,6 @@
 #include <QMouseEvent>
 #include <QPropertyAnimation>
 
-#include "callmodel.h"
-#include "video/devicemodel.h"
-#include "video/sourcemodel.h"
-#include "media/video.h"
-
 #include "videooverlay.h"
 
 namespace Ui {
diff --git a/windowscontactbackend.cpp b/windowscontactbackend.cpp
deleted file mode 100644
index 4dc98e5d18bf2c066a2280c0c2fd320d848a4b98..0000000000000000000000000000000000000000
--- a/windowscontactbackend.cpp
+++ /dev/null
@@ -1,391 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2015-2017 by Savoir-faire Linux                                *
- * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
- *                                                                         *
- * This program is free software; you can redistribute it and/or modify    *
- * it under the terms of the GNU General Public License as published by    *
- * the Free Software Foundation; either version 3 of the License, or       *
- * (at your option) any later version.                                     *
- *                                                                         *
- * This program is distributed in the hope that it will be useful,         *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
- * GNU General Public License for more details.                            *
- *                                                                         *
- * You should have received a copy of the GNU General Public License       *
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
- **************************************************************************/
-
-#include "windowscontactbackend.h"
-
-#include <QtXml>
-#include <QPainter>
-
-#include "personmodel.h"
-
-#include "utils.h"
-
-WindowsContactEditor::WindowsContactEditor(CollectionMediator<Person> *m
-                                           , WindowsContactBackend *parent)
-    : CollectionEditor<Person>(m),collection_(parent)
-{
-
-}
-
-WindowsContactEditor::~WindowsContactEditor()
-{
-
-}
-
-bool
-WindowsContactEditor::save(const Person *item)
-{
-    QFile file(QStandardPaths::writableLocation
-               (QStandardPaths::HomeLocation) + "/Contacts/"
-               + item->formattedName() + ".contact");
-    if (!file.open(QIODevice::ReadWrite)) {
-        file.close();
-        qDebug() << "Cannot open contact file";
-        return false;
-    }
-
-    QDomDocument doc;
-    doc.setContent(&file);
-
-    auto root = doc.elementsByTagName("c:contact").at(0);
-    auto nodes = doc.elementsByTagName("c:PhoneNumberCollection");
-
-    //if PhoneNumberCollection already exists
-    QVector<QString> nodeNumberVector;
-    if (nodes.length()) {
-        auto phoneNumberCollection = nodes.at(0);
-        auto phoneNumbers = doc.elementsByTagName("c:Number");
-        auto virtualPhoneNumber = item->phoneNumbers();
-        for (int i = 0; i < phoneNumbers.length(); i++) {
-            auto node = phoneNumbers.at(i).toElement();
-            nodeNumberVector.append(node.text());
-        }
-        for (auto elem : virtualPhoneNumber) {
-            if (not nodeNumberVector.contains(elem->uri())) {
-                auto phoneNumber = doc.createElement("c:PhoneNumber");
-                phoneNumberCollection.appendChild(phoneNumber);
-                phoneNumber.setAttribute("c:ElementID", Utils::GenGUID());
-                auto numberNode = doc.createElement("c:Number");
-                phoneNumber.appendChild(numberNode);
-                auto numberValue = doc.createTextNode(elem->uri());
-                numberNode.appendChild(numberValue);
-            }
-        }
-    } else {
-        auto phoneNumberCollection = doc.createElement("c:PhoneNumberCollection");
-        root.appendChild(phoneNumberCollection);
-        auto phoneNumber = doc.createElement("c:PhoneNumber");
-        phoneNumberCollection.appendChild(phoneNumber);
-        phoneNumber.setAttribute("c:ElementID", Utils::GenGUID());
-        auto numberNode = doc.createElement("c:Number");
-        phoneNumber.appendChild(numberNode);
-        auto numberValue = doc.createTextNode(item->phoneNumbers().at(0)->uri());
-        numberNode.appendChild(numberValue);
-    }
-    file.resize(0);
-    file.write(doc.toByteArray());
-    file.close();
-    return true;
-}
-
-bool
-WindowsContactEditor::remove(const Person *item)
-{
-    items_.removeOne(const_cast<Person*>(item));
-    mediator()->removeItem(item);
-    return true;
-}
-
-bool
-WindowsContactEditor::edit(Person *item)
-{
-    Q_UNUSED(item)
-    return false;
-}
-
-bool
-WindowsContactEditor::addNew(Person *item)
-{
-    QDomDocument doc;
-    QFile file(QStandardPaths::writableLocation
-               (QStandardPaths::HomeLocation) + "/Contacts/"
-               + item->formattedName()+".contact");
-    if (file.exists())
-        return false;
-    if (!file.open(QIODevice::ReadWrite)) {
-        file.close();
-        qDebug() << "Cannot create contact file";
-        return false;
-    }
-    doc.appendChild(
-                doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""));
-
-    //Create root
-    auto root = doc.createElement("c:contact");
-    root.setAttribute("c:Version", "1");
-    root.setAttribute("xmlns:c", "http://schemas.microsoft.com/Contact");
-    root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
-    root.setAttribute("xmlns:MSP2P","http://schemas.microsoft.com/Contact/Extended/MSP2P");
-    doc.appendChild(root);
-
-    auto date = Utils::GetISODate();
-
-    //Create creation date
-    auto creationDateNode = doc.createElement("c:CreationDate");
-    auto creationDateValue = doc.createTextNode(date);
-    creationDateNode.appendChild(creationDateValue);
-    root.appendChild(creationDateNode);
-
-    //Create extended node
-    auto extendedNode = doc.createElement("c:Extended");
-    extendedNode.setAttribute("xsi:nil", "true");
-    root.appendChild(extendedNode);
-
-    //Create contactID collection
-    auto contactIDCol = doc.createElement("c:ContactIDCollection");
-    root.appendChild(contactIDCol);
-    auto contactID = doc.createElement("c:ContactID");
-    contactID.setAttribute("c:ElementID", Utils::GenGUID());
-    auto contactValue = doc.createElement("c:Value");
-    auto value = doc.createTextNode(item->uid());
-    contactValue.appendChild(value);
-    contactID.appendChild(contactValue);
-    contactIDCol.appendChild(contactID);
-
-    //Create NameCollection
-    auto nameCollection = doc.createElement("c:NameCollection");
-    root.appendChild(nameCollection);
-    auto name = doc.createElement("c:Name");
-    nameCollection.appendChild(name);
-    name.setAttribute("c:ElementID", Utils::GenGUID());
-    auto formattedName = doc.createElement("c:FormattedName");
-    name.appendChild(formattedName);
-    auto formattedNameValue = doc.createTextNode(item->formattedName());
-    formattedName.appendChild(formattedNameValue);
-
-    //Create PhoneNumberCollection
-    auto phoneNumberCollection = doc.createElement("c:PhoneNumberCollection");
-    root.appendChild(phoneNumberCollection);
-    auto phoneNumber = doc.createElement("c:PhoneNumber");
-    phoneNumberCollection.appendChild(phoneNumber);
-    phoneNumber.setAttribute("c:ElementID", Utils::GenGUID());
-    auto numberNode = doc.createElement("c:Number");
-    phoneNumber.appendChild(numberNode);
-    auto numberValue = doc.createTextNode(item->phoneNumbers().at(0)->uri());
-    numberNode.appendChild(numberValue);
-
-    //Write to file
-    file.write(doc.toByteArray());
-    file.close();
-
-    return true;
-}
-
-bool
-WindowsContactEditor::addExisting(const Person *item)
-{
-    items_ << const_cast<Person*>(item);
-    mediator()->addItem(item);
-    return true;
-}
-
-QVector<Person*>
-WindowsContactEditor::items() const
-{
-    return items_;
-}
-
-WindowsContactBackend::WindowsContactBackend(CollectionMediator<Person>* mediator,
-                                             CollectionInterface* parent)
-    : CollectionInterface(new WindowsContactEditor(mediator,this), parent)
-    , mediator_(mediator), watcher_(new QFileSystemWatcher())
-{
-
-}
-
-WindowsContactBackend::~WindowsContactBackend()
-{
-    delete watcher_;
-}
-
-bool
-WindowsContactBackend::load()
-{
-    QtConcurrent::run(this, &WindowsContactBackend::loadRun);
-    watcher_->addPath(QStandardPaths::writableLocation
-                      (QStandardPaths::HomeLocation) + "/Contacts");
-
-    QObject::connect(watcher_, &QFileSystemWatcher::directoryChanged, [=](QString path) {
-        Q_UNUSED(path)
-        QtConcurrent::run(this, &WindowsContactBackend::loadRun);
-    });
-    return true;
-}
-
-bool
-WindowsContactBackend::loadRun()
-{
-    QDir contactDir(QStandardPaths::writableLocation
-                    (QStandardPaths::HomeLocation) + "/Contacts");
-    QStringList filesList = contactDir.entryList(QStringList("*.contact"));
-    auto ret = true;
-    for(auto contactFileName : filesList) {
-        if (not getPersonFromContactFile(contactDir, contactFileName))
-            ret = false;
-    }
-    return ret;
-}
-
-bool
-WindowsContactBackend::getPersonFromContactFile(const QDir& contactDir,
-                                                const QString &contactFileName)
-{
-    QString contactFilePath
-            (contactDir.absolutePath() + "/" +  contactFileName);
-    QFile contactFile(contactFilePath);
-    if (contactFile.open(QIODevice::ReadOnly)) {
-        QXmlStreamReader reader;
-        Person* p = new Person(this);
-        QVector<ContactMethod*> contactMethod;
-        reader.setDevice(&contactFile);
-        while (!reader.atEnd()) {
-            reader.readNext();
-            if (reader.isStartElement()) {
-                QString name = reader.name().toString();
-                if (name == "FormattedName")
-                    p->setFormattedName(reader.readElementText());
-                else if (name == "NickName")
-                    p->setNickName(reader.readElementText());
-                else if (name == "GivenName")
-                    p->setFirstName(reader.readElementText());
-                else if (name == "FamilyName")
-                    p->setFamilyName(reader.readElementText());
-                else if (name == "Company")
-                    p->setOrganization(reader.readElementText());
-                else if (name == "Department")
-                    p->setDepartment(reader.readElementText());
-                else if (name == "Number") {
-                    QString number = reader.readElementText();
-                    if (not number.isEmpty()) {
-                        ContactMethod *contact =
-                                PhoneDirectoryModel::instance().getNumber(number,p);
-                        contactMethod.append(contact);
-                    }
-                } else if (name == "ContactID") {
-                    while (reader.name().toString() != "Value")
-                        reader.readNext();
-                    p->setUid(reader.readElementText().toUtf8());
-                }
-                else if (name == "Photo") {
-                    //FIXME: It seems to be possible to have multiple photo...
-                    reader.readNext();
-                    if (reader.name().toString() == "Url") {
-                        QString photoValue = reader.readElementText();
-                        QImage photo;
-                        photo.load(photoValue);
-                        if (not photo.isNull())
-                            p->setPhoto(Utils::getCirclePhoto(photo, sizePhoto_));
-                    }
-                }
-                else if (name == "EmailAddress") {
-                    QString address;
-                    bool isPreferred = false;
-                    reader.readNext();
-                    while (reader.name().toString() != "EmailAddress"
-                           && !reader.atEnd()) {
-                        if (reader.isStartElement()) {
-                            QString tag = reader.name().toString();
-                            if (tag == "Address")
-                                address = reader.readElementText();
-                            else if (tag == "Label")
-                                if (reader.readElementText() == "Preferred")
-                                    isPreferred = true;
-                        }
-                        reader.readNext();
-                    }
-                    if (isPreferred)
-                        p->setPreferredEmail(address);
-                }
-            }
-        }
-        if (reader.hasError()) {
-            qDebug() << reader.errorString();
-            contactFile.close();
-            return false;
-        } else {
-            Person* existing = PersonModel::instance().getPersonByUid(p->uid());
-            if (existing) {
-                if (contactMethod.size() > 0)
-                    existing->setContactMethods ( contactMethod   );
-                existing->setNickName       ( p->nickName()       );
-                existing->setFirstName      ( p->firstName()      );
-                existing->setFamilyName     ( p->secondName()     );
-                existing->setFormattedName  ( p->formattedName()  );
-                existing->setOrganization   ( p->organization()   );
-                existing->setPreferredEmail ( p->preferredEmail() );
-                existing->setGroup          ( p->group()          );
-                existing->setDepartment     ( p->department()     );
-                existing->setPhoto          ( p->photo()          );
-                delete p;
-            } else {
-                p->setContactMethods(contactMethod);
-                editor<Person>()->addExisting(p);
-            }
-            return true;
-        }
-    } else {
-        qDebug() << "Error Opening contact file : " << contactFileName;
-        return false;
-    }
-}
-
-bool
-WindowsContactBackend::reload()
-{
-    return false;
-}
-
-bool
-WindowsContactBackend::clear()
-{
-    return false;
-}
-
-QString
-WindowsContactBackend::name() const
-{
-    return "Windows Contact Backend";
-}
-
-QString
-WindowsContactBackend::category() const
-{
-    return "Contacts";
-}
-
-bool
-WindowsContactBackend::isEnabled() const
-{
-    return true;
-}
-
-QByteArray
-WindowsContactBackend::id() const
-{
-    return "wincb";
-}
-
-FlagPack<CollectionInterface::SupportedFeatures> WindowsContactBackend::supportedFeatures() const
-{
-    return (
-                CollectionInterface::SupportedFeatures::NONE |
-                CollectionInterface::SupportedFeatures::LOAD |
-                CollectionInterface::SupportedFeatures::SAVE |
-                CollectionInterface::SupportedFeatures::REMOVE |
-                CollectionInterface::SupportedFeatures::ADD);
-}
diff --git a/windowscontactbackend.h b/windowscontactbackend.h
deleted file mode 100644
index 5f9916882ff0b4fc8d17085a88ec8b8887bcdb6d..0000000000000000000000000000000000000000
--- a/windowscontactbackend.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2015-2017 by Savoir-faire Linux                                *
- * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
- *                                                                         *
- * This program is free software; you can redistribute it and/or modify    *
- * it under the terms of the GNU General Public License as published by    *
- * the Free Software Foundation; either version 3 of the License, or       *
- * (at your option) any later version.                                     *
- *                                                                         *
- * This program is distributed in the hope that it will be useful,         *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
- * GNU General Public License for more details.                            *
- *                                                                         *
- * You should have received a copy of the GNU General Public License       *
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
- **************************************************************************/
-
-#pragma once
-
-#include <QObject>
-#include <QStandardPaths>
-#include <QDir>
-#include <QXmlStreamReader>
-#include <QtConcurrent/QtConcurrent>
-#include <QImage>
-#include <QFileSystemWatcher>
-
-#include "person.h"
-#include "collectioninterface.h"
-#include "contactmethod.h"
-#include "phonedirectorymodel.h"
-
-class WindowsContactBackend : public CollectionInterface
-{
-public:
-    explicit WindowsContactBackend(CollectionMediator<Person>* mediator, CollectionInterface* parent = nullptr);
-    virtual ~WindowsContactBackend();
-
-    virtual bool load() override;
-    virtual bool reload() override;
-    virtual bool clear() override;
-    virtual QString    name     () const override;
-    virtual QString    category () const override;
-    virtual bool       isEnabled() const override;
-    virtual QByteArray id       () const override;
-    virtual FlagPack<CollectionInterface::SupportedFeatures>  supportedFeatures() const override;
-
-private:
-    bool loadRun();
-private:
-    CollectionMediator<Person>*  mediator_;
-    constexpr static int sizePhoto_ = 50;
-    QFileSystemWatcher* watcher_;
-
-private:
-    bool getPersonFromContactFile(const QDir &contactDir, const QString& contactFileName);
-};
-
-class WindowsContactEditor : public CollectionEditor<Person>
-{
-public:
-    WindowsContactEditor(CollectionMediator<Person>* m, WindowsContactBackend* parent);
-    ~WindowsContactEditor();
-    virtual bool save       ( const Person* item ) override;
-    virtual bool remove     ( const Person* item ) override;
-    virtual bool edit       ( Person*       item ) override;
-    virtual bool addNew     ( Person* item       ) override;
-    virtual bool addExisting( const Person* item ) override;
-
-private:
-    virtual QVector<Person*> items() const override;
-
-    QVector<Person*> items_;
-    WindowsContactBackend* collection_;
-};
-