diff --git a/src/api/behaviorcontroller.h b/src/api/behaviorcontroller.h
index fa5d363d53c5761391b1595a9f73e51157f414d4..d513273501f32a75c02c7098b8fbd825d27f3495 100644
--- a/src/api/behaviorcontroller.h
+++ b/src/api/behaviorcontroller.h
@@ -82,14 +82,14 @@ Q_SIGNALS:
      */
     void newUnreadInteraction(const QString& accountId,
                               const QString& conversation,
-                              uint64_t interactionId,
+                              const QString& interactionId,
                               const interaction::Info& interaction) const;
     /**
      * Emitted when the unread interaction is now read
      */
     void newReadInteraction(const QString& accountId,
                             const QString& conversation,
-                            uint64_t interactionId) const;
+                            const QString& interactionId) const;
     /**
      * Emitted debugMessageReceived
      */
diff --git a/src/api/conversation.h b/src/api/conversation.h
index 8d98dad1fc05353e2ebaee47766f66246caa3d45..97fbe776f21ac20b26f3e1daeca240b8cfc5373a 100644
--- a/src/api/conversation.h
+++ b/src/api/conversation.h
@@ -43,9 +43,9 @@ struct Info
     VectorString participants;
     QString callId;
     QString confId;
-    std::map<uint64_t, interaction::Info> interactions;
-    uint64_t lastMessageUid = 0;
-    std::map<QString, uint64_t> lastDisplayedMessageUid;
+    std::map<QString, interaction::Info> interactions;
+    QString lastMessageUid = 0;
+    std::map<QString, QString> lastDisplayedMessageUid;
     unsigned int unreadMessages = 0;
 
     QString getCallId() { return confId.isEmpty() ? callId : confId; }
diff --git a/src/api/conversationmodel.h b/src/api/conversationmodel.h
index 05eef0488c2b4e2a9f977aa8f82e4311f8e564a3..ca24f5d4fc93453b736f948d39930b1dd87cb2e8 100644
--- a/src/api/conversationmodel.h
+++ b/src/api/conversationmodel.h
@@ -231,7 +231,7 @@ public:
      * @param convId, id of the conversation
      * @param msgId, id of the interaction
      */
-    void setInteractionRead(const QString& convId, const uint64_t& msgId);
+    void setInteractionRead(const QString& convId, const QString& msgId);
     /**
      * Clears the unread text messages of a conversation
      * @param convId, uid of the conversation
@@ -246,13 +246,13 @@ public:
      * @param convId
      * @param interactionId
      */
-    void clearInteractionFromConversation(const QString& convId, const uint64_t& interactionId);
+    void clearInteractionFromConversation(const QString& convId, const QString& interactionId);
     /**
      * Retry to send a message. In fact, will delete the previous interaction and resend a new one.
      * @param convId
      * @param interactionId
      */
-    void retryInteraction(const QString& convId, const uint64_t& interactionId);
+    void retryInteraction(const QString& convId, const QString& interactionId);
     /**
      * @param convId
      * @param interactionId
@@ -260,7 +260,7 @@ public:
      * @return whether the interaction is last displayed for the conversation
      */
     bool isLastDisplayed(const QString& convId,
-                         const uint64_t& interactionId,
+                         const QString& interactionId,
                          const QString participant);
     /**
      * delete obsolete history from the database
@@ -270,13 +270,13 @@ public:
 
     void sendFile(const QString& convUid, const QString& path, const QString& filename);
 
-    void acceptTransfer(const QString& convUid, uint64_t interactionId);
+    void acceptTransfer(const QString& convUid, const QString& interactionId);
 
-    void acceptTransfer(const QString& convUid, uint64_t interactionId, const QString& path);
+    void acceptTransfer(const QString& convUid, const QString& interactionId, const QString& path);
 
-    void cancelTransfer(const QString& convUid, uint64_t interactionId);
+    void cancelTransfer(const QString& convUid, const QString& interactionId);
 
-    void getTransferInfo(const QString& conversationId, uint64_t interactionId, api::datatransfer::Info& info);
+    void getTransferInfo(const QString& conversationId, const QString& interactionId, api::datatransfer::Info& info);
     /**
      * @param convUid, uid of the conversation
      * @return the number of unread messages for the conversation
@@ -327,7 +327,7 @@ Q_SIGNALS:
      * @param interactionInfo
      */
     void newInteraction(const QString& uid,
-                        uint64_t interactionId,
+                        QString& interactionId,
                         const interaction::Info& interactionInfo) const;
     /**
      * Emitted when an interaction got a new status
@@ -336,14 +336,14 @@ Q_SIGNALS:
      * @param msg
      */
     void interactionStatusUpdated(const QString& convUid,
-                                  uint64_t interactionId,
+                                  const QString& interactionId,
                                   const api::interaction::Info& msg) const;
     /**
      * Emitted when an interaction got removed from the conversation
      * @param convUid conversation which owns the interaction
      * @param interactionId
      */
