diff --git a/src/call.cpp b/src/call.cpp
index 8f0ab0b0e24ecc21339efe4528b540f595a2dc52..55d390dafc598dad60a127c8cf4be57330afccc5 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -125,12 +125,7 @@ Call::Call(const std::shared_ptr<Account>& account,
                 duration_start_ = clock::now();
             else if (cnx_state == ConnectionState::DISCONNECTED && call_state == CallState::OVER) {
                 if (auto jamiAccount = std::dynamic_pointer_cast<JamiAccount>(getAccount().lock())) {
-                    auto duration = duration_start_ == time_point::min()
-                                        ? 0
-                                        : std::chrono::duration_cast<std::chrono::milliseconds>(
-                                              clock::now() - duration_start_)
-                                              .count();
-                    jamiAccount->addCallHistoryMessage(getPeerNumber(), duration);
+                    jamiAccount->addCallHistoryMessage(getPeerNumber(), getCallDuration().count());
 
                     monitor();
                 }
diff --git a/src/call.h b/src/call.h
index 9ecb37cb78203df64e8a10bd15cf7a93baa2e1d2..1410f13e310d8cc5ded25b58667183695bb5f910 100644
--- a/src/call.h
+++ b/src/call.h
@@ -301,6 +301,17 @@ public:
         return parent_ != nullptr;
     }
 
+    /**
+     * @return Call duration in milliseconds
+     */
+    std::chrono::milliseconds getCallDuration() const
+    {
+        return duration_start_ == time_point::min()
+                   ? std::chrono::milliseconds::zero()
+                   : std::chrono::duration_cast<std::chrono::milliseconds>(clock::now()
+                                                                           - duration_start_);
+    }
+
 public: // media management
     virtual bool toggleRecording();
 
diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 2314d69e9f5db9742a11bd1d8826c23200cd10c7..06367b51c8ed660aaf7284000b23eb1282e9541f 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -2352,8 +2352,7 @@ SIPCall::monitor() const
         return;
     }
     JAMI_DBG("- Call %s with %s:", getCallId().c_str(), getPeerNumber().c_str());
-    // TODO move in getCallDuration
-    JAMI_DBG("\t- Duration: %s", dht::print_duration(clock::now() - duration_start_).c_str());
+    JAMI_DBG("\t- Duration: %s", dht::print_duration(getCallDuration()).c_str());
     for (auto& mediaAttr : getMediaAttributeList())
         JAMI_DBG("\t- Media: %s", mediaAttr.toString(true).c_str());
 #ifdef ENABLE_VIDEO