diff --git a/src/sip/sip_utils.cpp b/src/sip/sip_utils.cpp
index 5a80c6c385dc16c1ba67545e19156289e74fc89d..39a8e26b7c2580a0ed0da20baa25c3b3ebc7fd7c 100644
--- a/src/sip/sip_utils.cpp
+++ b/src/sip/sip_utils.cpp
@@ -174,12 +174,12 @@ getHostFromUri(std::string_view uri)
 }
 
 void
-addContactHeader(const pj_str_t* contact_str, pjsip_tx_data* tdata)
+addContactHeader(pj_str_t contact_str, pjsip_tx_data* tdata)
 {
     pjsip_contact_hdr* contact = pjsip_contact_hdr_create(tdata->pool);
     contact->uri = pjsip_parse_uri(tdata->pool,
-                                   contact_str->ptr,
-                                   contact_str->slen,
+                                   contact_str.ptr,
+                                   contact_str.slen,
                                    PJSIP_PARSE_URI_AS_NAMEADDR);
     // remove old contact header (if present)
     pjsip_msg_find_remove_hdr(tdata->msg, PJSIP_H_CONTACT, NULL);
diff --git a/src/sip/sip_utils.h b/src/sip/sip_utils.h
index 3741092b721c38574eab1cb4f9317fdb30605b29..0e8e59da30ee8b622b26c73feb04ae9e025047c3 100644
--- a/src/sip/sip_utils.h
+++ b/src/sip/sip_utils.h
@@ -96,7 +96,7 @@ std::string parseDisplayName(const pjsip_contact_hdr* header);
 
 std::string_view getHostFromUri(std::string_view sipUri);
 
-void addContactHeader(const pj_str_t* contactStr, pjsip_tx_data* tdata);
+void addContactHeader(pj_str_t contactStr, pjsip_tx_data* tdata);
 void addUserAgentHeader(const std::string& userAgent, pjsip_tx_data* tdata);
 std::string_view getPeerUserAgent(const pjsip_rx_data* rdata);
 void logMessageHeaders(const pjsip_hdr* hdr_list);
diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 90e3230c3506d926d9fdb1d679ee15cdcc1e585c..e60e216d061ec8eb8a701f601d2eef009005002d 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -1,4 +1,4 @@
-/*
+/*
  *  Copyright (C) 2004-2021 Savoir-faire Linux Inc.
  *
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
@@ -188,7 +188,7 @@ SIPCall::findRtpStreamIndex(const std::string& label) const
     const auto iter = std::find_if(rtpStreams_.begin(),
                                    rtpStreams_.end(),
                                    [&label](const RtpStream& rtp) {
-                                       return (label.compare(rtp.mediaAttribute_->label_) == 0);
+                                       return label == rtp.mediaAttribute_->label_;
                                    });
 
     // Return the index if there is a match.
@@ -420,9 +420,9 @@ SIPCall::generateMediaPorts()
 }
 
 void
-SIPCall::setContactHeader(pj_str_t* contact)
+SIPCall::setContactHeader(pj_str_t contact)
 {
-    pj_strcpy(&contactHeader_, contact);
+    pj_strcpy(&contactHeader_, &contact);
 }
 
 void
@@ -696,9 +696,8 @@ SIPCall::terminateSipSession(int status)
             if (tdata) {
                 auto account = getSIPAccount();
                 if (account) {
-                    auto contact = account->getContactHeader(transport_ ? transport_->get()
-                                                                        : nullptr);
-                    sip_utils::addContactHeader(&contact, tdata);
+                    sip_utils::addContactHeader(account->getContactHeader(transport_ ? transport_->get()
+                                                                        : nullptr), tdata);
                     // Add user-agent header
                     sip_utils::addUserAgentHeader(account->getUserAgentName(), tdata);
                 } else {
@@ -745,8 +744,7 @@ SIPCall::answer()
         Manager::instance().sipVoIPLink().createSDPOffer(inviteSession_.get());
     }
 
-    pj_str_t contact(account->getContactHeader(transport_ ? transport_->get() : nullptr));
-    setContactHeader(&contact);
+    setContactHeader(account->getContactHeader(transport_ ? transport_->get() : nullptr));
 
     pjsip_tx_data* tdata;
     if (!inviteSession_->last_answer)
@@ -767,7 +765,7 @@ SIPCall::answer()
                  getCallId().c_str(),
                  (int) contactHeader_.slen,
                  contactHeader_.ptr);
-        sip_utils::addContactHeader(&contactHeader_, tdata);
+        sip_utils::addContactHeader(contactHeader_, tdata);
     }
 
     // Add user-agent header
@@ -880,8 +878,7 @@ SIPCall::answer(const std::vector<DRing::MediaMap>& mediaList)
         }
     }
 
-    pj_str_t contact(account->getContactHeader(transport_ ? transport_->get() : nullptr));
-    setContactHeader(&contact);
+    setContactHeader(account->getContactHeader(transport_ ? transport_->get() : nullptr));
 
     if (!inviteSession_->last_answer)
         throw std::runtime_error("Should only be called for initial answer");
@@ -903,7 +900,7 @@ SIPCall::answer(const std::vector<DRing::MediaMap>& mediaList)
                  getCallId().c_str(),
                  (int) contactHeader_.slen,
                  contactHeader_.ptr);
-        sip_utils::addContactHeader(&contactHeader_, tdata);
+        sip_utils::addContactHeader(contactHeader_, tdata);
     }
 
     // Add user-agent header
@@ -993,7 +990,7 @@ SIPCall::answerMediaChangeRequest(const std::vector<DRing::MediaMap>& mediaList)
     }
 
     if (contactHeader_.slen) {
-        sip_utils::addContactHeader(&contactHeader_, tdata);
+        sip_utils::addContactHeader(contactHeader_, tdata);
     }
 
     // Add user-agent header
@@ -2462,8 +2459,7 @@ SIPCall::onReceiveOffer(const pjmedia_sdp_session* offer, const pjsip_rx_data* r
     }
 
     // ContactStr must stay in scope as long as tdata
-    const pj_str_t contactStr(getSIPAccount()->getContactHeader(getTransport()->get()));
-    sip_utils::addContactHeader(&contactStr, tdata);
+    sip_utils::addContactHeader(getSIPAccount()->getContactHeader(getTransport()->get()), tdata);
 
     if (pjsip_inv_send_msg(inviteSession_.get(), tdata) != PJ_SUCCESS) {
         JAMI_ERR("Could not send msg OK");
@@ -2759,8 +2755,8 @@ SIPCall::monitor() const
     }
     JAMI_DBG("- Call %s with %s:", getCallId().c_str(), getPeerNumber().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());
+    for (const auto& stream : rtpStreams_)
+        JAMI_DBG("\t- Media: %s", stream.mediaAttribute_->toString(true).c_str());
 #ifdef ENABLE_VIDEO
     if (auto codec = getVideoCodec())
         JAMI_DBG("\t- Video codec: %s", codec->systemCodecInfo.name.c_str());
diff --git a/src/sip/sipcall.h b/src/sip/sipcall.h
index 3dc3952088ed4337a2660dd46da318bc67da1228..d2d13b996e17379c620c25b598b9343c3ed0d9d8 100644
--- a/src/sip/sipcall.h
+++ b/src/sip/sipcall.h
@@ -214,7 +214,7 @@ public:
     void onMediaNegotiationComplete();
     // End fo SiPVoipLink events
 
-    void setContactHeader(pj_str_t* contact);
+    void setContactHeader(pj_str_t contact);
 
     void setTransport(const std::shared_ptr<SipTransport>& t);
 
diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp
index 430fa465814e75e2452249f079dcde936f5a0de0..8e0b738320d2c30a2ed9ad31852678d1df173942 100644
--- a/src/sip/sipvoiplink.cpp
+++ b/src/sip/sipvoiplink.cpp
@@ -561,10 +561,7 @@ transaction_request_cb(pjsip_rx_data* rdata)
         return PJ_FALSE;
     }
 
-    // contactStr must stay in scope as long as tdata
-    const pj_str_t contactStr(account->getContactHeader(transport->get()));
-    sip_utils::addContactHeader(&contactStr, tdata);
-
+    sip_utils::addContactHeader(account->getContactHeader(transport->get()), tdata);
     if (pjsip_inv_send_msg(call->inviteSession_.get(), tdata) != PJ_SUCCESS) {
         JAMI_ERR("Could not send msg RINGING");
         return PJ_FALSE;