diff --git a/daemon/src/sip/sdp.cpp b/daemon/src/sip/sdp.cpp
index 4a97ab3ba15ad2b104e0daada74370eed66c7ddf..baf845593c320616a2ea4fb5f8f65aed724ecc77 100644
--- a/daemon/src/sip/sdp.cpp
+++ b/daemon/src/sip/sdp.cpp
@@ -39,7 +39,6 @@
 #include "sipaccount.h"
 #include "manager.h"
 #include "logger.h"
-#include "ip_utils.h"
 
 #ifdef SFL_VIDEO
 #include "video/libav_utils.h"
@@ -64,7 +63,7 @@ Sdp::Sdp(pj_pool_t *pool)
     , sessionAudioMedia_()
     , sessionVideoMedia_()
     , publishedIpAddr_()
-    , publishedIpAddrStr_()
+    , publishedIpAddrType_()
     , remoteIpAddr_()
     , localAudioDataPort_(0)
     , localAudioControlPort_(0)
@@ -342,8 +341,9 @@ Sdp::setMediaDescriptorLines(bool audio)
 
 void Sdp::addRTCPAttribute(pjmedia_sdp_media *med)
 {
+    auto ip = ip_utils::strToAddr(publishedIpAddr_);
     pj_sockaddr outputAddr;
-    pj_sockaddr_cp(&outputAddr, &publishedIpAddr_);
+    pj_sockaddr_cp(&outputAddr, &ip);
     pj_sockaddr_set_port(&outputAddr, localAudioControlPort_);
     pjmedia_sdp_attr *attr = pjmedia_sdp_attr_create_rtcp(memPool_, &outputAddr);
     if (attr)
@@ -351,29 +351,28 @@ void Sdp::addRTCPAttribute(pjmedia_sdp_media *med)
 }
 
 void
-Sdp::setPublishedIP(const std::string &ip_addr)
+Sdp::setPublishedIP(const std::string &addr, pj_uint16_t addr_type)
 {
-    setPublishedIP(ip_utils::strToAddr(ip_addr));
-}
-
-void
-Sdp::setPublishedIP(const pj_sockaddr& ip_addr)
-{
-    publishedIpAddr_ = ip_addr;
-    publishedIpAddrStr_ = ip_utils::addrToStr(publishedIpAddr_);
-
+    publishedIpAddr_ = addr;
+    publishedIpAddrType_ = addr_type;
     if (localSession_) {
-        if (publishedIpAddr_.addr.sa_family == pj_AF_INET6())
+        if (addr_type == pj_AF_INET6())
             localSession_->origin.addr_type = pj_str((char*) "IP6");
         else
             localSession_->origin.addr_type = pj_str((char*) "IP4");
-        localSession_->origin.addr = pj_str((char*) publishedIpAddrStr_.c_str());
+        localSession_->origin.addr = pj_str((char*) publishedIpAddr_.c_str());
         localSession_->conn->addr = localSession_->origin.addr;
         if (pjmedia_sdp_validate(localSession_) != PJ_SUCCESS)
             ERROR("Could not validate SDP");
     }
 }
 
+void
+Sdp::setPublishedIP(const pj_sockaddr& ip_addr)
+{
+    setPublishedIP(ip_utils::addrToStr(ip_addr), ip_addr.addr.sa_family);
+}
+
 void
 Sdp::updatePorts(const std::vector<pj_sockaddr> &sockets)
 {
@@ -474,11 +473,11 @@ int Sdp::createLocalSession(const vector<int> &selectedAudioCodecs, const vector
     // Use Network Time Protocol format timestamp to ensure uniqueness.
     localSession_->origin.id = tv.sec + 2208988800UL;
     localSession_->origin.net_type = pj_str((char*) "IN");
-    if (publishedIpAddr_.addr.sa_family == pj_AF_INET6())
+    if (publishedIpAddrType_ == pj_AF_INET6())
         localSession_->origin.addr_type = pj_str((char*) "IP6");
     else
         localSession_->origin.addr_type = pj_str((char*) "IP4");
-    localSession_->origin.addr = pj_str((char*) publishedIpAddrStr_.c_str());
+    localSession_->origin.addr = pj_str((char*) publishedIpAddr_.c_str());
 
     localSession_->name = pj_str((char*) PACKAGE);
 
diff --git a/daemon/src/sip/sdp.h b/daemon/src/sip/sdp.h
index 08764f62582d386288d9260d2d81c9071fa517e1..d263f64fd168271e0043a131a32a0d2122cde638 100644
--- a/daemon/src/sip/sdp.h
+++ b/daemon/src/sip/sdp.h
@@ -34,6 +34,7 @@
 
 #include "global.h"
 #include "noncopyable.h"
+#include "ip_utils.h"
 
 #include <pjmedia/sdp.h>
 #include <pjmedia/sdp_neg.h>
@@ -154,13 +155,17 @@ class Sdp {
         /*
          * Write accessor. Set the local IP address that will be used in the sdp session
          */
-        void setPublishedIP(const std::string &ip_addr);
-        void setPublishedIP(const pj_sockaddr& ip_addr);
+        void setPublishedIP(const std::string &addr, pj_uint16_t addr_type =  pj_AF_UNSPEC());
+        void setPublishedIP(const pj_sockaddr& addr);
 
         /*
          * Read accessor. Get the local IP address
          */
-        pj_sockaddr getPublishedIP() const {
+        pj_sockaddr getPublishedIPAddr() const {
+            return ip_utils::strToAddr(publishedIpAddr_);
+        }
+
+        std::string getPublishedIP() const {
             return publishedIpAddr_;
         }
 
@@ -311,8 +316,9 @@ class Sdp {
         std::vector<sfl::AudioCodec *> sessionAudioMedia_;
         std::vector<std::string> sessionVideoMedia_;
 
-        pj_sockaddr publishedIpAddr_;
-        std::string publishedIpAddrStr_;
+        std::string publishedIpAddr_;
+        pj_uint16_t publishedIpAddrType_;
+
         std::string remoteIpAddr_;
 
         int localAudioDataPort_;