-    void interactionRemoved(const QString& convUid, uint64_t interactionId) const;
+    void interactionRemoved(const QString& convUid, const QString& interactionId) const;
     /**
      * Emitted when user clear the history of a conversation
      * @param uid
@@ -401,8 +401,8 @@ Q_SIGNALS:
      */
     void displayedInteractionChanged(const QString& uid,
                                      const QString& participantURI,
-                                     const uint64_t previousUid,
-                                     const uint64_t newdUid) const;
+                                     const QString& previousUid,
+                                     const QString& newdUid) const;
 
     /**
      * Emitted when search status changed
diff --git a/src/authority/storagehelper.cpp b/src/authority/storagehelper.cpp
index 3ab5f8bc8fd40cbc6bca6ebe87ea105f6503cb22..f9447ab4e701635e9e294bffb24510f8eb83387c 100644
--- a/src/authority/storagehelper.cpp
+++ b/src/authority/storagehelper.cpp
@@ -411,9 +411,8 @@ getHistory(Database& db, api::conversation::Info& conversation)
                                                type,
                                                status,
                                                (payloads[i + 6] == "1" ? true : false)});
-            conversation.interactions.emplace(std::stoull(payloads[i].toStdString()),
-                                              std::move(msg));
-            conversation.lastMessageUid = std::stoull(payloads[i].toStdString());
+            conversation.interactions.emplace(payloads[i], std::move(msg));
+            conversation.lastMessageUid = payloads[i];
             if (status != api::interaction::Status::DISPLAYED || !payloads[i + 1].isEmpty()) {
                 continue;
             }
@@ -421,7 +420,7 @@ getHistory(Database& db, api::conversation::Info& conversation)
                 conversation.participants.front());
             if (messageId == conversation.lastDisplayedMessageUid.end()) {
                 conversation.lastDisplayedMessageUid.emplace(conversation.participants.front(),
-                                                             std::stoull(payloads[i].toStdString()));
+                                                             payloads[i]);
                 continue;
             }
             auto lastReadInteraction = conversation.interactions.find(messageId->second);
@@ -435,7 +434,7 @@ getHistory(Database& db, api::conversation::Info& conversation)
     }
 }
 
-int
+QString
 addMessageToConversation(Database& db,
                          const QString& conversationId,
                          const api::interaction::Info& msg)
@@ -457,7 +456,7 @@ addMessageToConversation(Database& db,
                           {":is_read", msg.isRead ? "1" : "0"}});
 }
 
-int
+QString
 addOrUpdateMessage(Database& db,
                    const QString& conversationId,
                    const api::interaction::Info& msg,
@@ -507,10 +506,10 @@ addOrUpdateMessage(Database& db,
                    {extra_data.isEmpty() ? "" : ":extra_data", extra_data}},
                   "id=:id",
                   {{":id", id}});
-        return std::stoi(id.toStdString());
+        return id;
     }
 }
-int
+QString
 addDataTransferToConversation(Database& db,
                               const QString& conversationId,
                               const api::datatransfer::Info& infoFromDaemon)
@@ -572,38 +571,31 @@ getInteractionExtraDataById(Database& db, const QString& id, const QString& key)
 }
 
 void
-updateInteractionBody(Database& db, unsigned int id, const QString& newBody)
+updateInteractionBody(Database& db, const QString& id, const QString& newBody)
 {
-    db.update("interactions", "body=:body", {{":body", newBody}}, "id=:id", {{":id", toQString(id)}});
+    db.update("interactions", "body=:body", {{":body", newBody}}, "id=:id", {{":id", id}});
 }
 
 void
-updateInteractionStatus(Database& db, unsigned int id, api::interaction::Status newStatus)
+updateInteractionStatus(Database& db, const QString& id, api::interaction::Status newStatus)
 {
     db.update("interactions",
               {"status=:status"},
               {{":status", api::interaction::to_string(newStatus)}},
               "id=:id",
-              {{":id", toQString(id)}});
+              {{":id", id}});
 }
 
 void
-setInteractionRead(Database& db, unsigned int id)
+setInteractionRead(Database& db, const QString& id)
 {
-    db.update("interactions",
-              {"is_read=:is_read"},
-              {{":is_read", "1"}},
-              "id=:id",
-              {{":id", toQString(id)}});
+    db.update("interactions", {"is_read=:is_read"}, {{":is_read", "1"}}, "id=:id", {{":id", id}});
 }
 
 QString
-conversationIdFromInteractionId(Database& db, unsigned int interactionId)
+conversationIdFromInteractionId(Database& db, const QString& interactionId)
 {
-    auto result = db.select("conversation",
-                            "interactions",
-                            "id=:id",
-                            {{":id", toQString(interactionId)}});
+    auto result = db.select("conversation", "interactions", "id=:id", {{":id", interactionId}});
     if (result.nbrOfCols == 1 && result.payloads.size()) {
         return result.payloads[0];
     }
@@ -625,12 +617,12 @@ clearHistory(Database& db, const QString& conversationId)
 void
 clearInteractionFromConversation(Database& db,
                                  const QString& conversationId,
-                                 const uint64_t& interactionId)
+                                 const QString& interactionId)
 {
     try {
         db.deleteFrom("interactions",
                       "conversation=:conversation AND id=:id",
-                      {{":conversation", conversationId}, {":id", toQString(interactionId)}});
+                      {{":conversation", conversationId}, {":id", interactionId}});
     } catch (Database::QueryDeleteError& e) {
         qWarning() << "deleteFrom error: " << e.details();
     }
diff --git a/src/authority/storagehelper.h b/src/authority/storagehelper.h
index 4b7e0dff0b7cac38a3dc46c6c6bbbfa83aa7f64e..bf02bd9903bcd2da343a2906919b575d28982c03 100644
--- a/src/authority/storagehelper.h
+++ b/src/authority/storagehelper.h
@@ -175,9 +175,9 @@ void getHistory(Database& db, api::conversation::Info& conversation);
  * @param  msg
  * @return the id of the inserted interaction
  */
