diff --git a/src/data_transfer.cpp b/src/data_transfer.cpp
index 41fa2e747c7538a1a5d6023a8145034f87599270..af6c463de3c23528b46b6472b0dec4dbbb9ea796 100644
--- a/src/data_transfer.cpp
+++ b/src/data_transfer.cpp
@@ -40,7 +40,6 @@
 #include <mutex>
 #include <future>
 #include <atomic>
-#include <charconv> // std::from_chars
 #include <cstdlib>  // mkstemp
 #include <filesystem>
 
diff --git a/src/ftp_server.cpp b/src/ftp_server.cpp
index ac3b083f3ec3dedf8ef3a62911d8a83e078e839d..1a8edc38712c25247246584726c2f7874c76ca1c 100644
--- a/src/ftp_server.cpp
+++ b/src/ftp_server.cpp
@@ -214,10 +214,7 @@ FtpServer::handleHeader(std::string_view key, std::string_view value)
     JAMI_DBG() << "[FTP] header: '" << key << "' = '" << value << "'";
 
     if (key == "Content-Length") {
-        auto [p, ec] = std::from_chars(value.data(), value.data() + value.size(), fileSize_);
-        if (ec != std::errc()) {
-            throw std::runtime_error("[FTP] header parsing error");
-        }
+        fileSize_ = to_int<size_t>(value);
     } else if (key == "Display-Name") {
         info_.displayName = value;
     }
diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp
index bf281b4e2bd24d5520486850dee1d67d56fec7ee..05f2c46fb754acdbddc12d86137a5c19017e526c 100644
--- a/src/jamidht/conversation.cpp
+++ b/src/jamidht/conversation.cpp
@@ -1208,8 +1208,7 @@ Conversation::downloadFile(const std::string& interactionId,
     }
     auto sha3sum = commit->at("sha3sum");
     auto size_str = commit->at("totalSize");
-    std::size_t totalSize;
-    std::from_chars(size_str.data(), size_str.data() + size_str.size(), totalSize);
+    auto totalSize = to_int<size_t>(size_str);
 
     // Be sure to not lock conversation
     dht::ThreadPool().io().run(
diff --git a/src/jamidht/transfer_channel_handler.cpp b/src/jamidht/transfer_channel_handler.cpp
index ef1307f7af5a92de1c66f440741640fbbcb07d08..684f82fdb7d28cba4da5730e7fc70c50ff08ca3e 100644
--- a/src/jamidht/transfer_channel_handler.cpp
+++ b/src/jamidht/transfer_channel_handler.cpp
@@ -136,9 +136,9 @@ TransferChannelHandler::onReady(const std::shared_ptr<dht::crypto::Certificate>&
         auto keyVal = split_string(arg, '=');
         if (keyVal.size() == 2) {
             if (keyVal[0] == "start") {
-                std::from_chars(keyVal[1].data(), keyVal[1].data() + keyVal[1].size(), start);
+                start = to_int<unsigned>(keyVal[1]);
             } else if (keyVal[0] == "end") {
-                std::from_chars(keyVal[1].data(), keyVal[1].data() + keyVal[1].size(), end);
+                end = to_int<unsigned>(keyVal[1]);
             }
         }
     }
diff --git a/src/sip/sipaccount.cpp b/src/sip/sipaccount.cpp
index 08e55cb6cf0cba1cca7fa79e5e75bddb542013e7..fc8455d4cffafd3da765b1096debf7e8267f795e 100644
--- a/src/sip/sipaccount.cpp
+++ b/src/sip/sipaccount.cpp
@@ -1326,7 +1326,7 @@ SIPAccount::initStunConfiguration()
     } else {
         stunServerName_ = sip_utils::CONST_PJ_STR(stunServer.substr(0, pos));
         auto serverPort = stunServer.substr(pos + 1);
-        std::from_chars(serverPort.data(), serverPort.data() + serverPort.size(), stunPort_);
+        stunPort_ = to_int<uint16_t>(serverPort);
     }
 }