diff --git a/src/sip/sipaccount.cpp b/src/sip/sipaccount.cpp
index eb0450a92fbf6a8a04acf6976c583140fa709778..6eb733aaa05d0ac454aaf818b062c2212b4ce0f2 100644
--- a/src/sip/sipaccount.cpp
+++ b/src/sip/sipaccount.cpp
@@ -474,8 +474,9 @@ void SIPAccount::usePublishedAddressPortInVIA()
 
 void SIPAccount::useUPnPAddressPortInVIA()
 {
-    via_addr_.host.ptr = (char *) getUPnPIpAddress().toString().c_str();
-    via_addr_.host.slen = getUPnPIpAddress().toString().size();
+    upnpIpAddr_ = getUPnPIpAddress().toString();
+    via_addr_.host.ptr = (char *) upnpIpAddr_.c_str();
+    via_addr_.host.slen = upnpIpAddr_.size();
     via_addr_.port = publishedPortUsed_;
 }
 
diff --git a/src/sip/sipaccount.h b/src/sip/sipaccount.h
index cc26564edea584e60b0b12681d31d3e12f25f573..f01fe69dd3cac61e5e2e3c6bcb7da78e36ac4cf3 100644
--- a/src/sip/sipaccount.h
+++ b/src/sip/sipaccount.h
@@ -768,6 +768,12 @@ class SIPAccount : public SIPAccountBase {
          */
         pjsip_host_port via_addr_;
 
+        /**
+         * Temporary storage for getUPnPIpAddress().toString()
+         * Used only by useUPnPAddressPortInVIA().
+         */
+        std::string upnpIpAddr_;
+
         char contactBuffer_[PJSIP_MAX_URL_SIZE];
         pj_str_t contact_;
         int contactRewriteMethod_;