diff --git a/RingWinClient.pro b/RingWinClient.pro
index c36f912c786adeebabfcf1ed59ce767895a6282d..5ceaae6fa6701659b8488d0151d1f0ea6868b344 100644
--- a/RingWinClient.pro
+++ b/RingWinClient.pro
@@ -34,7 +34,6 @@ SOURCES += main.cpp\
     mainbar.cpp \
     navwidget.cpp \
     accountdetails.cpp \
-    minimalhistorybackend.cpp \
     aboutdialog.cpp \
     videowidget.cpp \
     utils.cpp \
@@ -51,7 +50,6 @@ HEADERS  += mainwindow.h \
     mainbar.h \
     navwidget.h \
     accountdetails.h \
-    minimalhistorybackend.h \
     aboutdialog.h \
     videowidget.h \
     utils.h \
diff --git a/callwidget.cpp b/callwidget.cpp
index b9a2acc31e7fbeda1c9b5931746564fb55c9f5bb..72d5fe09f89253ba78b16902782f7dbc5368b07e 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -31,6 +31,7 @@
 #include "windowscontactbackend.h"
 #include "historydelegate.h"
 #include "contactdelegate.h"
+#include "localhistorycollection.h"
 
 #include "wizarddialog.h"
 
@@ -67,7 +68,7 @@ CallWidget::CallWidget(QWidget *parent) :
         ui->callList->setModel(callModel_);
 
         CategorizedHistoryModel::instance()->
-                addCollection<MinimalHistoryBackend>(LoadOptions::FORCE_ENABLED);
+                addCollection<LocalHistoryCollection>(LoadOptions::FORCE_ENABLED);
 
         PersonModel::instance()->
                 addCollection<FallbackPersonCollection>(LoadOptions::FORCE_ENABLED);
@@ -218,8 +219,6 @@ CallWidget::callStateChanged(Call* call, Call::State previousState)
         ui->videoWidget->hide();
     } else if (call->state() == Call::State::CURRENT) {
         ui->videoWidget->show();
-        ui->messageOutput->setModel(
-                    IMConversationManager::instance()->getModel(actualCall_));
     }
     ui->callStateLabel->setText("Call State : " + state.at((int)call->state()));
 }
diff --git a/callwidget.h b/callwidget.h
index fa57d246011b380bd52cf252d3c0546ad133a054..db35af40521ff679e7895bd1289ff5f164a0cacf 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -31,7 +31,6 @@
 #include "video/previewmanager.h"
 
 #include "categorizedhistorymodel.h"
-#include "minimalhistorybackend.h"
 
 namespace Ui {
 class CallWidget;
diff --git a/minimalhistorybackend.cpp b/minimalhistorybackend.cpp
deleted file mode 100644
index eb1b7652bc499c947f1cec7b387189e44947f5a6..0000000000000000000000000000000000000000
--- a/minimalhistorybackend.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/************************************************************************************
- *   Copyright (C) 2014-2015 by Savoir-Faire Linux                                       *
- *   Author : Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>         *
- *                                                                                  *
- *   This library is free software; you can redistribute it and/or                  *
- *   modify it under the terms of the GNU Lesser General Public                     *
- *   License as published by the Free Software Foundation; either                   *
- *   version 2.1 of the License, or (at your option) any later version.             *
- *                                                                                  *
- *   This library 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              *
- *   Lesser General Public License for more details.                                *
- *                                                                                  *
- *   You should have received a copy of the GNU Lesser General Public               *
- *   License along with this library; if not, write to the Free Software            *
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA *
- ***********************************************************************************/
-#include "minimalhistorybackend.h"
-
-//Qt
-#include <QtCore/QFile>
-#include <QtCore/QDir>
-#include <QtCore/QHash>
-#include <QtWidgets/QApplication>
-#include <QtCore/QStandardPaths>
-
-//Ring
-#include <call.h>
-#include <account.h>
-#include <person.h>
-#include <contactmethod.h>
-#include <categorizedhistorymodel.h>
-
-class MinimalHistoryEditor : public CollectionEditor<Call>
-{
-public:
-    MinimalHistoryEditor(CollectionMediator<Call>* m, MinimalHistoryBackend* parent);
-    virtual bool save       ( const Call* item ) override;
-    virtual bool remove     ( const Call* item ) override;
-    virtual bool edit       ( Call*       item ) override;
-    virtual bool addNew     ( const Call* item ) override;
-    virtual bool addExisting( const Call* item ) override;
-
-private:
-    virtual QVector<Call*> items() const override;
-
-    //Helpers
-    void saveCall(QTextStream& stream, const Call* call);
-    bool regenFile(const Call* toIgnore);
-
-    //Attributes
-    QVector<Call*> m_lItems;
-    MinimalHistoryBackend* m_pCollection;
-};
-
-MinimalHistoryEditor::MinimalHistoryEditor(CollectionMediator<Call>* m, MinimalHistoryBackend* parent) :
-CollectionEditor<Call>(m),m_pCollection(parent)
-{
-
-}
-
-MinimalHistoryBackend::MinimalHistoryBackend(CollectionMediator<Call>* mediator) :
-CollectionInterface(new MinimalHistoryEditor(mediator,this)),m_pMediator(mediator)
-{
-
-}
-
-MinimalHistoryBackend::~MinimalHistoryBackend()
-{
-
-}
-
-void
-MinimalHistoryEditor::saveCall(QTextStream& stream, const Call* call)
-{
-    const QString direction = (call->direction()==Call::Direction::INCOMING)?
-        Call::HistoryStateName::INCOMING : Call::HistoryStateName::OUTGOING;
-
-    const Account* a = call->account();
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::CALLID          ).arg(call->historyId()                     );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::TIMESTAMP_START ).arg(call->startTimeStamp()         );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::TIMESTAMP_STOP  ).arg(call->stopTimeStamp()          );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::ACCOUNT_ID      ).arg(a?QString(a->id()):""          );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::DISPLAY_NAME    ).arg(call->peerName()               );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::PEER_NUMBER     ).arg(call->peerContactMethod()->uri() );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::DIRECTION       ).arg(direction                      );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::MISSED          ).arg(call->isMissed()               );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::RECORDING_PATH  ).arg(call->recordingPath()          );
-    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::CONTACT_USED    ).arg(false                          );//TODO
-    if (call->peerContactMethod()->contact()) {
-        stream << QString("%1=%2\n").arg(Call::HistoryMapFields::CONTACT_UID  ).arg(
-            QString(call->peerContactMethod()->contact()->uid())
-        );
-    }
-    stream << "\n";
-    stream.flush();
-}
-
-bool
-MinimalHistoryEditor::regenFile(const Call* toIgnore)
-{
-    QDir dir(QString('/'));
-    dir.mkpath(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') + QString());
-
-    QFile file(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') +"history.ini");
-    if ( file.open(QIODevice::WriteOnly | QIODevice::Text) ) {
-        QTextStream stream(&file);
-        for (const Call* c : CategorizedHistoryModel::instance()->getHistoryCalls()) {
-            if (c != toIgnore)
-                saveCall(stream, c);
-        }
-        file.close();
-        return true;
-    }
-    return false;
-}
-
-bool
-MinimalHistoryEditor::save(const Call* call)
-{
-    if (call->collection()->editor<Call>() != this)
-        return addNew(call);
-
-    return regenFile(nullptr);
-}
-
-bool
-MinimalHistoryEditor::remove(const Call* item)
-{
-    return regenFile(item);
-}
-
-bool
-MinimalHistoryEditor::edit( Call* item)
-{
-    Q_UNUSED(item)
-    return false;
-}
-
-bool
-MinimalHistoryEditor::addNew(const Call* call)
-{
-    QDir dir(QString('/'));
-    dir.mkpath(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') + QString());
-
-    if ((call->collection() && call->collection()->editor<Call>() == this)  || call->historyId().isEmpty()) return false;
-    //TODO support \r and \n\r end of line
-    QFile file(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/')+"history.ini");
-
-    if ( file.open(QIODevice::Append | QIODevice::Text) ) {
-        QTextStream streamFileOut(&file);
-        saveCall(streamFileOut, call);
-        file.close();
-
-        const_cast<Call*>(call)->setCollection(m_pCollection);
-        addExisting(call);
-        return true;
-    }
-    else
-        qWarning() << "Unable to save history";
-    return false;
-}
-
-bool
-MinimalHistoryEditor::addExisting(const Call* item)
-{
-    m_lItems << const_cast<Call*>(item);
-    mediator()->addItem(item);
-    return true;
-}
-
-QVector<Call*>
-MinimalHistoryEditor::items() const
-{
-    return m_lItems;
-}
-
-QString
-MinimalHistoryBackend::name () const
-{
-    return QObject::tr("Minimal history backend");
-}
-
-QString
-MinimalHistoryBackend::category () const
-{
-    return QObject::tr("History");
-}
-
-QVariant
-MinimalHistoryBackend::icon() const
-{
-    return QVariant();
-}
-
-bool
-MinimalHistoryBackend::isEnabled() const
-{
-    return true;
-}
-
-bool
-MinimalHistoryBackend::load()
-{
-    QFile file(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') +"history.ini");
-    if ( file.open(QIODevice::ReadOnly | QIODevice::Text) ) {
-        QMap<QString,QString> hc;
-        while (!file.atEnd()) {
-            QByteArray line = file.readLine().trimmed();
-
-            //The item is complete
-            if ((line.isEmpty() || !line.size()) && hc.size()) {
-                Call* pastCall = Call::buildHistoryCall(hc);
-                if (pastCall->peerName().isEmpty()) {
-                    pastCall->setPeerName(QObject::tr("Unknown"));
-                }
-                pastCall->setRecordingPath(hc[ Call::HistoryMapFields::RECORDING_PATH ]);
-                pastCall->setCollection(this);
-
-                editor<Call>()->addExisting(pastCall);
-                hc.clear();
-            }
-            // Add to the current set
-            else {
-                const int idx = line.indexOf("=");
-                if (idx >= 0)
-                    hc[line.left(idx)] = line.right(line.size()-idx-1);
-            }
-        }
-        return true;
-    }
-    else
-       qWarning() << "History doesn't exist or is not readable";
-    return false;
-}
-
-bool
-MinimalHistoryBackend::reload()
-{
-    return false;
-}
-
-FlagPack<CollectionInterface::SupportedFeatures> MinimalHistoryBackend::supportedFeatures() const
-{
-    return (
-        CollectionInterface::SupportedFeatures::NONE  |
-        CollectionInterface::SupportedFeatures::LOAD  |
-        CollectionInterface::SupportedFeatures::CLEAR |
-        CollectionInterface::SupportedFeatures::REMOVE|
-        CollectionInterface::SupportedFeatures::ADD   );
-}
-
-bool
-MinimalHistoryBackend::clear()
-{
-    /* TODO: insert confirm dialog? */
-    QFile::remove(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1Char('/') + "history.ini");
-    return true;
-}
-
-QByteArray
-MinimalHistoryBackend::id() const
-{
-   return "mhb";
-}
diff --git a/minimalhistorybackend.h b/minimalhistorybackend.h
deleted file mode 100644
index 6a7a298e65f229de827aded0cef6e8844b61353c..0000000000000000000000000000000000000000
--- a/minimalhistorybackend.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/************************************************************************************
- *   Copyright (C) 2014-2015 by Savoir-Faire Linux                                  *
- *   Author : Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>         *
- *                                                                                  *
- *   This library is free software; you can redistribute it and/or                  *
- *   modify it under the terms of the GNU Lesser General Public                     *
- *   License as published by the Free Software Foundation; either                   *
- *   version 2.1 of the License, or (at your option) any later version.             *
- *                                                                                  *
- *   This library 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              *
- *   Lesser General Public License for more details.                                *
- *                                                                                  *
- *   You should have received a copy of the GNU Lesser General Public               *
- *   License along with this library; if not, write to the Free Software            *
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA *
- ***********************************************************************************/
-
-#ifndef MINIMALHISTORYBACKEND_H
-#define MINIMALHISTORYBACKEND_H
-
-#include <collectioninterface.h>
-#include <collectioneditor.h>
-
-class Call;
-
-template<typename T> class CollectionMediator;
-
-class LIB_EXPORT MinimalHistoryBackend : public CollectionInterface
-{
-public:
-    explicit MinimalHistoryBackend(CollectionMediator<Call>* mediator);
-    virtual ~MinimalHistoryBackend();
-
-    virtual bool load() override;
-    virtual bool reload() override;
-    virtual bool clear() override;
-    virtual QString    name     () const override;
-    virtual QString    category () const override;
-    virtual QVariant   icon     () const override;
-    virtual bool       isEnabled() const override;
-    virtual QByteArray id       () const override;
-    virtual FlagPack<CollectionInterface::SupportedFeatures>  supportedFeatures() const override;
-
-private:
-   CollectionMediator<Call>*  m_pMediator;
-};
-
-#endif