-int addMessageToConversation(Database& db,
-                             const QString& conversationId,
-                             const api::interaction::Info& msg);
+QString addMessageToConversation(Database& db,
+                                 const QString& conversationId,
+                                 const api::interaction::Info& msg);
 
 /**
  * Add or update an entry into interactions linked to a conversation.
@@ -187,10 +187,10 @@ int addMessageToConversation(Database& db,
  * @param  daemonId
  * @return the id of the inserted interaction
  */
-int addOrUpdateMessage(Database& db,
-                       const QString& conversationId,
-                       const api::interaction::Info& msg,
-                       const QString& daemonId);
+QString addOrUpdateMessage(Database& db,
+                           const QString& conversationId,
+                           const api::interaction::Info& msg,
+                           const QString& daemonId);
 
 /**
  * Add a data transfer entry into interactions linked to a conversation.
@@ -199,9 +199,9 @@ int addOrUpdateMessage(Database& db,
  * @param  daemonId
  * @return the id of the inserted interaction
  */
-int addDataTransferToConversation(Database& db,
-                                  const QString& conversationId,
-                                  const api::datatransfer::Info& infoFromDaemon);
+QString addDataTransferToConversation(Database& db,
+                                      const QString& conversationId,
+                                      const api::datatransfer::Info& infoFromDaemon);
 
 /**
  * Change the daemon_id column for an interaction
@@ -221,7 +221,7 @@ QString getDaemonIdByInteractionId(Database& db, const QString& id);
 /**
  * Obtain the id of an interaction of a given daemon_id
  * @param  db
- * @param  id
+ * @param  daemon id
  * @return the interaction id for a daemon id else an empty string
  */
 QString getInteractionIdByDaemonId(Database& db, const QString& daemon_id);
@@ -241,7 +241,7 @@ QString getInteractionExtraDataById(Database& db, const QString& id, const QStri
  * @param id
  * @param newBody
  */
-void updateInteractionBody(Database& db, unsigned int id, const QString& newBody);
+void updateInteractionBody(Database& db, const QString& id, const QString& newBody);
 
 /**
  * Change the status of an interaction
@@ -250,14 +250,14 @@ void updateInteractionBody(Database& db, unsigned int id, const QString& newBody
  * @param newStatus
  * @param isRead
  */
-void updateInteractionStatus(Database& db, unsigned int id, api::interaction::Status newStatus);
+void updateInteractionStatus(Database& db, const QString& id, api::interaction::Status newStatus);
 
 /**
  * Set interaction to the read state
  * @param db
  * @param id
  */
-void setInteractionRead(Database& db, unsigned int id);
+void setInteractionRead(Database& db, const QString& id);
 
 /**
  * Clear history but not the conversation started interaction
@@ -274,7 +274,7 @@ void clearHistory(Database& db, const QString& conversationId);
  */
 void clearInteractionFromConversation(Database& db,
                                       const QString& conversationId,
-                                      const uint64_t& interactionId);
+                                      const QString& interactionId);
 
 /**
  * Clear all history stored in the interactions table of the database
@@ -309,7 +309,7 @@ int countUnreadFromInteractions(Database& db, const QString& conversationId);
  * @param db
  * @param conversationId
  */
