diff --git a/src/jamidht/conversationrepository.cpp b/src/jamidht/conversationrepository.cpp
index 72cb3d0389793e7e04a5d7a7eb45f263156def0d..d7778d04b00c92e2188ae8582b8bb3d17a05a4c8 100644
--- a/src/jamidht/conversationrepository.cpp
+++ b/src/jamidht/conversationrepository.cpp
@@ -495,9 +495,7 @@ initial_commit(GitRepository& repo,
         return {};
     }
 
-    auto to_sign_vec = std::vector<uint8_t>(to_sign.ptr, to_sign.ptr + to_sign.size);
-    auto signed_buf = account->identity().first->sign(to_sign_vec);
-    std::string signed_str = base64::encode(signed_buf);
+    std::string signed_str = base64::encode(account->identity().first->sign((const uint8_t*)to_sign.ptr, to_sign.size));
 
     // git commit -S
     if (git_commit_create_with_signature(&commit_id,
@@ -1036,9 +1034,7 @@ ConversationRepository::Impl::checkValidAdd(const std::string& userDevice,
         return false;
     }
 
-    auto* blob = reinterpret_cast<git_blob*>(blob_invite.get());
-    auto invitation = std::string_view(static_cast<const char*>(git_blob_rawcontent(blob)),
-                                       git_blob_rawsize(blob));
+    auto invitation = as_view(blob_invite);
     if (!invitation.empty()) {
         JAMI_ERR("Invitation not empty for commit %s", commitId.c_str());
         return false;
@@ -1356,7 +1352,7 @@ ConversationRepository::Impl::isValidUserAtCommit(const std::string& userDevice,
     // Check that /devices/userDevice.crt exists
     std::string deviceFile = fmt::format("devices/{}.crt", userDevice);
     auto blob_device = fileAtTree(deviceFile, tree);
-    if (!fileAtTree(deviceFile, tree)) {
+    if (!blob_device) {
         JAMI_ERR("%s announced but not found", deviceFile.c_str());
         return false;
     }
@@ -1749,11 +1745,10 @@ ConversationRepository::Impl::mode() const
 std::string
 ConversationRepository::Impl::diffStats(const std::string& newId, const std::string& oldId) const
 {
-    auto repo = repository();
-    if (!repo)
-        return {};
-    if (auto d = diff(repo.get(), newId, oldId))
-        return diffStats(d);
+    if (auto repo = repository()) {
+        if (auto d = diff(repo.get(), newId, oldId))
+            return diffStats(d);
+    }
     return {};
 }
 
@@ -2924,12 +2919,12 @@ ConversationRepository::diffStats(const std::string& newId, const std::string& o
 }
 
 std::vector<std::string>
-ConversationRepository::changedFiles(const std::string_view& diffStats)
+ConversationRepository::changedFiles(std::string_view diffStats)
 {
-    std::string line;
+    static const std::regex re(" +\\| +[0-9]+.*");
     std::vector<std::string> changedFiles;
-    for (auto line : split_string(diffStats, '\n')) {
-        std::regex re(" +\\| +[0-9]+.*");
+    std::string_view line;
+    while (jami::getline(diffStats, line)) {
         std::svmatch match;
         if (!std::regex_search(line, match, re) && match.size() == 0)
             continue;
@@ -2945,7 +2940,7 @@ ConversationRepository::join()
     auto repo = pimpl_->repository();
     if (!repo)
         return {};
-    std::string repoPath = git_repository_workdir(repo.get());
+    std::string_view repoPath = git_repository_workdir(repo.get());
     auto account = pimpl_->account_.lock();
     if (!account)
         return {};
diff --git a/src/jamidht/conversationrepository.h b/src/jamidht/conversationrepository.h
index f085287ee2248fd9303440602ce0f3e8adb86479..5c193366d770f80fc476c0a4ae817ed32d9951b3 100644
--- a/src/jamidht/conversationrepository.h
+++ b/src/jamidht/conversationrepository.h
@@ -234,7 +234,7 @@ public:
      * @param diffStats     The stats to analyze
      * @return get the changed files from a git diff
      */
-    static std::vector<std::string> changedFiles(const std::string_view& diffStats);
+    static std::vector<std::string> changedFiles(std::string_view diffStats);
 
     /**
      * Join a repository