diff --git a/callwidget.h b/callwidget.h
index f77d82e..9fb6178 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -1,8 +1,9 @@
 /**************************************************************************
-* Copyright (C) 2015-2017 by Savoir-faire Linux                           *
+* Copyright (C) 2015-2018 by Savoir-faire Linux                           *
 * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
 * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com>          *
 * Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com>          *
+* Author: Andreas Traczyk <andreas.traczyk@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    *
@@ -29,7 +30,9 @@
 
 #include "navwidget.h"
 #include "instantmessagingwidget.h"
+#include "smartlistmodel.h"
 
+// old LRC
 #include "callmodel.h"
 #include "video/renderer.h"
 #include "video/previewmanager.h"
@@ -37,7 +40,16 @@
 #include "categorizedhistorymodel.h"
 #include "media/textrecording.h"
 
-class SmartListDelegate;
+// new LRC
+#include "globalinstances.h"
+#include "api/newaccountmodel.h"
+#include "api/conversationmodel.h"
+#include "api/account.h"
+#include "api/contact.h"
+#include "api/contactmodel.h"
+#include "api/newcallmodel.h"
+
+class ConversationItemDelegate;
 class ImDelegate;
 class QPropertyAnimation;
 
@@ -52,18 +64,22 @@
 public:
     explicit CallWidget(QWidget* parent = 0);
     ~CallWidget();
-    void atExit();
     bool findRingAccount();
 
 public slots:
+    void on_ringContactLineEdit_returnPressed();
+
+public slots:
     void settingsButtonClicked();
     void showIMOutOfCall(const QModelIndex& nodeIdx);
-    void btnComBarVideoClicked();
-
-//UI SLOTS
-public slots:
-    void on_ringContactLineEdit_returnPressed();
-    inline void on_entered(const QModelIndex& i){if (i.isValid()) highLightedIndex_ = i;}
+    void slotAcceptInviteClicked(const QModelIndex& index);
+    void slotBlockInviteClicked(const QModelIndex& index);
+    void slotIgnoreInviteClicked(const QModelIndex& index);
+    void slotCustomContextMenuRequested(const QPoint & pos);
+    void slotShowCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
+    void slotShowIncomingCallView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
+    void slotShowChatView(const std::string & accountId, const lrc::api::conversation::Info & convInfo);
+    void update();
 
 private slots:
     void on_acceptButton_clicked();
@@ -82,55 +98,75 @@
     void on_pendingCRBackButton_clicked();
 
 private slots:
-    void callIncoming(Call* call);
-    void callStateChanged(Call* call, Call::State previousState);
-    void smartListCurrentChanged(const QModelIndex &currentIdx, const QModelIndex &previousIdx);
+    void smartListSelectionChanged(const QItemSelection  &selected, const QItemSelection  &deselected);
     void contactReqListCurrentChanged(const QModelIndex &currentIdx, const QModelIndex &previousIdx);
     void slotAccountMessageReceived(const QMap<QString,QString> message,ContactMethod* cm, media::Media::Direction dir);
-    void onIncomingMessage(::media::TextRecording* t, ContactMethod* cm);
-    void callChangedSlot();
-    void contactLineEdit_registeredNameFound(Account *account, NameDirectory::LookupStatus status, const QString& address, const QString& name);
-    void searchBtnClicked();
-    void selectedAccountChanged(const QModelIndex &current, const QModelIndex &previous);
-    void on_contactMethodComboBox_currentIndexChanged(int index);
-    void on_contactRequestList_clicked(const QModelIndex &index);
+    void onIncomingMessage(const std::string & convUid, uint64_t interactionId, const lrc::api::interaction::Info & interaction);
+    void currentAccountChanged(const QModelIndex &current);
 
 private:
-    Ui::CallWidget* ui;
-    Call* actualCall_;
-    Video::Renderer* videoRenderer_;
-    CallModel* callModel_;
-    int outputVolume_;
-    int inputVolume_;
+    void placeCall();
+    void conversationsButtonClicked();
+    void invitationsButtonClicked();
+    void setupOutOfCallIM();
+    void setupSmartListContextMenu(const QPoint &pos);
+    void setupQRCode(QString ringID);
+    void backToWelcomePage();
+    void triggerDeleteContactDialog(ContactMethod *cm, Account *ac);
+
+    // lrc
+    void selectConversation(const QModelIndex& index);
+    bool selectConversation(const lrc::api::conversation::Info& item,
+        lrc::api::ConversationModel& convModel);
+    void deselectConversation();
+    bool connectConversationModel();
+    void updateConversationView(const std::string& convUid);
+    void showConversationView();
+    void selectSmartlistItem(const std::string& convUid);
+    QImage imageForConv(const std::string & convUid);
+    void processContactLineEdit();
+    void hideMiniSpinner();
+    void updateConversationForNewContact(const std::string& convUid);
+    void updateSmartList();
+    void setSelectedAccount(const std::string & accountId);
+    void setConversationFilter(const QString& filter);
+    void setConversationFilter(lrc::api::profile::Type filter);
+    void updateConversationsFilterWidget();
+    const std::string& selectedAccountId();
+    const std::string& selectedConvUid();
+
     QMenu* menu_;
-    SmartListDelegate* smartListDelegate_;
-    QPersistentModelIndex highLightedIndex_;
+    ConversationItemDelegate* conversationItemDelegate_;
     ImDelegate* imDelegate_;
+
     QMetaObject::Connection imConnection_;
     QMetaObject::Connection imVisibleConnection_;
     QMetaObject::Connection callChangedConnection_;
     QMetaObject::Connection imClickedConnection_;
     QMetaObject::Connection crListSelectionConnection_;
-    QPropertyAnimation* pageAnim_;
-    QMenu* shareMenu_;
+
+    Ui::CallWidget* ui;
     QMovie* miniSpinner_;
 
     constexpr static int qrSize_ = 200;
 
-private:
-    void setActualCall(Call* value);
-    void placeCall();
-    void setupOutOfCallIM();
-    void setupSmartListMenu(const QPoint &pos);
-    void slidePage(QWidget* widget, bool toRight = false);
-    void callStateToView(Call* value);
-    void setupQRCode(QString ringID);
-    void searchContactLineEditEntry(const URI &uri);
-    bool uriNeedNameLookup(const URI uri_passed);
-    void processContactLineEdit();
-    static Account* getSelectedAccount();
-    static bool shouldDisplayInviteButton(ContactMethod& cm);
-    void backToWelcomePage();
-    void hideMiniSpinner();
-    void triggerDeleteContactDialog(ContactMethod *cm, Account *ac);
+    // lrc
+    Video::Renderer* videoRenderer_;
+    std::string lastConvUid_ {};
+    lrc::api::profile::Type currentTypeFilter_{};
+
+    std::unique_ptr<SmartListModel> smartListModel_;
+    std::unique_ptr<MessageModel> messageModel_;
+    QMetaObject::Connection modelSortedConnection_;
+    QMetaObject::Connection modelUpdatedConnection_;
+    QMetaObject::Connection filterChangedConnection_;
+    QMetaObject::Connection newConversationConnection_;
+    QMetaObject::Connection conversationRemovedConnection_;
+    QMetaObject::Connection newInteractionConnection_;
+    QMetaObject::Connection interactionStatusUpdatedConnection_;
+    QMetaObject::Connection conversationClearedConnection;
+    QMetaObject::Connection selectedCallChanged_;
+    QMetaObject::Connection smartlistSelectionConnection_;
+
+
 };