-QString conversationIdFromInteractionId(Database& db, unsigned int interactionId);
+QString conversationIdFromInteractionId(Database& db, const QString& interactionId);
 
 /**
  * Retrieve the last timestamp from the interactions table
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 928257c8ee0e5deccd61fb5da9ff263108927f70..b6dd99a81098166f9b23b554d3859469e391c611 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -152,10 +152,10 @@ public:
      * @param daemonId      the daemon id
      * @return msgId generated (in db)
      */
-    int addIncomingMessage(const QString& from,
-                           const QString& body,
-                           const uint64_t& timestamp = 0,
-                           const QString& daemonId = "");
+    QString addIncomingMessage(const QString& from,
+                               const QString& body,
+                               const uint64_t& timestamp = 0,
+                               const QString& daemonId = "");
     /**
      * Change the status of an interaction. Listen from callbacksHandler
      * @param accountId, account linked
@@ -164,7 +164,7 @@ public:
      * @param status, new status for this interaction
      */
     void slotUpdateInteractionStatus(const QString& accountId,
-                                     const uint64_t id,
+                                     const uint64_t& id,
                                      const QString& to,
                                      int status);
 
@@ -199,7 +199,7 @@ public:
      * @param interactionId
      * @param final name of the file
      */
-    void acceptTransfer(const QString& convUid, uint64_t interactionId, const QString& path);
+    void acceptTransfer(const QString& convUid, const QString& interactionId, const QString& path);
 
     void invalidateModel();
 
@@ -884,27 +884,27 @@ ConversationModel::sendMessage(const QString& uid, const QString& body, const QS
             // Add interaction to database
             interaction::Info
                 msg {{}, body, std::time(nullptr), 0, interaction::Type::TEXT, status, true};
-            int msgId = storage::addMessageToConversation(pimpl_->db, convId, msg);
+            auto msgId = storage::addMessageToConversation(pimpl_->db, convId, msg);
 
             // Update conversation
             if (status == interaction::Status::SENDING) {
                 // Because the daemon already give an id for the message, we need to store it.
-                storage::addDaemonMsgId(pimpl_->db, toQString(msgId), toQString(daemonMsgId));
+                storage::addDaemonMsgId(pimpl_->db, msgId, toQString(daemonMsgId));
             }
 
             bool ret = false;
 
             {
                 std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]);
-                ret = newConv.interactions
-                          .insert(std::pair<uint64_t, interaction::Info>(msgId, msg))
+                ret = newConv.interactions.insert(std::pair<QString, interaction::Info>(msgId, msg))
                           .second;
             }
 
             if (!ret) {
-                qDebug("ConversationModel::sendMessage failed to send message because an existing "
-                       "key was already present in the database (key = %d)",
-                       msgId);
+                qDebug()
+                    << "ConversationModel::sendMessage failed to send message because an existing "
+                       "key was already present in the database key ="
+                    << msgId;
                 return;
             }
 
