diff --git a/src/contactmethod.cpp b/src/contactmethod.cpp
index 60600550820fc0d24569e35d476bb79c505ad4b3..6833172165c2115746e9369a4fa4d8f11cd0f14d 100644
--- a/src/contactmethod.cpp
+++ b/src/contactmethod.cpp
@@ -294,6 +294,15 @@ bool ContactMethod::setType(ContactMethod::Type t)
    return false;
 }
 
+///Update the last time used only if t is more recent than m_LastUsed
+void ContactMethod::setLastUsed(time_t t)
+{
+    if (t > d_ptr->m_LastUsed) {
+       d_ptr->m_LastUsed = t;
+       emit lastUsedChanged(t);
+    }
+}
+
 ///Set if this number is tracking presence information
 void ContactMethod::setTracked(bool track)
 {
@@ -490,7 +499,7 @@ QVariant ContactMethod::roleData(int role) const
          break;
       case static_cast<int>(Ring::Role::LastUsed):
       case static_cast<int>(Call::Role::Date):
-         cat = cat = !lastCall ? QVariant() : QDateTime::fromTime_t(lastCall->startTimeStamp());
+         cat = d_ptr->m_LastUsed <= 0 ? QVariant() : QDateTime::fromTime_t(d_ptr->m_LastUsed);
          break;
       case static_cast<int>(Ring::Role::Length):
       case static_cast<int>(Call::Role::Length):
@@ -498,16 +507,14 @@ QVariant ContactMethod::roleData(int role) const
          break;
       case static_cast<int>(Ring::Role::FormattedLastUsed):
       case static_cast<int>(Call::Role::FormattedDate):
-         cat = !lastCall ? QVariant() : HistoryTimeCategoryModel::timeToHistoryCategory(lastCall->startTimeStamp());
+      case static_cast<int>(Call::Role::FuzzyDate):
+         cat = HistoryTimeCategoryModel::timeToHistoryCategory(d_ptr->m_LastUsed);
          break;
       case static_cast<int>(Ring::Role::IndexedLastUsed):
-         return QVariant(static_cast<int>(HistoryTimeCategoryModel::timeToHistoryConst(lastCall->startTimeStamp())));
+         return QVariant(static_cast<int>(HistoryTimeCategoryModel::timeToHistoryConst(d_ptr->m_LastUsed)));
       case static_cast<int>(Call::Role::HasAVRecording):
          cat = cat = !lastCall ? QVariant() : lastCall->isAVRecording();
          break;
-      case static_cast<int>(Call::Role::FuzzyDate):
-         cat = cat = !lastCall ? QVariant() : HistoryTimeCategoryModel::timeToHistoryCategory(lastCall->startTimeStamp());
-         break;
       case static_cast<int>(Call::Role::ContactMethod):
       case static_cast<int>(Ring::Role::Object):
       case static_cast<int>(Role::Object):
@@ -576,17 +583,12 @@ void ContactMethod::addCall(Call* call)
 
    d_ptr->callAdded(call);
 
-   if (call->startTimeStamp() > d_ptr->m_LastUsed) {
-      d_ptr->m_LastUsed = call->startTimeStamp();
+   setLastUsed(call->startTimeStamp());
 
-      if (d_ptr->m_LastUsed)
-         emit lastUsedChanged(d_ptr->m_LastUsed);
-
-      //Notify the account directly. This avoid having to track all contact
-      //methods from there
-      if (d_ptr->m_pAccount && d_ptr->m_pAccount->d_ptr->m_LastUsed < d_ptr->m_LastUsed)
-         d_ptr->m_pAccount->d_ptr->m_LastUsed = d_ptr->m_LastUsed;
-   }
+   //Notify the account directly. This avoid having to track all contact
+   //methods from there
+   if (d_ptr->m_pAccount && d_ptr->m_pAccount->d_ptr->m_LastUsed < d_ptr->m_LastUsed)
+      d_ptr->m_pAccount->d_ptr->m_LastUsed = d_ptr->m_LastUsed;
 
    d_ptr->changed();
 
diff --git a/src/contactmethod.h b/src/contactmethod.h
index 83bb652c09174e28920e4c915adbe0412ff3e5df..b823fe5ac225d7d15289d6d20b0fd931249c39b9 100644
--- a/src/contactmethod.h
+++ b/src/contactmethod.h
@@ -65,7 +65,7 @@ public:
    //Properties
    Q_PROPERTY(Account*          account          READ account           WRITE setAccount              )
    Q_PROPERTY(Person*           person           READ contact           WRITE setPerson               )
-   Q_PROPERTY(int               lastUsed         READ lastUsed                                        )
+   Q_PROPERTY(int               lastUsed         READ lastUsed          WRITE setLastUsed             )
    Q_PROPERTY(QString           uri              READ uri                                             )
    Q_PROPERTY(int               callCount        READ callCount                                       )
    Q_PROPERTY(QList<Call*>      calls            READ calls                                           )
@@ -143,6 +143,7 @@ public:
    void             setBookmarked(bool                bookmarked);
    void             setUid       (const QString&      uri       );
    bool             setType      (ContactMethod::Type t         );
+   void             setLastUsed  (time_t              t         );
 
    //Mutator
    Q_INVOKABLE void addCall(Call* call);
diff --git a/src/media/textrecording.cpp b/src/media/textrecording.cpp
index a8663cd3f174856f338aec164c5341344b204582..c2a0d8f4af7c32d2d21d8d0fcdbb7d50294a0fbd 100644
--- a/src/media/textrecording.cpp
+++ b/src/media/textrecording.cpp
@@ -282,9 +282,8 @@ Media::TextRecording* Media::TextRecording::fromJson(const QList<QJsonObject>& i
    return t;
 }
 
-void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, const ContactMethod* cm, Media::Media::Direction direction)
+void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction)
 {
-
     //Only create it if none was found on the disk
     if (!m_pCurrentGroup) {
         m_pCurrentGroup = new Serializable::Group();
@@ -356,6 +355,7 @@ void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>&
    //Save the conversation
    q_ptr->save();
 
+   cm->setLastUsed(currentTime);
    emit q_ptr->messageInserted(message, const_cast<ContactMethod*>(cm), direction);
 }
 
diff --git a/src/private/textrecording_p.h b/src/private/textrecording_p.h
index e3ffedc2e01d8abc4e1066e1745fc6e5b692917f..5237243490b0c5252ac57eda24ab4c407a190298 100644
--- a/src/private/textrecording_p.h
+++ b/src/private/textrecording_p.h
@@ -161,7 +161,7 @@ public:
    QAbstractItemModel*         m_pTextMessagesModels {nullptr};
 
    //Helper
-   void insertNewMessage(const QMap<QString,QString>& message, const ContactMethod* cm, Media::Media::Direction direction);
+   void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction);
    QHash<QByteArray,QByteArray> toJsons() const;
 
 private: