diff --git a/daemon/src/array_size.h b/daemon/src/array_size.h
index 72b91ae0b4ff2704c18c8dcdb7b442350afe663b..01501d3ba415a4a3eced38ec1b886f97a70f3301 100644
--- a/daemon/src/array_size.h
+++ b/daemon/src/array_size.h
@@ -36,4 +36,8 @@
       ((sizeof(a) / sizeof(*(a))) / \
          static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
 
+/* Only use this macro with string literals or character arrays, will not work
+ * as expected with char pointers */
+#define CONST_PJ_STR(X) {(char *) (X), ARRAYSIZE(X) - 1}
+
 #endif // ARRAY_SIZE_H_
diff --git a/daemon/src/sip/pres_sub_server.cpp b/daemon/src/sip/pres_sub_server.cpp
index 43ce387b8db8fee2c39cc63f94a364194f50492f..a6299bbf71c5c50e05f0c6f62591661d65744fa0 100644
--- a/daemon/src/sip/pres_sub_server.cpp
+++ b/daemon/src/sip/pres_sub_server.cpp
@@ -176,7 +176,7 @@ pj_bool_t pres_on_rx_subscribe_request(pjsip_rx_data *rdata)
         presSubServer->setExpires(-1);
 
     st_code = (pjsip_status_code) 200;
-    reason = pj_str("OK");
+    reason = CONST_PJ_STR("OK");
     pj_bzero(&msg_data, sizeof(msg_data));
     pj_list_init(&msg_data.hdr_list);
     pjsip_media_type_init(&msg_data.multipart_ctype, NULL, NULL);
@@ -208,20 +208,20 @@ pj_bool_t pres_on_rx_subscribe_request(pjsip_rx_data *rdata)
     // fake temporary status
     pjrpid_element rpid = {
         PJRPID_ELEMENT_TYPE_PERSON,
-        pj_str("20"),
+        CONST_PJ_STR("20"),
         PJRPID_ACTIVITY_UNKNOWN,
-        pj_str("Your subscription was received and waits for approval.")
+        CONST_PJ_STR("Your subscription was received and waits for approval.")
     };
     pjsip_pres_status fake_status_data;
     pj_bzero(&fake_status_data, sizeof(pjsip_pres_status));
     fake_status_data.info_cnt = 1;
     fake_status_data.info[0].basic_open = false;
-    fake_status_data.info[0].id = pj_str("0"); /* todo: tuplie_id*/
+    fake_status_data.info[0].id = CONST_PJ_STR("0"); /* todo: tuplie_id*/
     pj_memcpy(&fake_status_data.info[0].rpid, &rpid, sizeof(pjrpid_element));
     pjsip_pres_set_status(sub, &fake_status_data);
 
     /* Create and send the the first NOTIFY to active subscription: */
-    pj_str_t stateStr = pj_str("");
+    pj_str_t stateStr = CONST_PJ_STR("");
     tdata = NULL;
     status = pjsip_pres_notify(sub, ev_state, &stateStr, &reason, &tdata);
 
diff --git a/daemon/src/sip/pres_sub_server.h b/daemon/src/sip/pres_sub_server.h
index d89f9a9dc16ce255ae6a72fbe29e33c13e89132b..fb3aab82f6989677777a3b6dbeb6456a4e868c6b 100644
--- a/daemon/src/sip/pres_sub_server.h
+++ b/daemon/src/sip/pres_sub_server.h
@@ -40,12 +40,13 @@
 #include <pjsip/sip_module.h>
 
 #include "src/noncopyable.h"
+#include "src/array_size.h"
 
 extern pj_bool_t pres_on_rx_subscribe_request(pjsip_rx_data *rdata);
 
 static pjsip_module mod_presence_server = {
     NULL, NULL, /* prev, next.        */
-    pj_str("mod-presence-server"), /* Name.        */
+    CONST_PJ_STR("mod-presence-server"), /* Name.        */
     -1, /* Id            */
     PJSIP_MOD_PRIORITY_DIALOG_USAGE,
     NULL, /* load()        */
diff --git a/daemon/src/sip/sippresence.cpp b/daemon/src/sip/sippresence.cpp
index 7bc7171b79fd666191f265d7dad5b82195216786..27bff0b0b9c8c786c080375d366d5f350f227455 100644
--- a/daemon/src/sip/sippresence.cpp
+++ b/daemon/src/sip/sippresence.cpp
@@ -112,7 +112,7 @@ void SIPPresence::updateStatus(bool status, const std::string &note)
 
     pjrpid_element rpid = {
         PJRPID_ELEMENT_TYPE_PERSON,
-        pj_str("20"),
+        CONST_PJ_STR("20"),
         PJRPID_ACTIVITY_UNKNOWN,
         pj_str((char *) note.c_str())
     };
@@ -128,7 +128,7 @@ void SIPPresence::updateStatus(bool status, const std::string &note)
     pj_bzero(&pres_status_data_, sizeof(pres_status_data_));
     pres_status_data_.info_cnt = 1;
     pres_status_data_.info[0].basic_open = status;
-    pres_status_data_.info[0].id = pj_str("0"); /* todo: tuplie_id*/
+    pres_status_data_.info[0].id = CONST_PJ_STR("0"); /* todo: tuplie_id*/
     pj_memcpy(&pres_status_data_.info[0].rpid, &rpid, sizeof(pjrpid_element));
     /* "contact" field is optionnal */
 }
@@ -265,7 +265,7 @@ void SIPPresence::fillDoc(pjsip_tx_data *tdata, const pres_msg_data *msg_data)
 {
 
     if (tdata->msg->type == PJSIP_REQUEST_MSG) {
-        const pj_str_t STR_USER_AGENT = pj_str("User-Agent");
+        const pj_str_t STR_USER_AGENT = CONST_PJ_STR("User-Agent");
         std::string useragent(acc_->getUserAgentName());
         pj_str_t pJuseragent = pj_str((char*) useragent.c_str());
         pjsip_hdr *h = (pjsip_hdr*) pjsip_generic_string_hdr_create(tdata->pool, &STR_USER_AGENT, &pJuseragent);
@@ -288,8 +288,8 @@ void SIPPresence::fillDoc(pjsip_tx_data *tdata, const pres_msg_data *msg_data)
 
     if (msg_data->content_type.slen && msg_data->msg_body.slen) {
         pjsip_msg_body *body;
-        pj_str_t type = pj_str("application");
-        pj_str_t subtype = pj_str("pidf+xml");
+        const pj_str_t type = CONST_PJ_STR("application");
+        const pj_str_t subtype = CONST_PJ_STR("pidf+xml");
         body = pjsip_msg_body_create(tdata->pool, &type, &subtype, &msg_data->msg_body);
         tdata->msg->body = body;
     }
@@ -436,7 +436,7 @@ pj_status_t
 SIPPresence::pres_publish(SIPPresence *pres)
 {
     pj_status_t status;
-    const pj_str_t STR_PRESENCE = pj_str("presence");
+    const pj_str_t STR_PRESENCE = CONST_PJ_STR("presence");
     SIPAccount * acc = pres->getAccount();
     pjsip_endpoint *endpt = ((SIPVoIPLink*) acc->getVoIPLink())->getEndpoint();
 
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index c0745588dcf1eda1d8efedc18d6fa529849de881..7d83590bdc916219b660a558d0da4564153d26e3 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -553,23 +553,23 @@ SIPVoIPLink::SIPVoIPLink() : sipTransport(endpt_, cp_, pool_), sipAccountMap_(),
     TRY(pjsip_inv_usage_init(endpt_, &inv_cb));
 
     static const pj_str_t allowed[] = {
-        {(char *) "INFO", 4},
-        {(char *) "REGISTER", 8},
-        {(char *) "OPTIONS", 7},
-        {(char *) "MESSAGE", 7},
-        {(char *) "INVITE", 6},
-        {(char *) "ACK", 3},
-        {(char *) "BYE", 3},
-        {(char *) "NOTIFY",6},
-        {(char *) "PUBLISH",7},
-        {(char *) "CANCEL",6}};
+        CONST_PJ_STR("INFO"),
+        CONST_PJ_STR("REGISTER"),
+        CONST_PJ_STR("OPTIONS"),
+        CONST_PJ_STR("MESSAGE"),
+        CONST_PJ_STR("INVITE"),
+        CONST_PJ_STR("ACK"),
+        CONST_PJ_STR("BYE"),
+        CONST_PJ_STR("NOTIFY"),
+        CONST_PJ_STR("PUBLISH"),
+        CONST_PJ_STR("CANCEL")};
 
     pjsip_endpt_add_capability(endpt_, &mod_ua_, PJSIP_H_ALLOW, NULL, PJ_ARRAY_SIZE(allowed), allowed);
 
-    static const pj_str_t text_plain = { (char*) "text/plain", 10 };
+    static const pj_str_t text_plain = CONST_PJ_STR("text/plain");
     pjsip_endpt_add_capability(endpt_, &mod_ua_, PJSIP_H_ACCEPT, NULL, 1, &text_plain);
 
-    static const pj_str_t accepted = { (char*) "application/sdp", 15 };
+    static const pj_str_t accepted = CONST_PJ_STR("application/sdp");
     pjsip_endpt_add_capability(endpt_, &mod_ua_, PJSIP_H_ACCEPT, NULL, 1, &accepted);
 
     DEBUG("pjsip version %s for %s initialized", pj_get_version(), PJ_OS_NAME);
@@ -746,7 +746,7 @@ void SIPVoIPLink::sendRegister(Account *a)
     pj_list_init(&hdr_list);
     std::string useragent(account->getUserAgentName());
     pj_str_t pJuseragent = pj_str((char*) useragent.c_str());
-    const pj_str_t STR_USER_AGENT = { (char*) "User-Agent", 10 };
+    const pj_str_t STR_USER_AGENT = CONST_PJ_STR("User-Agent");
 
     pjsip_generic_string_hdr *h = pjsip_generic_string_hdr_create(pool_, &STR_USER_AGENT, &pJuseragent);
     pj_list_push_back(&hdr_list, (pjsip_hdr*) h);
@@ -1444,10 +1444,6 @@ SIPVoIPLink::getCurrentAudioCodecNames(Call *call) const
     }
 }
 
-/* Only use this macro with string literals or character arrays, will not work
- * as expected with char pointers */
-#define CONST_PJ_STR(X) {(char *) (X), ARRAYSIZE(X) - 1}
-
 namespace {
 void sendSIPInfo(const SIPCall &call, const char *const body, const char *const subtype)
 {
@@ -1586,8 +1582,8 @@ SIPVoIPLink::SIPStartCall(SIPCall *call)
         return false;
     }
 // aol
-    pj_str_t subj_hdr_name = pj_str("Subject");
-    pjsip_hdr* subj_hdr = (pjsip_hdr*) pjsip_parse_hdr(dialog->pool, &subj_hdr_name, "Phone call", 10, NULL);
+    pj_str_t subj_hdr_name = CONST_PJ_STR("Subject");
+    pjsip_hdr* subj_hdr = (pjsip_hdr*) pjsip_parse_hdr(dialog->pool, &subj_hdr_name, (char *) "Phone call", 10, NULL);
 
     pj_list_push_back(&dialog->inv_hdr, subj_hdr);
 // aol
@@ -2242,7 +2238,7 @@ void onCallTransfered(pjsip_inv_session *inv, pjsip_rx_data *rdata)
     if (currentCall == NULL)
         return;
 
-    static const pj_str_t str_refer_to = { (char*) "Refer-To", 8};
+    static const pj_str_t str_refer_to = CONST_PJ_STR("Refer-To");
     pjsip_generic_string_hdr *refer_to = static_cast<pjsip_generic_string_hdr*>
                                          (pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &str_refer_to, NULL));