@@ -1040,7 +1040,7 @@ ConversationModel::clearHistory(const QString& uid)
 
 void
 ConversationModel::clearInteractionFromConversation(const QString& convId,
-                                                    const uint64_t& interactionId)
+                                                    const QString& interactionId)
 {
     auto conversationIdx = pimpl_->indexOf(convId);
     if (conversationIdx == -1)
@@ -1049,7 +1049,7 @@ ConversationModel::clearInteractionFromConversation(const QString& convId,
     auto erased_keys = 0;
     bool lastInteractionUpdated = false;
     bool updateDisplayedUid = false;
-    uint64_t newDisplayedUid = 0;
+    QString newDisplayedUid = 0;
     QString participantURI = "";
     {
         std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]);
@@ -1079,7 +1079,7 @@ ConversationModel::clearInteractionFromConversation(const QString& convId,
 
             if (conversation.lastMessageUid == interactionId) {
                 // Update lastMessageUid
-                auto newLastId = 0;
+                auto newLastId = QString::number(0);
                 if (!conversation.interactions.empty())
                     newLastId = conversation.interactions.rbegin()->first;
                 conversation.lastMessageUid = newLastId;
@@ -1105,7 +1105,7 @@ ConversationModel::clearInteractionFromConversation(const QString& convId,
 }
 
 void
-ConversationModel::retryInteraction(const QString& convId, const uint64_t& interactionId)
+ConversationModel::retryInteraction(const QString& convId, const QString& interactionId)
 {
     auto conversationIdx = pimpl_->indexOf(convId);
     if (conversationIdx == -1)
@@ -1155,7 +1155,7 @@ ConversationModel::retryInteraction(const QString& convId, const uint64_t& inter
 
 bool
 ConversationModel::isLastDisplayed(const QString& convId,
-                                   const uint64_t& interactionId,
+                                   const QString& interactionId,
                                    const QString participant)
 {
     auto conversationIdx = pimpl_->indexOf(convId);
@@ -1185,7 +1185,7 @@ ConversationModel::clearAllHistory()
 }
 
 void
-ConversationModel::setInteractionRead(const QString& convId, const uint64_t& interactionId)
+ConversationModel::setInteractionRead(const QString& convId, const QString& interactionId)
 {
     auto conversationIdx = pimpl_->indexOf(convId);
     if (conversationIdx == -1) {
@@ -1210,8 +1210,7 @@ ConversationModel::setInteractionRead(const QString& convId, const uint64_t& int
     }
     if (emitUpdated) {
         pimpl_->invalidateModel();
-        auto daemonId = storage::getDaemonIdByInteractionId(pimpl_->db,
-                                                            QString::number(interactionId));
+        auto daemonId = storage::getDaemonIdByInteractionId(pimpl_->db, interactionId);
         if (owner.profileInfo.type != profile::Type::SIP) {
             ConfigurationManager::instance()
                 .setMessageDisplayed(owner.id,
@@ -1244,10 +1243,8 @@ ConversationModel::clearUnreadInteractions(const QString& convId)
                               emitUpdated = true;
                               it.second.isRead = true;
                               if (owner.profileInfo.type != profile::Type::SIP)
-                                  lastDisplayed
-                                      = storage::getDaemonIdByInteractionId(pimpl_->db,
-                                                                            QString::number(
-                                                                                it.first));
+                                  lastDisplayed = storage::getDaemonIdByInteractionId(pimpl_->db,
+                                                                                      it.first);
                               storage::setInteractionRead(pimpl_->db, it.first);
                           }
                       });
@@ -1917,7 +1914,7 @@ ConversationModelPimpl::addConversationWith(const QString& convId, const QString
                 continue;
             }
             // Get the message status from daemon, else unknown
-            auto id = storage::getDaemonIdByInteractionId(db, toQString(interaction.first));
+            auto id = storage::getDaemonIdByInteractionId(db, interaction.first);
             int status = 0;
             if (id.isEmpty()) {
                 continue;
@@ -2123,7 +2120,7 @@ ConversationModelPimpl::addOrUpdateCallMessage(const QString& callId,
                                   interaction::Status::SUCCESS,
                                   true};
     // update the db
-    int msgId = storage::addOrUpdateMessage(db, conv_it->uid, msg, callId);
+    auto msgId = storage::addOrUpdateMessage(db, conv_it->uid, msg, callId);
     // now set the formatted call message string in memory only
     msg.body = storage::getCallInteractionString(uriString, duration);
     auto newInteraction = conv_it->interactions.find(msgId) == conv_it->interactions.end();
@@ -2186,7 +2183,7 @@ ConversationModelPimpl::slotIncomingCallMessage(const QString& callId,
     }
 }
 
-int
+QString
 ConversationModelPimpl::addIncomingMessage(const QString& from,
                                            const QString& body,
                                            const uint64_t& timestamp,
@@ -2206,7 +2203,7 @@ ConversationModelPimpl::addIncomingMessage(const QString& from,
                                   false};
     auto msgId = storage::addMessageToConversation(db, convIds[0], msg);
     if (!daemonId.isEmpty()) {
-        storage::addDaemonMsgId(db, QString::number(msgId), daemonId);
+        storage::addDaemonMsgId(db, msgId, daemonId);
     }
     auto conversationIdx = indexOf(convIds[0]);
     // Add the conversation if not already here
@@ -2249,7 +2246,7 @@ ConversationModelPimpl::slotCallAddedToConference(const QString& callId, const Q
 
 void
 ConversationModelPimpl::slotUpdateInteractionStatus(const QString& accountId,
-                                                    const uint64_t daemon_id,
+                                                    const uint64_t& daemon_id,
                                                     const QString& peer_uri,
                                                     int status)
 {
@@ -2283,7 +2280,7 @@ ConversationModelPimpl::slotUpdateInteractionStatus(const QString& accountId,
     if (interactionId.isEmpty()) {
         return;
     }
-    auto msgId = std::stoull(interactionId.toStdString());
+    auto msgId = interactionId;
     storage::updateInteractionStatus(db, msgId, newStatus);
     // Update conversations
     auto convIds = storage::getConversationsWithPeer(db, peer_uri);
@@ -2292,7 +2289,7 @@ ConversationModelPimpl::slotUpdateInteractionStatus(const QString& accountId,
         interaction::Info itCopy;
         bool emitUpdated = false;
         bool updateDisplayedUid = false;
-        uint64_t oldDisplayedUid = 0;
+        QString oldDisplayedUid = 0;
         if (conversationIdx != -1) {
             std::lock_guard<std::mutex> lk(interactionsLocks[conversations[conversationIdx].uid]);
             auto& interactions = conversations[conversationIdx].interactions;
@@ -2430,7 +2427,7 @@ ConversationModel::sendFile(const QString& convUid, const QString& path, const Q
 }
 
 void
-ConversationModel::acceptTransfer(const QString& convUid, uint64_t interactionId)
+ConversationModel::acceptTransfer(const QString& convUid, const QString& interactionId)
 {
     lrc::api::datatransfer::Info info = {};
     getTransferInfo(convUid, interactionId, info);
@@ -2439,14 +2436,14 @@ ConversationModel::acceptTransfer(const QString& convUid, uint64_t interactionId
 
 void
 ConversationModel::acceptTransfer(const QString& convUid,
-                                  uint64_t interactionId,
+                                  const QString& interactionId,
                                   const QString& path)
 {
     pimpl_->acceptTransfer(convUid, interactionId, path);
 }
 
 void
-ConversationModel::cancelTransfer(const QString& convUid, uint64_t interactionId)
+ConversationModel::cancelTransfer(const QString& convUid, const QString& interactionId)
 {
     // For this action, we change interaction status before effective canceling as daemon will
     // emit Finished event code immediately (before leaving this method) in non-DBus mode.
@@ -2470,7 +2467,7 @@ ConversationModel::cancelTransfer(const QString& convUid, uint64_t interactionId
     }
     if (emitUpdated) {
         // Forward cancel action to daemon (will invoke slotTransferStatusCanceled)
-        pimpl_->lrc.getDataTransferModel().cancel(owner.id, convUid, interactionId);
+        pimpl_->lrc.getDataTransferModel().cancel(owner.id, convUid, interactionId.toInt());
         pimpl_->invalidateModel();
         emit interactionStatusUpdated(convUid, interactionId, itCopy);
         emit pimpl_->behaviorController.newReadInteraction(owner.id, convUid, interactionId);
@@ -2481,7 +2478,7 @@ void
 ConversationModel::getTransferInfo(const QString& conversationId, uint64_t interactionId, datatransfer::Info& info)
 {
     try {
-        auto dringId = pimpl_->lrc.getDataTransferModel().getDringIdFromInteractionId(interactionId);
+        auto dringId = pimpl_->lrc.getDataTransferModel().getDringIdFromInteractionId(interactionId.toInt());
         pimpl_->lrc.getDataTransferModel().transferInfo(owner.id, conversationId, dringId, info);
     } catch (...) {
         info.status = datatransfer::Status::INVALID;
@@ -2509,7 +2506,7 @@ ConversationModelPimpl::usefulDataFromDataTransfer(long long dringId,
         return false;
     }
 
-    convId = storage::conversationIdFromInteractionId(db, interactionId);
+    convId = storage::conversationIdFromInteractionId(db, QString::number(interactionId));
     return true;
 }
 
@@ -2535,7 +2532,7 @@ ConversationModelPimpl::slotTransferStatusCreated(long long dringId, datatransfe
     auto interactionId = storage::addDataTransferToConversation(db, convId, info);
 
     // map dringId and interactionId for latter retrivial from client (that only known the interactionId)
-    lrc.getDataTransferModel().registerTransferId(dringId, interactionId);
+    lrc.getDataTransferModel().registerTransferId(dringId, interactionId.toInt());
 
     auto interaction = interaction::Info {info.isOutgoing ? "" : info.peerUri,
                                           info.isOutgoing ? info.path : info.displayName,
@@ -2584,7 +2581,7 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
         return;
 
     auto newStatus = interaction::Status::TRANSFER_AWAITING_HOST;
-    storage::updateInteractionStatus(db, interactionId, newStatus);
+    storage::updateInteractionStatus(db, QString::number(interactionId), newStatus);
 
     auto conversationIdx = indexOf(convId);
     if (conversationIdx != -1) {
@@ -2593,7 +2590,7 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
         {
             std::lock_guard<std::mutex> lk(interactionsLocks[convId]);
             auto& interactions = conversations[conversationIdx].interactions;
-            auto it = interactions.find(interactionId);
+            auto it = interactions.find(QString::number(interactionId));
             if (it != interactions.end()) {
                 emitUpdated = true;
                 it->second.status = newStatus;
@@ -2602,7 +2599,7 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
         }
         if (emitUpdated) {
             invalidateModel();
-            emit linked.interactionStatusUpdated(convId, interactionId, itCopy);
+            emit linked.interactionStatusUpdated(convId, QString::number(interactionId), itCopy);
             // Only accept if contact is added
             if (!lrc.getDataTransferModel().acceptFromUnstrusted) {
                 try {
@@ -2618,7 +2615,7 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
             if (lrc.getDataTransferModel().automaticAcceptTransfer) {
                 if (lrc.getDataTransferModel().acceptBehindMb == 0
                     || info.totalSize < lrc.getDataTransferModel().acceptBehindMb * 1024 * 1024)
-                    acceptTransfer(convId, interactionId, info.displayName);
+                    acceptTransfer(convId, QString::number(interactionId), info.displayName);
             }
         }
     }
@@ -2626,7 +2623,7 @@ ConversationModelPimpl::slotTransferStatusAwaitingHost(long long dringId, datatr
 
 void
 ConversationModelPimpl::acceptTransfer(const QString& convUid,
-                                       uint64_t interactionId,
+                                       const QString& interactionId,
                                        const QString& path)
 {
     auto destinationDir = lrc.getDataTransferModel().downloadDirectory;
@@ -2641,9 +2638,9 @@ ConversationModelPimpl::acceptTransfer(const QString& convUid,
     QDir dir = QFileInfo(destinationDir + path).absoluteDir();
     if (!dir.exists())
         dir.mkpath(".");
-    auto acceptedFilePath = lrc.getDataTransferModel().accept(linked.owner.id,
+]    auto acceptedFilePath = lrc.getDataTransferModel().accept(linked.owner.id,
                                                               convUid,
-                                                              interactionId,
+                                                              interactionId.toInt(),
                                                               destinationDir + path,
                                                               0);
     storage::updateInteractionBody(db, interactionId, acceptedFilePath);
@@ -2688,7 +2685,7 @@ ConversationModelPimpl::slotTransferStatusOngoing(long long dringId, datatransfe
         return;
 
     auto newStatus = interaction::Status::TRANSFER_ONGOING;
-    storage::updateInteractionStatus(db, interactionId, newStatus);
+    storage::updateInteractionStatus(db, QString::number(interactionId), newStatus);
 
     auto conversationIdx = indexOf(convId);
     if (conversationIdx != -1) {
@@ -2697,7 +2694,7 @@ ConversationModelPimpl::slotTransferStatusOngoing(long long dringId, datatransfe
         {
             std::lock_guard<std::mutex> lk(interactionsLocks[convId]);
             auto& interactions = conversations[conversationIdx].interactions;
-            auto it = interactions.find(interactionId);
+            auto it = interactions.find(QString::number(interactionId));
             if (it != interactions.end()) {
                 emitUpdated = true;
                 it->second.status = newStatus;
@@ -2711,7 +2708,7 @@ ConversationModelPimpl::slotTransferStatusOngoing(long long dringId, datatransfe
             });
             timer->start(1000);
             invalidateModel();
-            emit linked.interactionStatusUpdated(convId, interactionId, itCopy);
+            emit linked.interactionStatusUpdated(convId, QString::number(interactionId), itCopy);
         }
     }
 }
@@ -2733,7 +2730,7 @@ ConversationModelPimpl::slotTransferStatusFinished(long long dringId, datatransf
         {
             std::lock_guard<std::mutex> lk(interactionsLocks[convId]);
             auto& interactions = conversations[conversationIdx].interactions;
-            auto it = interactions.find(interactionId);
+            auto it = interactions.find(QString::number(interactionId));
             if (it != interactions.end()) {
                 // We need to check if current status is ONGOING as CANCELED must not be
                 // transformed into FINISHED
@@ -2746,8 +2743,8 @@ ConversationModelPimpl::slotTransferStatusFinished(long long dringId, datatransf
         }
         if (emitUpdated) {
             invalidateModel();
-            storage::updateInteractionStatus(db, interactionId, newStatus);
-            emit linked.interactionStatusUpdated(convId, interactionId, itCopy);
+            storage::updateInteractionStatus(db, QString::number(interactionId), newStatus);
+            emit linked.interactionStatusUpdated(convId, QString::number(interactionId), itCopy);
         }
     }
 }
@@ -2787,7 +2784,7 @@ ConversationModelPimpl::updateTransferStatus(long long dringId,
         return;
 
     // update information in the db
-    storage::updateInteractionStatus(db, interactionId, newStatus);
+    storage::updateInteractionStatus(db, QString::number(interactionId), newStatus);
 
     // prepare interaction Info and emit signal for the client
     auto conversationIdx = indexOf(convId);
@@ -2797,7 +2794,7 @@ ConversationModelPimpl::updateTransferStatus(long long dringId,
         {
             std::lock_guard<std::mutex> lk(interactionsLocks[convId]);
             auto& interactions = conversations[conversationIdx].interactions;
-            auto it = interactions.find(interactionId);
+            auto it = interactions.find(QString::number(interactionId));
             if (it != interactions.end()) {
                 emitUpdated = true;
                 it->second.status = newStatus;
@@ -2806,7 +2803,7 @@ ConversationModelPimpl::updateTransferStatus(long long dringId,
         }
         if (emitUpdated) {
             invalidateModel();
-            emit linked.interactionStatusUpdated(convId, interactionId, itCopy);
+            emit linked.interactionStatusUpdated(convId, QString::number(interactionId), itCopy);
         }
     }
 }
@@ -2823,7 +2820,7 @@ ConversationModelPimpl::updateTransfer(QTimer* timer,
         {
             std::lock_guard<std::mutex> lk(interactionsLocks[conversations[conversationIdx].uid]);
             const auto& interactions = conversations[conversationIdx].interactions;
-            const auto& it = interactions.find(interactionId);
+            const auto& it = interactions.find(QString::number(interactionId));
             if (it != std::cend(interactions)
                 and it->second.status == interaction::Status::TRANSFER_ONGOING) {
                 emitUpdated = true;
@@ -2831,7 +2828,9 @@ ConversationModelPimpl::updateTransfer(QTimer* timer,
             }
         }
         if (emitUpdated) {
-            emit linked.interactionStatusUpdated(conversation, interactionId, itCopy);
+            emit linked.interactionStatusUpdated(conversation,
+                                                 QString::number(interactionId),
+                                                 itCopy);
             return;
         }
     } catch (...) {
diff --git a/src/database.cpp b/src/database.cpp
index e2c1b50f0aaecdca74b8bd7b3999422a9d177d9e..923f30b4214da8cfecb4d5666991e0f0ae730a7c 100644
--- a/src/database.cpp
+++ b/src/database.cpp
@@ -222,7 +222,7 @@ Database::getVersion()
     return query.value(0).toString();
 }
 
-int
+QString
 Database::insertInto(
     const QString& table, // "tests"
     const MapStringString&
@@ -255,9 +255,10 @@ Database::insertInto(
         throw QueryInsertError(query, table, bindCol, bindsSet);
 
     if (!query.next())
-        return -1;
+        return QString::number(-1);
+    ;
 
-    return query.value(0).toInt();
+    return query.value(0).toString();
 }
 
 void
diff --git a/src/database.h b/src/database.h
index 6802ff55b101f09772ecb9399e4b27374b494c9e..f8227e21322c48f6772f969ca7fbfbd339ad2b9f 100644
--- a/src/database.h
+++ b/src/database.h
@@ -188,15 +188,15 @@ public:
      * by ':'. The value is the name of the column from the table.
      * @param bindsSet binds value(s) and identifier(s). The key is the identifier, it should begin
      * by ':'. The value is the value to store.
-     * @return signed integer representing the index of last inserted element. -1 if nothing
-     * inserted.
+     * @return qstring from signed integer representing the index of last inserted element. -1 if
+     * nothing inserted.
      * @exception QueryInsertError insert query failed.
      *
      * @note usually the identifiers has to be the same between bindCol and bindsSet
      */
-    int insertInto(const QString& table,
-                   const MapStringString& bindCol,
-                   const MapStringString& bindsSet);
+    QString insertInto(const QString& table,
+                       const MapStringString& bindCol,
+                       const MapStringString& bindsSet);
     /**
      * Update value(s) inside a table.
      * @param table where to perfom the action on.