Ported PJSIP and PJSIP-SIMPLE to Symbian

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1241 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/build.symbian/pjsip_simple.mmp b/build.symbian/pjsip_simple.mmp
index a5763d8..16b7f8a 100644
--- a/build.symbian/pjsip_simple.mmp
+++ b/build.symbian/pjsip_simple.mmp
@@ -9,7 +9,7 @@
 MACRO		PJ_SYMBIAN=1
 MACRO		PJ_IMPORTING
 
-//OPTION		CW -lang c++
+OPTION		CW -lang c++
 
 
 // PJSIP-SIMPLE files
diff --git a/pjsip/src/pjsip-simple/evsub.c b/pjsip/src/pjsip-simple/evsub.c
index 56fa8ea..326afa8 100644
--- a/pjsip/src/pjsip-simple/evsub.c
+++ b/pjsip/src/pjsip-simple/evsub.c
@@ -51,13 +51,13 @@
 
 const pjsip_method pjsip_subscribe_method = 
 {
-    PJSIP_SUBSCRIBE_METHOD,
+    (pjsip_method_e) PJSIP_SUBSCRIBE_METHOD,
     { "SUBSCRIBE", 9 }
 };
 
 const pjsip_method pjsip_notify_method = 
 {
-    PJSIP_NOTIFY_METHOD,
+    (pjsip_method_e) PJSIP_NOTIFY_METHOD,
     { "NOTIFY", 6 }
 };
 
@@ -327,7 +327,7 @@
  */
 PJ_DEF(pjsip_evsub*) pjsip_tsx_get_evsub(pjsip_transaction *tsx)
 {
-    return tsx->mod_data[mod_evsub.mod.id];
+    return (pjsip_evsub*) tsx->mod_data[mod_evsub.mod.id];
 }
 
 
@@ -395,7 +395,7 @@
 
     /* Create new event package: */
 
-    pkg = pj_pool_alloc(mod_evsub.pool, sizeof(struct evpkg));
+    pkg = PJ_POOL_ALLOC_T(mod_evsub.pool, struct evpkg);
     pkg->pkg_mod = pkg_mod;
     pkg->pkg_expires = expires;
     pj_strdup(mod_evsub.pool, &pkg->pkg_name, event_name);
@@ -508,8 +508,8 @@
     /* Kill timer */
     set_timer(sub, TIMER_TYPE_NONE, 0);
 
-    /* Remote this session from dialog's list of subscription */
-    dlgsub_head = sub->dlg->mod_data[mod_evsub.mod.id];
+    /* Remove this session from dialog's list of subscription */
+    dlgsub_head = (struct dlgsub *) sub->dlg->mod_data[mod_evsub.mod.id];
     dlgsub = dlgsub_head->next;
     while (dlgsub != dlgsub_head) {
 	
@@ -572,7 +572,7 @@
 
     PJ_UNUSED_ARG(timer_heap);
 
-    sub = entry->user_data;
+    sub = (pjsip_evsub*) entry->user_data;
 
     pjsip_dlg_inc_lock(sub->dlg);
 
@@ -673,7 +673,7 @@
 
     /* Init attributes: */
 
-    sub = pj_pool_zalloc(dlg->pool, sizeof(struct pjsip_evsub));
+    sub = PJ_POOL_ZALLOC_T(dlg->pool, struct pjsip_evsub);
     sub->pool = dlg->pool;
     sub->endpt = dlg->endpt;
     sub->dlg = dlg;
@@ -684,7 +684,8 @@
     sub->state = PJSIP_EVSUB_STATE_NULL;
     sub->state_str = evsub_state_names[sub->state];
     sub->expires = pjsip_expires_hdr_create(sub->pool, pkg->pkg_expires);
-    sub->accept = pjsip_hdr_clone(sub->pool, pkg->pkg_accept);
+    sub->accept = (pjsip_accept_hdr*) 
+    		  pjsip_hdr_clone(sub->pool, pkg->pkg_accept);
 
     sub->timer.user_data = sub;
     sub->timer.cb = &on_timer;
@@ -706,8 +707,8 @@
 
     /* Create subcription list: */
 
-    dlgsub_head = pj_pool_alloc(sub->pool, sizeof(struct dlgsub));
-    dlgsub = pj_pool_alloc(sub->pool, sizeof(struct dlgsub));
+    dlgsub_head = PJ_POOL_ALLOC_T(sub->pool, struct dlgsub);
+    dlgsub = PJ_POOL_ALLOC_T(sub->pool, struct dlgsub);
     dlgsub->sub = sub;
 
     pj_list_init(dlgsub_head);
@@ -828,7 +829,7 @@
 	goto on_return;
 
     /* Just duplicate Event header from the request */
-    sub->event = pjsip_hdr_clone(sub->pool, event_hdr);
+    sub->event = (pjsip_event_hdr*) pjsip_hdr_clone(sub->pool, event_hdr);
 
     /* Set the method: */
     pjsip_method_copy(sub->pool, &sub->method, 
@@ -850,7 +851,7 @@
     accept_hdr = (pjsip_accept_hdr*)
 	pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_ACCEPT, NULL);
     if (accept_hdr)
-	sub->accept = pjsip_hdr_clone(sub->pool, accept_hdr);
+	sub->accept = (pjsip_accept_hdr*)pjsip_hdr_clone(sub->pool,accept_hdr);
 
     /* We can start the session: */
 
@@ -941,22 +942,22 @@
 
 
     /* Add Event header: */
-    pjsip_msg_add_hdr( tdata->msg,
+    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 		       pjsip_hdr_shallow_clone(tdata->pool, sub->event));
 
     /* Update and add expires header: */
     if (expires >= 0)
 	sub->expires->ivalue = expires;
-    pjsip_msg_add_hdr( tdata->msg,
+    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 		       pjsip_hdr_shallow_clone(tdata->pool, sub->expires));
 
     /* Add Accept header: */
-    pjsip_msg_add_hdr( tdata->msg,
+    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 		       pjsip_hdr_shallow_clone(tdata->pool, sub->accept));
     
 
     /* Add Allow-Events header: */
-    pjsip_msg_add_hdr( tdata->msg,
+    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 		       pjsip_hdr_shallow_clone(tdata->pool, 
 					       mod_evsub.allow_events_hdr));
 
@@ -1011,14 +1012,14 @@
 
 
     /* Add expires header: */
-    pjsip_msg_add_hdr( tdata->msg,
+    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 		       pjsip_hdr_shallow_clone(tdata->pool, sub->expires));
 
     /* Add additional header, if any. */
     if (hdr_list) {
 	const pjsip_hdr *hdr = hdr_list->next;
 	while (hdr != hdr_list) {
-	    pjsip_msg_add_hdr( tdata->msg,
+	    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 			       pjsip_hdr_clone(tdata->pool, hdr));
 	    hdr = hdr->next;
 	}
@@ -1117,7 +1118,7 @@
 	goto on_return;
 
     /* Add Event header */
-    pjsip_msg_add_hdr(tdata->msg,
+    pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
 		      pjsip_hdr_shallow_clone(tdata->pool, sub->event));
 
     /* Add Subscription-State header */
@@ -1126,7 +1127,7 @@
     pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)sub_state);
 
     /* Add Allow-Events header */
-    pjsip_msg_add_hdr(tdata->msg,
+    pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
 		      pjsip_hdr_shallow_clone(tdata->pool, mod_evsub.allow_events_hdr));
 
     /* Add Authentication headers. */
@@ -1258,7 +1259,8 @@
 	return NULL;
     }
 
-    event_hdr = pjsip_msg_find_hdr_by_name(msg, &STR_EVENT, NULL);
+    event_hdr = (pjsip_event_hdr*)
+    		pjsip_msg_find_hdr_by_name(msg, &STR_EVENT, NULL);
     if (!event_hdr) {
 	/* Not subscription related message */
 	return NULL;
@@ -1268,9 +1270,9 @@
      * of Event header: 
      */
 
-    dlgsub_head = dlg->mod_data[mod_evsub.mod.id];
+    dlgsub_head = (struct dlgsub*) dlg->mod_data[mod_evsub.mod.id];
     if (dlgsub_head == NULL) {
-	dlgsub_head = pj_pool_alloc(dlg->pool, sizeof(struct dlgsub));
+	dlgsub_head = PJ_POOL_ALLOC_T(dlg->pool, struct dlgsub);
 	pj_list_init(dlgsub_head);
 	dlg->mod_data[mod_evsub.mod.id] = dlgsub_head;
     }
@@ -1416,7 +1418,7 @@
     /* Add response headers. */
     hdr = res_hdr->next;
     while (hdr != res_hdr) {
-	pjsip_msg_add_hdr( tdata->msg, 
+	pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 			   pjsip_hdr_clone(tdata->pool, hdr));
 	hdr = hdr->next;
     }
@@ -1549,7 +1551,8 @@
 		pjsip_expires_hdr *expires;
 
 		msg = event->body.tsx_state.src.rdata->msg_info.msg;
-		expires = pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
+		expires = (pjsip_expires_hdr*)
+			  pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
 		if (expires) {
 		    sub->expires->ivalue = expires->ivalue;
 		}
@@ -1655,7 +1658,8 @@
 	pj_list_init(&res_hdr);
 
 	/* Get subscription state header. */
-	sub_state = pjsip_msg_find_hdr_by_name(msg, &STR_SUB_STATE, NULL);
+	sub_state = (pjsip_sub_state_hdr*)
+		    pjsip_msg_find_hdr_by_name(msg, &STR_SUB_STATE, NULL);
 	if (sub_state == NULL) {
 
 	    pjsip_warning_hdr *warn_hdr;
@@ -1803,8 +1807,10 @@
 	/* Set expiration time based on client request (in Expires header),
 	 * or package default expiration time.
 	 */
-	event_hdr = pjsip_msg_find_hdr_by_name(msg, &STR_EVENT, NULL);
-	expires = pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
+	event_hdr = (pjsip_event_hdr*)
+		    pjsip_msg_find_hdr_by_name(msg, &STR_EVENT, NULL);
+	expires = (pjsip_expires_hdr*)
+		  pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
 	if (event_hdr && expires) {
 	    struct evpkg *evpkg;
 
@@ -1859,7 +1865,7 @@
 				 body, &tdata);
 	if (status == PJ_SUCCESS) {
 	    /* Add expires header: */
-	    pjsip_msg_add_hdr( tdata->msg,
+	    pjsip_msg_add_hdr( tdata->msg, (pjsip_hdr*)
 			       pjsip_hdr_shallow_clone(tdata->pool, 
 						       sub->expires));
 
diff --git a/pjsip/src/pjsip-simple/evsub_msg.c b/pjsip/src/pjsip-simple/evsub_msg.c
index ead1c26..467345d 100644
--- a/pjsip/src/pjsip-simple/evsub_msg.c
+++ b/pjsip/src/pjsip-simple/evsub_msg.c
@@ -43,7 +43,7 @@
 
 PJ_DEF(pjsip_event_hdr*) pjsip_event_hdr_create(pj_pool_t *pool)
 {
-    pjsip_event_hdr *hdr = pj_pool_zalloc(pool, sizeof(*hdr));
+    pjsip_event_hdr *hdr = PJ_POOL_ZALLOC_T(pool, pjsip_event_hdr);
     hdr->type = PJSIP_H_OTHER;
     hdr->name.ptr = "Event";
     hdr->name.slen = 5;
@@ -93,7 +93,7 @@
 pjsip_event_hdr_shallow_clone( pj_pool_t *pool,
 			       const pjsip_event_hdr *rhs )
 {
-    pjsip_event_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+    pjsip_event_hdr *hdr = PJ_POOL_ALLOC_T(pool, pjsip_event_hdr);
     pj_memcpy(hdr, rhs, sizeof(*hdr));
     pjsip_param_shallow_clone(pool, &hdr->other_param, &rhs->other_param);
     return hdr;
@@ -142,7 +142,7 @@
 PJ_DEF(pjsip_sub_state_hdr*) pjsip_sub_state_hdr_create(pj_pool_t *pool)
 {
     pj_str_t sub_state = { "Subscription-State", 18 };
-    pjsip_sub_state_hdr *hdr = pj_pool_zalloc(pool, sizeof(*hdr));
+    pjsip_sub_state_hdr *hdr = PJ_POOL_ZALLOC_T(pool, pjsip_sub_state_hdr);
     hdr->type = PJSIP_H_OTHER;
     hdr->name = hdr->sname = sub_state;
     hdr->vptr = &sub_state_hdr_vptr;
@@ -208,7 +208,7 @@
 pjsip_sub_state_hdr_shallow_clone(pj_pool_t *pool,
 				  const pjsip_sub_state_hdr *rhs)
 {
-    pjsip_sub_state_hdr *hdr = pj_pool_alloc(pool, sizeof(*hdr));
+    pjsip_sub_state_hdr *hdr = PJ_POOL_ALLOC_T(pool, pjsip_sub_state_hdr);
     pj_memcpy(hdr, rhs, sizeof(*hdr));
     pjsip_param_shallow_clone(pool, &hdr->other_param, &rhs->other_param);
     return hdr;
@@ -234,7 +234,7 @@
 	if (pj_stricmp(&pname, &id_param)==0) {
 	    hdr->id_param = pvalue;
 	} else {
-	    pjsip_param *param = pj_pool_alloc(ctx->pool, sizeof(pjsip_param));
+	    pjsip_param *param = PJ_POOL_ALLOC_T(ctx->pool, pjsip_param);
 	    param->name = pname;
 	    param->value = pvalue;
 	    pj_list_push_back(&hdr->other_param, param);
@@ -271,7 +271,7 @@
 	    hdr->retry_after = pj_strtoul(&pvalue);
 
 	} else {
-	    pjsip_param *param = pj_pool_alloc(ctx->pool, sizeof(pjsip_param));
+	    pjsip_param *param = PJ_POOL_ALLOC_T(ctx->pool, pjsip_param);
 	    param->name = pname;
 	    param->value = pvalue;
 	    pj_list_push_back(&hdr->other_param, param);
diff --git a/pjsip/src/pjsip-simple/iscomposing.c b/pjsip/src/pjsip-simple/iscomposing.c
index 7db421e..d49fae4 100644
--- a/pjsip/src/pjsip-simple/iscomposing.c
+++ b/pjsip/src/pjsip-simple/iscomposing.c
@@ -95,7 +95,7 @@
     /* Add refresh, if any. */
     if (is_composing && refresh > 1 && refresh < 3601) {
 	node = pj_xml_node_new(pool, &STR_REFRESH);
-	node->content.ptr = pj_pool_alloc(pool, 10);
+	node->content.ptr = (char*) pj_pool_alloc(pool, 10);
 	node->content.slen = pj_utoa(refresh, node->content.ptr);
 	pj_xml_add_node(doc, node);
     }
@@ -113,7 +113,8 @@
 static int xml_print_body( struct pjsip_msg_body *msg_body, 
 			   char *buf, pj_size_t size)
 {
-    return pj_xml_print(msg_body->data, buf, size, PJ_TRUE);
+    return pj_xml_print((const pj_xml_node*)msg_body->data, buf, size, 
+    			PJ_TRUE);
 }
 
 
@@ -123,7 +124,7 @@
 static void* xml_clone_data(pj_pool_t *pool, const void *data, unsigned len)
 {
     PJ_UNUSED_ARG(len);
-    return pj_xml_clone( pool, data);
+    return pj_xml_clone( pool, (const pj_xml_node*)data);
 }
 
 
@@ -143,7 +144,7 @@
 	return NULL;
 
 
-    body = pj_pool_zalloc(pool, sizeof(pjsip_msg_body));
+    body = PJ_POOL_ZALLOC_T(pool, pjsip_msg_body);
     body->content_type.type = STR_MIME_TYPE;
     body->content_type.subtype = STR_MIME_SUBTYPE;
 
diff --git a/pjsip/src/pjsip-simple/pidf.c b/pjsip/src/pjsip-simple/pidf.c
index 1064f37..730194c 100644
--- a/pjsip/src/pjsip-simple/pidf.c
+++ b/pjsip/src/pjsip-simple/pidf.c
@@ -88,7 +88,7 @@
 static pj_xml_attr* xml_create_attr(pj_pool_t *pool, pj_str_t *name,
 				    const pj_str_t *value)
 {
-    pj_xml_attr *attr = pj_pool_alloc(pool, sizeof(*attr));
+    pj_xml_attr *attr = PJ_POOL_ALLOC_T(pool, pj_xml_attr);
     attr->name = *name;
     pj_strdup(pool, &attr->value, value);
     return attr;
@@ -110,7 +110,7 @@
 PJ_DEF(pjpidf_tuple*) pjpidf_pres_add_tuple(pj_pool_t *pool, pjpidf_pres *pres,
 					    const pj_str_t *id)
 {
-    pjpidf_tuple *t = pj_pool_alloc(pool, sizeof(*t));
+    pjpidf_tuple *t = PJ_POOL_ALLOC_T(pool, pjpidf_tuple);
     pjpidf_tuple_construct(pool, t, id);
     pj_xml_add_node(pres, t);
     return t;
@@ -129,7 +129,7 @@
 
 static pj_bool_t find_tuple_by_id(pj_xml_node *node, const void *id)
 {
-    return pj_xml_find_attr(node, &ID, id) != NULL;
+    return pj_xml_find_attr(node, &ID, (const pj_str_t*)id) != NULL;
 }
 
 PJ_DEF(pjpidf_tuple*) pjpidf_pres_find_tuple(pjpidf_pres *pres, const pj_str_t *id)
@@ -146,7 +146,7 @@
 PJ_DEF(pjpidf_note*) pjpidf_pres_add_note(pj_pool_t *pool, pjpidf_pres *pres, 
 					  const pj_str_t *text)
 {
-    pjpidf_note *note = pj_pool_alloc(pool, sizeof(*note));
+    pjpidf_note *note = PJ_POOL_ALLOC_T(pool, pjpidf_note);
     xml_init_node(pool, note, &NOTE, text);
     pj_xml_add_node(pres, note);
     return note;
@@ -173,7 +173,7 @@
     xml_init_node(pool, t, &TUPLE, NULL);
     attr = xml_create_attr(pool, &ID, id);
     pj_xml_add_attr(t, attr);
-    st = pj_pool_alloc(pool, sizeof(*st));
+    st = PJ_POOL_ALLOC_T(pool, pjpidf_status);
     pjpidf_status_construct(pool, st);
     pj_xml_add_node(t, st);
 }
@@ -214,7 +214,7 @@
 {
     pj_xml_node *node = pj_xml_find_node(t, &CONTACT);
     if (!node) {
-	node = pj_pool_alloc(pool, sizeof(*node));
+	node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
 	xml_init_node(pool, node, &CONTACT, contact);
 	pj_xml_add_node(t, node);
     } else {
@@ -229,7 +229,7 @@
     pj_xml_attr *attr;
 
     if (!node) {
-	node = pj_pool_alloc(pool, sizeof(*node));
+	node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
 	xml_init_node(pool, node, &CONTACT, NULL);
 	pj_xml_add_node(t, node);
     }
@@ -259,7 +259,7 @@
 PJ_DEF(pjpidf_note*) pjpidf_tuple_add_note(pj_pool_t *pool, pjpidf_tuple *t,
 					   const pj_str_t *text)
 {
-    pjpidf_note *note = pj_pool_alloc(pool, sizeof(*note));
+    pjpidf_note *note = PJ_POOL_ALLOC_T(pool, pjpidf_note);
     xml_init_node(pool, note, &NOTE, text);
     pj_xml_add_node(t, note);
     return note;
@@ -287,7 +287,7 @@
 {
     pj_xml_node *node = pj_xml_find_node(t, &TIMESTAMP);
     if (!node) {
-	node = pj_pool_alloc(pool, sizeof(*node));
+	node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
 	xml_init_node(pool, node, &TIMESTAMP, ts);
     } else {
 	pj_strdup(pool, &node->content, ts);
@@ -300,7 +300,7 @@
 {
     pj_xml_node *node = pj_xml_find_node(t, &TIMESTAMP);
     if (!node) {
-	node = pj_pool_alloc(pool, sizeof(*node));
+	node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
 	xml_init_node(pool, node, &TIMESTAMP, ts);
     } else {
 	node->content = *ts;
@@ -314,7 +314,7 @@
     pj_xml_node *node;
 
     xml_init_node(pool, st, &STATUS, NULL);
-    node = pj_pool_alloc(pool, sizeof(*node));
+    node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
     xml_init_node(pool, node, &BASIC, &CLOSED);
     pj_xml_add_node(st, node);
 }
@@ -335,7 +335,7 @@
 
 PJ_DEF(pjpidf_pres*) pjpidf_create(pj_pool_t *pool, const pj_str_t *entity)
 {
-    pjpidf_pres *pres = pj_pool_alloc(pool, sizeof(*pres));
+    pjpidf_pres *pres = PJ_POOL_ALLOC_T(pool, pjpidf_pres);
     pjpidf_pres_construct(pool, pres, entity);
     return pres;
 }
diff --git a/pjsip/src/pjsip-simple/presence.c b/pjsip/src/pjsip-simple/presence.c
index d341162..9f04c64 100644
--- a/pjsip/src/pjsip-simple/presence.c
+++ b/pjsip/src/pjsip-simple/presence.c
@@ -197,7 +197,7 @@
 	goto on_return;
 
     /* Create presence */
-    pres = pj_pool_zalloc(dlg->pool, sizeof(pjsip_pres));
+    pres = PJ_POOL_ZALLOC_T(dlg->pool, pjsip_pres);
     pres->dlg = dlg;
     pres->sub = sub;
     if (user_cb)
@@ -244,7 +244,8 @@
 		     PJSIP_SIMPLE_ENOTSUBSCRIBE);
 
     /* Check that Event header contains "presence" */
-    event = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &STR_EVENT, NULL);
+    event = (pjsip_event_hdr*)
+    	    pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &STR_EVENT, NULL);
     if (!event) {
 	return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_BAD_REQUEST);
     }
@@ -253,7 +254,8 @@
     }
 
     /* Check that request contains compatible Accept header. */
-    accept = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_ACCEPT, NULL);
+    accept = (pjsip_accept_hdr*)
+    	     pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_ACCEPT, NULL);
     if (accept) {
 	unsigned i;
 	for (i=0; i<accept->count; ++i) {
@@ -280,7 +282,8 @@
     }
 
     /* Check that expires is not too short. */
-    expires_hdr=pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL);
+    expires_hdr=(pjsip_expires_hdr*)
+    		pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL);
     if (expires_hdr) {
 	if (expires_hdr->ivalue < 5) {
 	    return PJSIP_ERRNO_FROM_SIP_STATUS(PJSIP_SC_INTERVAL_TOO_BRIEF);
@@ -304,7 +307,7 @@
 	goto on_return;
 
     /* Create server presence subscription */
-    pres = pj_pool_zalloc(dlg->pool, sizeof(pjsip_pres));
+    pres = PJ_POOL_ZALLOC_T(dlg->pool, pjsip_pres);
     pres->dlg = dlg;
     pres->sub = sub;
     pres->content_type = content_type;
@@ -366,7 +369,7 @@
 
     PJ_ASSERT_RETURN(sub && status, PJ_EINVAL);
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_RETURN(pres!=NULL, PJSIP_SIMPLE_ENOPRESENCE);
 
     if (pres->tmp_status._is_valid)
@@ -389,7 +392,7 @@
 
     PJ_ASSERT_RETURN(sub && status, PJ_EINVAL);
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_RETURN(pres!=NULL, PJSIP_SIMPLE_ENOPRESENCE);
 
     for (i=0; i<status->info_cnt; ++i) {
@@ -422,7 +425,7 @@
     pj_str_t entity;
 
     /* Get publisher URI */
-    entity.ptr = pj_pool_alloc(tdata->pool, PJSIP_MAX_URL_SIZE);
+    entity.ptr = (char*) pj_pool_alloc(tdata->pool, PJSIP_MAX_URL_SIZE);
     entity.slen = pjsip_uri_print(PJSIP_URI_IN_REQ_URI,
 				  pres->dlg->local.info->uri,
 				  entity.ptr, PJSIP_MAX_URL_SIZE);
@@ -462,7 +465,7 @@
     PJ_ASSERT_RETURN(sub, PJ_EINVAL);
 
     /* Get the presence object. */
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_RETURN(pres != NULL, PJSIP_SIMPLE_ENOPRESENCE);
 
     /* Must have at least one presence info. */
@@ -508,7 +511,7 @@
     PJ_ASSERT_RETURN(sub, PJ_EINVAL);
 
     /* Get the presence object. */
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_RETURN(pres != NULL, PJSIP_SIMPLE_ENOPRESENCE);
 
     /* Must have at least one presence info. */
@@ -558,7 +561,7 @@
 {
     pjsip_pres *pres;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (pres->user_cb.on_evsub_state)
@@ -573,7 +576,7 @@
 {
     pjsip_pres *pres;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (pres->user_cb.on_tsx_state)
@@ -593,7 +596,7 @@
 {
     pjsip_pres *pres;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (pres->user_cb.on_rx_refresh) {
@@ -721,7 +724,7 @@
     pjsip_pres *pres;
     pj_status_t status;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (rdata->msg_info.msg->body) {
@@ -773,7 +776,7 @@
 {
     pjsip_pres *pres;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (pres->user_cb.on_client_refresh) {
@@ -795,7 +798,7 @@
 {
     pjsip_pres *pres;
 
-    pres = pjsip_evsub_get_mod_data(sub, mod_presence.id);
+    pres = (pjsip_pres*) pjsip_evsub_get_mod_data(sub, mod_presence.id);
     PJ_ASSERT_ON_FAIL(pres!=NULL, {return;});
 
     if (pres->user_cb.on_server_timeout) {
diff --git a/pjsip/src/pjsip-simple/presence_body.c b/pjsip/src/pjsip-simple/presence_body.c
index 04edf9c..c57e427 100644
--- a/pjsip/src/pjsip-simple/presence_body.c
+++ b/pjsip/src/pjsip-simple/presence_body.c
@@ -42,7 +42,8 @@
 static int pres_print_body(struct pjsip_msg_body *msg_body, 
 			   char *buf, pj_size_t size)
 {
-    return pj_xml_print(msg_body->data, buf, size, PJ_TRUE);
+    return pj_xml_print((const pj_xml_node*)msg_body->data, buf, size, 
+    			PJ_TRUE);
 }
 
 
@@ -52,7 +53,7 @@
 static void* xml_clone_data(pj_pool_t *pool, const void *data, unsigned len)
 {
     PJ_UNUSED_ARG(len);
-    return pj_xml_clone( pool, data);
+    return pj_xml_clone( pool, (const pj_xml_node*) data);
 }
 
 
@@ -100,7 +101,7 @@
 				     status->info[i].basic_open);
     }
 
-    body = pj_pool_zalloc(pool, sizeof(pjsip_msg_body));
+    body = PJ_POOL_ZALLOC_T(pool, pjsip_msg_body);
     body->data = pidf;
     body->content_type.type = STR_APPLICATION;
     body->content_type.subtype = STR_PIDF_XML;
@@ -139,7 +140,7 @@
     else
 	pjxpidf_set_status( xpidf, PJ_FALSE);
 
-    body = pj_pool_zalloc(pool, sizeof(pjsip_msg_body));
+    body = PJ_POOL_ZALLOC_T(pool, pjsip_msg_body);
     body->data = xpidf;
     body->content_type.type = STR_APPLICATION;
     body->content_type.subtype = STR_XPIDF_XML;
@@ -164,7 +165,7 @@
     pjpidf_tuple *pidf_tuple;
 
     pidf = pjpidf_parse(rdata->tp_info.pool, 
-			rdata->msg_info.msg->body->data,
+			(char*)rdata->msg_info.msg->body->data,
 			rdata->msg_info.msg->body->len);
     if (pidf == NULL)
 	return PJSIP_SIMPLE_EBADPIDF;
@@ -209,7 +210,7 @@
     pjxpidf_pres *xpidf;
 
     xpidf = pjxpidf_parse(rdata->tp_info.pool, 
-			  rdata->msg_info.msg->body->data,
+			  (char*)rdata->msg_info.msg->body->data,
 			  rdata->msg_info.msg->body->len);
     if (xpidf == NULL)
 	return PJSIP_SIMPLE_EBADXPIDF;
diff --git a/pjsip/src/pjsip-simple/publishc.c b/pjsip/src/pjsip-simple/publishc.c
index 1b10c74..0cb15a7 100644
--- a/pjsip/src/pjsip-simple/publishc.c
+++ b/pjsip/src/pjsip-simple/publishc.c
@@ -50,7 +50,7 @@
 
 const pjsip_method pjsip_publish_method = 
 {
-    PJSIP_PUBLISH_METHOD,
+    (pjsip_method_e)PJSIP_PUBLISH_METHOD,
     { "PUBLISH", 7 }
 };
 
@@ -122,7 +122,7 @@
     pool = pjsip_endpt_create_pool(endpt, "pubc%p", 1024, 1024);
     PJ_ASSERT_RETURN(pool != NULL, PJ_ENOMEM);
 
-    pubc = pj_pool_zalloc(pool, sizeof(struct pjsip_publishc));
+    pubc = PJ_POOL_ZALLOC_T(pool, pjsip_publishc);
 
     pubc->pool = pool;
     pubc->endpt = endpt;
@@ -291,13 +291,15 @@
 	pjsip_hdr *route_pos;
 	const pjsip_route_hdr *route;
 
-	route_pos = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL);
+	route_pos = (pjsip_hdr*)
+		    pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL);
 	if (!route_pos)
 	    route_pos = &tdata->msg->hdr;
 
 	route = pubc->route_set.next;
 	while (route != &pubc->route_set) {
-	    pjsip_hdr *new_hdr = pjsip_hdr_shallow_clone(tdata->pool, route);
+	    pjsip_hdr *new_hdr = (pjsip_hdr*)
+	    			 pjsip_hdr_shallow_clone(tdata->pool, route);
 	    pj_list_insert_after(route_pos, new_hdr);
 	    route_pos = new_hdr;
 	    route = route->next;
@@ -345,7 +347,8 @@
     if (pubc->expires_hdr) {
 	pjsip_hdr *dup;
 
-	dup = pjsip_hdr_shallow_clone(tdata->pool, pubc->expires_hdr);
+	dup = (pjsip_hdr*)
+	      pjsip_hdr_shallow_clone(tdata->pool, pubc->expires_hdr);
 	if (dup)
 	    pjsip_msg_add_hdr(tdata->msg, dup);
     }
@@ -424,7 +427,7 @@
 static void pubc_refresh_timer_cb( pj_timer_heap_t *timer_heap,
 				   struct pj_timer_entry *entry)
 {
-    pjsip_publishc *pubc = entry->user_data;
+    pjsip_publishc *pubc = (pjsip_publishc*) entry->user_data;
     pjsip_tx_data *tdata;
     pj_status_t status;
     
@@ -446,7 +449,7 @@
 static void tsx_callback(void *token, pjsip_event *event)
 {
     pj_status_t status;
-    pjsip_publishc *pubc = token;
+    pjsip_publishc *pubc = (pjsip_publishc*) token;
     pjsip_transaction *tsx = event->body.tsx_state.tsx;
     
     /* Decrement pending transaction counter. */
@@ -507,7 +510,8 @@
 	    }
 
 	    /* Update expires value */
-	    expires = pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
+	    expires = (pjsip_expires_hdr*)
+	    	      pjsip_msg_find_hdr(msg, PJSIP_H_EXPIRES, NULL);
 
 	    if (expires)
 		expiration = expires->ivalue;
@@ -574,7 +578,8 @@
 
     /* Increment CSeq */
     cseq = ++pubc->cseq_hdr->cseq;
-    cseq_hdr = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CSEQ, NULL);
+    cseq_hdr = (pjsip_cseq_hdr*)
+    	       pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CSEQ, NULL);
     cseq_hdr->cseq = cseq;
 
     /* Increment pending transaction first, since transaction callback
diff --git a/pjsip/src/pjsip-simple/xpidf.c b/pjsip/src/pjsip-simple/xpidf.c
index d0dcbf4..30698a0 100644
--- a/pjsip/src/pjsip-simple/xpidf.c
+++ b/pjsip/src/pjsip-simple/xpidf.c
@@ -40,7 +40,7 @@
 {
     pj_xml_node *node;
 
-    node = pj_pool_alloc(pool, sizeof(pj_xml_node));
+    node = PJ_POOL_ALLOC_T(pool, pj_xml_node);
     pj_list_init(&node->attr_head);
     pj_list_init(&node->node_head);
     node->name = *name;
@@ -53,7 +53,7 @@
 static pj_xml_attr* xml_create_attr(pj_pool_t *pool, pj_str_t *name,
 				    const pj_str_t *value)
 {
-    pj_xml_attr *attr = pj_pool_alloc(pool, sizeof(*attr));
+    pj_xml_attr *attr = PJ_POOL_ALLOC_T(pool, pj_xml_attr);
     attr->name = *name;
     pj_strdup(pool, &attr->value, value);
     return attr;
@@ -79,7 +79,8 @@
     pj_xml_add_node(pres, presentity);
 
     /* uri attribute */
-    uri.ptr = pj_pool_alloc(pool, uri_cstr->slen + STR_SUBSCRIBE_PARAM.slen);
+    uri.ptr = (char*) pj_pool_alloc(pool, uri_cstr->slen + 
+    					   STR_SUBSCRIBE_PARAM.slen);
     pj_strcpy( &uri, uri_cstr);
     pj_strcat( &uri, &STR_SUBSCRIBE_PARAM);
     attr = xml_create_attr(pool, &STR_URI, &uri);
diff --git a/pjsip/src/pjsip/sip_tel_uri.c b/pjsip/src/pjsip/sip_tel_uri.c
index 094f08c..f55eba7 100644
--- a/pjsip/src/pjsip/sip_tel_uri.c
+++ b/pjsip/src/pjsip/sip_tel_uri.c
@@ -75,25 +75,27 @@
 static void*	      tel_uri_parse( pj_scanner *scanner, pj_pool_t *pool,
 				     pj_bool_t parse_params);
 
-#ifdef __GNUC__
-#  define HAPPY_FLAG	(void*)
-#else
-#  define HAPPY_FLAG
-#endif
+typedef const pj_str_t* (*P_GET_SCHEME)(const void*);
+typedef void* 		(*P_GET_URI)(void*);
+typedef pj_ssize_t 	(*P_PRINT_URI)(pjsip_uri_context_e,const void *,
+				       char*,unsigned);
+typedef int 		(*P_CMP_URI)(pjsip_uri_context_e, const void*, 
+				     const void*);
+typedef void* 		(*P_CLONE)(pj_pool_t*, const void*);
 
 static pjsip_uri_vptr tel_uri_vptr = 
 {
-    HAPPY_FLAG &tel_uri_get_scheme,
-    HAPPY_FLAG &tel_uri_get_uri,
-    HAPPY_FLAG &tel_uri_print,
-    HAPPY_FLAG &tel_uri_cmp,
-    HAPPY_FLAG &tel_uri_clone
+    (P_GET_SCHEME)	&tel_uri_get_scheme,
+    (P_GET_URI) 	&tel_uri_get_uri,
+    (P_PRINT_URI) 	&tel_uri_print,
+    (P_CMP_URI)		&tel_uri_cmp,
+    (P_CLONE)		&tel_uri_clone
 };
 
 
 PJ_DEF(pjsip_tel_uri*) pjsip_tel_uri_create(pj_pool_t *pool)
 {
-    pjsip_tel_uri *uri = pj_pool_zalloc(pool, sizeof(pjsip_tel_uri));
+    pjsip_tel_uri *uri = PJ_POOL_ZALLOC_T(pool, pjsip_tel_uri);
     uri->vptr = &tel_uri_vptr;
     pj_list_init(&uri->other_param);
     return uri;
@@ -426,7 +428,7 @@
 	    } else if (pj_stricmp_alnum(&pname, &pjsip_PH_CTX_STR)==0) {
 		uri->context = pvalue;
 	    } else {
-		pjsip_param *param = pj_pool_alloc(pool, sizeof(pjsip_param));
+		pjsip_param *param = PJ_POOL_ALLOC_T(pool, pjsip_param);
 		param->name = pname;
 		param->value = pvalue;
 		pj_list_insert_before(&uri->other_param, param);
diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c
index 9934e0d..009f16a 100644
--- a/pjsip/src/pjsip/sip_transaction.c
+++ b/pjsip/src/pjsip/sip_transaction.c
@@ -288,7 +288,7 @@
 		   host->slen +		    /* Via host. */
 		   9 +			    /* Via port. */
 		   16;			    /* Separator+Allowance. */
-    key = p = pj_pool_alloc(pool, len_required);
+    key = p = (char*) pj_pool_alloc(pool, len_required);
     end = p + len_required;
 
     /* Add role. */
@@ -355,7 +355,8 @@
 
     PJ_ASSERT_RETURN(pool && key && method && branch, PJ_EINVAL);
 
-    p = key->ptr = pj_pool_alloc(pool, branch->slen + method->name.slen + 4 );
+    p = key->ptr = (char*) 
+    		   pj_pool_alloc(pool, branch->slen + method->name.slen + 4 );
     
     /* Add role. */
     *p++ = (char)(role==PJSIP_ROLE_UAC ? 'c' : 's');
@@ -593,7 +594,8 @@
     pj_uint32_t hval = 0;
 
     pj_mutex_lock(mod_tsx_layer.mutex);
-    tsx = pj_hash_get( mod_tsx_layer.htable, key->ptr, key->slen, &hval );
+    tsx = (pjsip_transaction*)
+    	  pj_hash_get( mod_tsx_layer.htable, key->ptr, key->slen, &hval );
     pj_mutex_unlock(mod_tsx_layer.mutex);
 
     TSX_TRACE_((THIS_FILE, 
@@ -644,7 +646,8 @@
     /* Destroy all transactions. */
     it = pj_hash_first(mod_tsx_layer.htable, &it_buf);
     while (it) {
-	pjsip_transaction *tsx = pj_hash_this(mod_tsx_layer.htable, it);
+	pjsip_transaction *tsx = (pjsip_transaction*) 
+				 pj_hash_this(mod_tsx_layer.htable, it);
 	pj_hash_iterator_t *next = pj_hash_next(mod_tsx_layer.htable, it);
 	if (tsx) {
 	    mod_tsx_layer_unregister_tsx(tsx);
@@ -705,7 +708,8 @@
     /* Find transaction. */
     pj_mutex_lock( mod_tsx_layer.mutex );
 
-    tsx = pj_hash_get( mod_tsx_layer.htable, key.ptr, key.slen, &hval );
+    tsx = (pjsip_transaction*) 
+    	  pj_hash_get( mod_tsx_layer.htable, key.ptr, key.slen, &hval );
 
 
     TSX_TRACE_((THIS_FILE, 
@@ -753,7 +757,8 @@
     /* Find transaction. */
     pj_mutex_lock( mod_tsx_layer.mutex );
 
-    tsx = pj_hash_get( mod_tsx_layer.htable, key.ptr, key.slen, &hval );
+    tsx = (pjsip_transaction*) 
+    	  pj_hash_get( mod_tsx_layer.htable, key.ptr, key.slen, &hval );
 
 
     TSX_TRACE_((THIS_FILE, 
@@ -791,7 +796,8 @@
  */
 PJ_DEF(pjsip_transaction*) pjsip_rdata_get_tsx( pjsip_rx_data *rdata )
 {
-    return rdata->endpt_info.mod_data[mod_tsx_layer.mod.id];
+    return (pjsip_transaction*) 
+    	   rdata->endpt_info.mod_data[mod_tsx_layer.mod.id];
 }
 
 
@@ -816,7 +822,8 @@
 	    PJ_LOG(3, (THIS_FILE, " - none - "));
 	} else {
 	    while (it != NULL) {
-		pjsip_transaction *tsx = pj_hash_this(mod_tsx_layer.htable,it);
+		pjsip_transaction *tsx = (pjsip_transaction*) 
+					 pj_hash_this(mod_tsx_layer.htable,it);
 
 		PJ_LOG(3, (THIS_FILE, " %s %s|%d|%s",
 			   tsx->obj_name,
@@ -894,7 +901,7 @@
     if (!pool)
 	return PJ_ENOMEM;
 
-    tsx = pj_pool_zalloc(pool, sizeof(pjsip_transaction));
+    tsx = PJ_POOL_ZALLOC_T(pool, pjsip_transaction);
     tsx->pool = pool;
     tsx->tsx_user = tsx_user;
     tsx->endpt = mod_tsx_layer.endpt;
@@ -965,7 +972,7 @@
     }
 
     /* Clear TLS, so that mutex will not be unlocked */
-    lck = pj_thread_local_get(pjsip_tsx_lock_tls_id);
+    lck = (struct tsx_lock_data*) pj_thread_local_get(pjsip_tsx_lock_tls_id);
     while (lck) {
 	if (lck->tsx == tsx) {
 	    lck->is_alive = 0;
@@ -989,7 +996,7 @@
 static void tsx_timer_callback( pj_timer_heap_t *theap, pj_timer_entry *entry)
 {
     pjsip_event event;
-    pjsip_transaction *tsx = entry->user_data;
+    pjsip_transaction *tsx = (pjsip_transaction*) entry->user_data;
     struct tsx_lock_data lck;
 
     PJ_UNUSED_ARG(theap);
@@ -1042,7 +1049,7 @@
      * rx event.
      */
     if (event_src_type==PJSIP_EVENT_RX_MSG && tsx->tsx_user) {
-	pjsip_rx_data *rdata = event_src;
+	pjsip_rx_data *rdata = (pjsip_rx_data*) event_src;
 
 	pj_assert(rdata != NULL);
 
@@ -1123,7 +1130,7 @@
     msg = tdata->msg;
 
     /* Make sure CSeq header is present. */
-    cseq = pjsip_msg_find_hdr(msg, PJSIP_H_CSEQ, NULL);
+    cseq = (pjsip_cseq_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_CSEQ, NULL);
     if (!cseq) {
 	pj_assert(!"CSeq header not present in outgoing message!");
 	return PJSIP_EMISSINGHDR;
@@ -1149,7 +1156,7 @@
     tsx->cseq = cseq->cseq;
 
     /* Generate Via header if it doesn't exist. */
-    via = pjsip_msg_find_hdr(msg, PJSIP_H_VIA, NULL);
+    via = (pjsip_via_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_VIA, NULL);
     if (via == NULL) {
 	via = pjsip_via_hdr_create(tdata->pool);
 	pjsip_msg_insert_first_hdr(msg, (pjsip_hdr*) via);
@@ -1158,7 +1165,8 @@
     /* Generate branch parameter if it doesn't exist. */
     if (via->branch_param.slen == 0) {
 	pj_str_t tmp;
-	via->branch_param.ptr = pj_pool_alloc(tsx->pool, PJSIP_MAX_BRANCH_LEN);
+	via->branch_param.ptr = (char*)
+				pj_pool_alloc(tsx->pool, PJSIP_MAX_BRANCH_LEN);
 	via->branch_param.slen = PJSIP_MAX_BRANCH_LEN;
 	pj_memcpy(via->branch_param.ptr, PJSIP_RFC3261_BRANCH_ID, 
 		  PJSIP_RFC3261_BRANCH_LEN);
@@ -1509,7 +1517,7 @@
 static void send_msg_callback( pjsip_send_state *send_state,
 			       pj_ssize_t sent, pj_bool_t *cont )
 {
-    pjsip_transaction *tsx = send_state->token;
+    pjsip_transaction *tsx = (pjsip_transaction*) send_state->token;
     struct tsx_lock_data lck;
 
     lock_tsx(tsx, &lck);
@@ -1629,7 +1637,7 @@
 			       pj_ssize_t sent)
 {
     if (sent < 0) {
-	pjsip_transaction *tsx = token;
+	pjsip_transaction *tsx = (pjsip_transaction*) token;
 	struct tsx_lock_data lck;
 	char errmsg[PJ_ERR_MSG_SIZE];
 	pj_str_t err;
@@ -2273,7 +2281,8 @@
 	     * timer G will be scheduled (retransmission).
 	     */
 	    if (!tsx->is_reliable) {
-		pjsip_cseq_hdr *cseq = pjsip_msg_find_hdr( msg, PJSIP_H_CSEQ,
+		pjsip_cseq_hdr *cseq = (pjsip_cseq_hdr*)
+				       pjsip_msg_find_hdr( msg, PJSIP_H_CSEQ,
                                                            NULL);
 		if (cseq->method.id == PJSIP_INVITE_METHOD) {
 		    tsx->retransmit_count = 0;
diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
index 6238216..ee42699 100644
--- a/pjsip/src/pjsip/sip_transport.c
+++ b/pjsip/src/pjsip/sip_transport.c
@@ -314,7 +314,7 @@
     if (!pool)
 	return PJ_ENOMEM;
 
-    tdata = pj_pool_zalloc(pool, sizeof(pjsip_tx_data));
+    tdata = PJ_POOL_ZALLOC_T(pool, pjsip_tx_data);
     tdata->pool = pool;
     tdata->mgr = mgr;
     pj_ansi_snprintf(tdata->obj_name, PJ_MAX_OBJ_NAME, "tdta%p", tdata);
@@ -396,7 +396,7 @@
     const pjsip_cseq_hdr *cseq;
     int len;
 
-    cseq = pjsip_msg_find_hdr(msg, PJSIP_H_CSEQ, NULL);
+    cseq = (const pjsip_cseq_hdr*) pjsip_msg_find_hdr(msg, PJSIP_H_CSEQ, NULL);
     PJ_ASSERT_RETURN(cseq != NULL, "INVALID MSG");
 
     if (msg->type == PJSIP_REQUEST_MSG) {
@@ -418,7 +418,7 @@
 	return (char*)obj_name;
     }
 
-    info = pj_pool_alloc(pool, len+1);
+    info = (char*) pj_pool_alloc(pool, len+1);
     pj_memcpy(info, info_buf, len+1);
 
     return info;
@@ -492,7 +492,7 @@
 				    void *token,
 				    pj_ssize_t size)
 {
-    pjsip_tx_data *tdata = token;
+    pjsip_tx_data *tdata = (pjsip_tx_data*) token;
 
     PJ_UNUSED_ARG(transport);
 
@@ -517,7 +517,8 @@
 {
     /* Allocate buffer if necessary. */
     if (tdata->buf.start == NULL) {
-	tdata->buf.start = pj_pool_alloc( tdata->pool, PJSIP_MAX_PKT_LEN);
+	tdata->buf.start = (char*) 
+			   pj_pool_alloc( tdata->pool, PJSIP_MAX_PKT_LEN);
 	tdata->buf.cur = tdata->buf.start;
 	tdata->buf.end = tdata->buf.start + PJSIP_MAX_PKT_LEN;
     }
@@ -612,7 +613,7 @@
 static void transport_idle_callback(pj_timer_heap_t *timer_heap,
 				    struct pj_timer_entry *entry)
 {
-    pjsip_transport *tp = entry->user_data;
+    pjsip_transport *tp = (pjsip_transport*) entry->user_data;
     pj_assert(tp != NULL);
 
     PJ_UNUSED_ARG(timer_heap);
@@ -900,7 +901,7 @@
 	return status;
 
     /* Create and initialize transport manager. */
-    mgr = pj_pool_zalloc(pool, sizeof(*mgr));
+    mgr = PJ_POOL_ZALLOC_T(pool, pjsip_tpmgr);
     mgr->endpt = endpt;
     mgr->on_rx_msg = rx_cb;
     mgr->on_tx_msg = tx_cb;
@@ -1035,7 +1036,7 @@
 	pj_hash_iterator_t *next;
 	pjsip_transport *transport;
 	
-	transport = pj_hash_this(mgr->table, itr);
+	transport = (pjsip_transport*) pj_hash_this(mgr->table, itr);
 
 	next = pj_hash_next(mgr->table, itr);
 
@@ -1343,7 +1344,8 @@
 	key.type = type;
 	pj_memcpy(&key.addr, remote, addr_len);
 
-	transport = pj_hash_get(mgr->table, &key, key_len, NULL);
+	transport = (pjsip_transport*)
+		    pj_hash_get(mgr->table, &key, key_len, NULL);
 	if (transport == NULL) {
 	    unsigned flag = pjsip_transport_get_flag_from_type(type);
 	    const pj_sockaddr *remote_addr = (const pj_sockaddr*)remote;
@@ -1356,7 +1358,8 @@
 
 		pj_bzero(addr, sizeof(pj_sockaddr_in));
 		key_len = sizeof(key.type) + sizeof(pj_sockaddr_in);
-		transport = pj_hash_get(mgr->table, &key, key_len, NULL);
+		transport = (pjsip_transport*) 
+			    pj_hash_get(mgr->table, &key, key_len, NULL);
 	    }
 	    /* For datagram INET transports, try lookup with zero address.
 	     */
@@ -1369,7 +1372,8 @@
 		addr->sin_family = PJ_AF_INET;
 
 		key_len = sizeof(key.type) + sizeof(pj_sockaddr_in);
-		transport = pj_hash_get(mgr->table, &key, key_len, NULL);
+		transport = (pjsip_transport*)
+			    pj_hash_get(mgr->table, &key, key_len, NULL);
 	    }
 	}
 
@@ -1410,7 +1414,8 @@
 
     /* Request factory to create transport. */
     status = factory->create_transport(factory, mgr, mgr->endpt,
-				       remote, addr_len, tp);
+				       (const pj_sockaddr*) remote, addr_len,
+				       tp);
     if (status == PJ_SUCCESS) {
 	PJ_ASSERT_ON_FAIL(tp!=NULL, 
 	    {pj_lock_release(mgr->lock); return PJ_EBUG;});
@@ -1454,7 +1459,8 @@
 	PJ_LOG(3, (THIS_FILE, " Dumping transports:"));
 
 	do {
-	    pjsip_transport *t = pj_hash_this(mgr->table, itr);
+	    pjsip_transport *t = (pjsip_transport*) 
+	    			 pj_hash_this(mgr->table, itr);
 
 	    PJ_LOG(3, (THIS_FILE, "  %s %s (refcnt=%d%s)", 
 		       t->obj_name,
diff --git a/pjsip/src/pjsip/sip_transport_loop.c b/pjsip/src/pjsip/sip_transport_loop.c
index 1b10ea3..2512197 100644
--- a/pjsip/src/pjsip/sip_transport_loop.c
+++ b/pjsip/src/pjsip/sip_transport_loop.c
@@ -78,7 +78,7 @@
     if (!pool)
 	return NULL;
 
-    pkt = pj_pool_zalloc(pool, sizeof(struct recv_list));
+    pkt = PJ_POOL_ZALLOC_T(pool, struct recv_list);
 
     /* Initialize rdata. */
     pkt->rdata.tp_info.pool = pool;
@@ -120,7 +120,7 @@
 
     pjsip_tx_data_add_ref(tdata);
     pj_lock_acquire(tdata->lock);
-    sent_status = pj_pool_alloc(tdata->pool, sizeof(struct send_list));
+    sent_status = PJ_POOL_ALLOC_T(tdata->pool, struct send_list);
     pj_lock_release(tdata->lock);
 
     sent_status->sent = sent;
@@ -253,7 +253,7 @@
 /* Worker thread for loop transport. */
 static int loop_transport_worker_thread(void *arg)
 {
-    struct loop_transport *loop = arg;
+    struct loop_transport *loop = (struct loop_transport*) arg;
     struct recv_list r;
     struct send_list s;
 
@@ -356,7 +356,7 @@
 	return PJ_ENOMEM;
 
     /* Create the loop structure. */
-    loop = pj_pool_zalloc(pool, sizeof(struct loop_transport));
+    loop = PJ_POOL_ZALLOC_T(pool, struct loop_transport);
     
     /* Initialize transport properties. */
     pj_ansi_snprintf(loop->base.obj_name, sizeof(loop->base.obj_name), 
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index 6033a8d..70008a7 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -170,7 +170,7 @@
 				   const pj_sockaddr_in *addr )
 {
     enum { M = 48 };
-    host_port->host.ptr = pj_pool_alloc(pool, M);
+    host_port->host.ptr = (char*) pj_pool_alloc(pool, M);
     host_port->host.slen = pj_ansi_snprintf( host_port->host.ptr, M, "%s", 
 					    pj_inet_ntoa(addr->sin_addr));
     host_port->port = pj_ntohs(addr->sin_port);
@@ -222,7 +222,7 @@
     PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
 
 
-    listener = pj_pool_zalloc(pool, sizeof(struct tcp_listener));
+    listener = PJ_POOL_ZALLOC_T(pool, struct tcp_listener);
     listener->factory.pool = pool;
     listener->factory.type = PJSIP_TRANSPORT_TCP;
     listener->factory.type_name = "tcp";
@@ -345,8 +345,8 @@
 	    goto on_error;
 	}
 
-	listener->accept_op[i] = pj_pool_zalloc(pool, 
-						sizeof(struct pending_accept));
+	listener->accept_op[i] = PJ_POOL_ZALLOC_T(pool, 
+						  struct pending_accept);
 	pj_ioqueue_op_key_init(&listener->accept_op[i]->op_key, 
 				sizeof(listener->accept_op[i]->op_key));
 	listener->accept_op[i]->pool = pool;
@@ -507,7 +507,7 @@
     /*
      * Create and initialize basic transport structure.
      */
-    tcp = pj_pool_zalloc(pool, sizeof(*tcp));
+    tcp = PJ_POOL_ZALLOC_T(pool, struct tcp_transport);
     tcp->sock = sock;
     tcp->is_server = is_server;
     tcp->listener = listener;
@@ -532,7 +532,7 @@
     tcp->base.type_name = "tcp";
     tcp->base.flag = pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TCP);
 
-    tcp->base.info = pj_pool_alloc(pool, 64);
+    tcp->base.info = (char*) pj_pool_alloc(pool, 64);
     pj_ansi_snprintf(tcp->base.info, 64, "TCP to %s:%d",
 		     pj_inet_ntoa(remote->sin_addr), 
 		     (int)pj_ntohs(remote->sin_port));
@@ -889,7 +889,7 @@
     struct pending_accept *accept_op;
     int err_cnt = 0;
 
-    listener = pj_ioqueue_get_user_data(key);
+    listener = (struct tcp_listener*) pj_ioqueue_get_user_data(key);
     accept_op = (struct pending_accept*) op_key;
 
     /*
@@ -948,7 +948,7 @@
 	    /* Create new accept_opt */
 	    pool = pjsip_endpt_create_pool(listener->endpt, "tcps%p", 
 					   POOL_TP_INIT, POOL_TP_INC);
-	    new_op = pj_pool_zalloc(pool, sizeof(struct pending_accept));
+	    new_op = PJ_POOL_ZALLOC_T(pool, struct pending_accept);
 	    new_op->pool = pool;
 	    new_op->listener = listener;
 	    new_op->index = accept_op->index;
@@ -1002,7 +1002,8 @@
                               pj_ioqueue_op_key_t *op_key, 
                               pj_ssize_t bytes_sent)
 {
-    struct tcp_transport *tcp = pj_ioqueue_get_user_data(key);
+    struct tcp_transport *tcp = (struct tcp_transport*) 
+    				pj_ioqueue_get_user_data(key);
     pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key;
 
     tdata_op_key->tdata = NULL;
@@ -1081,8 +1082,8 @@
 	     * connect() is still in progress. Put the transmit data to
 	     * the delayed list.
 	     */
-	    delayed_tdata = pj_pool_alloc(tdata->pool, 
-					  sizeof(*delayed_tdata));
+	    delayed_tdata = PJ_POOL_ALLOC_T(tdata->pool, 
+					    struct delayed_tdata);
 	    delayed_tdata->tdata_op_key = &tdata->op_key;
 
 	    pj_list_push_back(&tcp->delayed_list, delayed_tdata);
@@ -1292,7 +1293,7 @@
     pj_sockaddr_in addr;
     int addrlen;
 
-    tcp = pj_ioqueue_get_user_data(key);
+    tcp = (struct tcp_transport*) pj_ioqueue_get_user_data(key);
 
     /* Mark that pending connect() operation has completed. */
     tcp->has_pending_connect = PJ_FALSE;
diff --git a/pjsip/src/pjsip/sip_transport_udp.c b/pjsip/src/pjsip/sip_transport_udp.c
index 48d2b2d..661d49f 100644
--- a/pjsip/src/pjsip/sip_transport_udp.c
+++ b/pjsip/src/pjsip/sip_transport_udp.c
@@ -82,7 +82,7 @@
     //note: already done by caller
     //pj_pool_reset(pool);
 
-    rdata = pj_pool_zalloc(pool, sizeof(pjsip_rx_data));
+    rdata = PJ_POOL_ZALLOC_T(pool, pjsip_rx_data);
 
     /* Init tp_info part. */
     rdata->tp_info.pool = pool;
@@ -261,7 +261,8 @@
 				   pj_ioqueue_op_key_t *op_key,
 				   pj_ssize_t bytes_sent)
 {
-    struct udp_transport *tp = pj_ioqueue_get_user_data(key);
+    struct udp_transport *tp = (struct udp_transport*) 
+    			       pj_ioqueue_get_user_data(key);
     pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key;
 
     tdata_op_key->tdata = NULL;
@@ -446,7 +447,7 @@
 	return PJ_ENOMEM;
 
     /* Create the UDP transport object. */
-    tp = pj_pool_zalloc(pool, sizeof(struct udp_transport));
+    tp = PJ_POOL_ZALLOC_T(pool, struct udp_transport);
 
     /* Save pool. */
     tp->base.pool = pool;
@@ -496,7 +497,7 @@
     tp->base.remote_name.port = 0;
 
     /* Transport info. */
-    tp->base.info = pj_pool_alloc(pool, M);
+    tp->base.info = (char*) pj_pool_alloc(pool, M);
     pj_ansi_snprintf( 
 	tp->base.info, M, "udp %s:%d [published as %s:%d]",
 	pj_inet_ntoa(((pj_sockaddr_in*)&tp->base.local_addr)->sin_addr),
@@ -542,7 +543,8 @@
 
     /* Create rdata and put it in the array. */
     tp->rdata_cnt = 0;
-    tp->rdata = pj_pool_calloc(tp->base.pool, async_cnt, 
+    tp->rdata = (pjsip_rx_data**)
+    		pj_pool_calloc(tp->base.pool, async_cnt, 
 			       sizeof(pjsip_rx_data*));
     for (i=0; i<async_cnt; ++i) {
 	pj_pool_t *rdata_pool = pjsip_endpt_create_pool(endpt, "rtd%p", 
diff --git a/pjsip/src/pjsip/sip_ua_layer.c b/pjsip/src/pjsip/sip_ua_layer.c
index 5600003..be89e2b 100644
--- a/pjsip/src/pjsip/sip_ua_layer.c
+++ b/pjsip/src/pjsip/sip_ua_layer.c
@@ -165,7 +165,7 @@
     pjsip_dialog *dlg;
 
     /* Get the dialog where this transaction belongs. */
-    dlg = tsx->mod_data[mod_ua.mod.id];
+    dlg = (pjsip_dialog*) tsx->mod_data[mod_ua.mod.id];
     
     /* If dialog instance has gone, it could mean that the dialog
      * may has been destroyed.
@@ -244,7 +244,7 @@
     PJ_ASSERT_ON_FAIL(pool && set_key && call_id && local_tag, return;);
 
     set_key->slen = call_id->slen + local_tag->slen + 1;
-    set_key->ptr = pj_pool_alloc(pool, set_key->slen);
+    set_key->ptr = (char*) pj_pool_alloc(pool, set_key->slen);
     pj_assert(set_key->ptr != NULL);
 
     pj_memcpy(set_key->ptr, call_id->ptr, call_id->slen);
@@ -267,7 +267,7 @@
 	pj_list_erase(set);
 	return set;
     } else {
-	set = pj_pool_alloc(mod_ua.pool, sizeof(struct dlg_set));
+	set = PJ_POOL_ALLOC_T(mod_ua.pool, struct dlg_set);
 	return set;
     }
 }
@@ -298,7 +298,8 @@
     if (dlg->role == PJSIP_ROLE_UAC) {
 	struct dlg_set *dlg_set;
 
-	dlg_set = pj_hash_get( mod_ua.dlg_table, dlg->local.info->tag.ptr, 
+	dlg_set = (struct dlg_set*)
+		  pj_hash_get( mod_ua.dlg_table, dlg->local.info->tag.ptr, 
 			       dlg->local.info->tag.slen,
 			       &dlg->local.tag_hval);
 
@@ -366,7 +367,7 @@
     pj_mutex_lock(mod_ua.mutex);
 
     /* Find this dialog from the dialog set. */
-    dlg_set = dlg->dlg_set;
+    dlg_set = (struct dlg_set*) dlg->dlg_set;
     d = dlg_set->dlg_list.next;
     while (d != (pjsip_dialog*)&dlg_set->dlg_list && d != dlg) {
 	d = d->next;
@@ -400,12 +401,12 @@
 
 PJ_DEF(pjsip_dialog*) pjsip_rdata_get_dlg( pjsip_rx_data *rdata )
 {
-    return rdata->endpt_info.mod_data[mod_ua.mod.id];
+    return (pjsip_dialog*) rdata->endpt_info.mod_data[mod_ua.mod.id];
 }
 
 PJ_DEF(pjsip_dialog*) pjsip_tsx_get_dlg( pjsip_transaction *tsx )
 {
-    return tsx->mod_data[mod_ua.mod.id];
+    return (pjsip_dialog*) tsx->mod_data[mod_ua.mod.id];
 }
 
 
@@ -426,7 +427,8 @@
     pj_mutex_lock(mod_ua.mutex);
 
     /* Lookup the dialog set. */
-    dlg_set = pj_hash_get(mod_ua.dlg_table, local_tag->ptr, local_tag->slen,
+    dlg_set = (struct dlg_set*)
+    	      pj_hash_get(mod_ua.dlg_table, local_tag->ptr, local_tag->slen,
 			  NULL);
     if (dlg_set == NULL) {
 	/* Not found */
@@ -516,13 +518,13 @@
 
 	/* We should find the dialog attached to the INVITE transaction */
 	if (tsx) {
-	    dlg = tsx->mod_data[mod_ua.mod.id];
+	    dlg = (pjsip_dialog*) tsx->mod_data[mod_ua.mod.id];
 	    pj_mutex_unlock(tsx->mutex);
 
 	    /* Dlg may be NULL on some extreme condition
 	     * (e.g. during debugging where initially there is a dialog)
 	     */
-	    return dlg ? dlg->dlg_set : NULL;
+	    return dlg ? (struct dlg_set*) dlg->dlg_set : NULL;
 
 	} else {
 	    return NULL;
@@ -539,7 +541,8 @@
 	    tag = &rdata->msg_info.from->tag;
 
 	/* Lookup the dialog set. */
-	dlg_set = pj_hash_get(mod_ua.dlg_table, tag->ptr, tag->slen, NULL);
+	dlg_set = (struct dlg_set*)
+		  pj_hash_get(mod_ua.dlg_table, tag->ptr, tag->slen, NULL);
 	return dlg_set;
     }
 }
@@ -704,7 +707,7 @@
 	}
 
 	/* Get the dialog set. */
-	dlg_set = dlg->dlg_set;
+	dlg_set = (struct dlg_set*) dlg->dlg_set;
 
 	/* Even if transaction is found and (candidate) dialog has been 
 	 * identified, it's possible that the request has forked.
@@ -732,7 +735,8 @@
 
 
 	/* Get the dialog set. */
-	dlg_set = pj_hash_get(mod_ua.dlg_table, 
+	dlg_set = (struct dlg_set*)
+		  pj_hash_get(mod_ua.dlg_table, 
 			      rdata->msg_info.from->tag.ptr,
 			      rdata->msg_info.from->tag.slen,
 			      NULL);
@@ -917,7 +921,7 @@
 	    pjsip_dialog *dlg;
 	    const char *title;
 
-	    dlg_set = pj_hash_this(mod_ua.dlg_table, it);
+	    dlg_set = (struct dlg_set*) pj_hash_this(mod_ua.dlg_table, it);
 	    if (!dlg_set || pj_list_empty(&dlg_set->dlg_list)) continue;
 
 	    /* First dialog in dialog set. */
diff --git a/pjsip/src/pjsip/sip_uri.c b/pjsip/src/pjsip/sip_uri.c
index ed13d2f..c224090 100644
--- a/pjsip/src/pjsip/sip_uri.c
+++ b/pjsip/src/pjsip/sip_uri.c
@@ -60,7 +60,7 @@
 
     pj_list_init(dst_list);
     while (p != src_list) {
-	pjsip_param *new_param = pj_pool_alloc(pool, sizeof(pjsip_param));
+	pjsip_param *new_param = PJ_POOL_ALLOC_T(pool, pjsip_param);
 	pj_strdup(pool, &new_param->name, &p->name);
 	pj_strdup(pool, &new_param->value, &p->value);
 	pj_list_insert_before(dst_list, new_param);
@@ -77,7 +77,7 @@
 
     pj_list_init(dst_list);
     while (p != src_list) {
-	pjsip_param *new_param = pj_pool_alloc(pool, sizeof(pjsip_param));
+	pjsip_param *new_param = PJ_POOL_ALLOC_T(pool, pjsip_param);
 	new_param->name = p->name;
 	new_param->value = p->value;
 	pj_list_insert_before(dst_list, new_param);
@@ -137,12 +137,6 @@
 static pj_str_t sip_str = { "sip", 3 };
 static pj_str_t sips_str = { "sips", 4 };
 
-#ifdef __GNUC__
-#  define HAPPY_FLAG	(void*)
-#else
-#  define HAPPY_FLAG
-#endif
-
 static pjsip_name_addr* pjsip_name_addr_clone( pj_pool_t *pool, 
 					       const pjsip_name_addr *rhs);
 static pj_ssize_t pjsip_name_addr_print(pjsip_uri_context_e context,
@@ -160,31 +154,40 @@
 static pjsip_sip_uri* pjsip_url_clone(pj_pool_t *pool, 
 				      const pjsip_sip_uri *rhs);
 
+typedef const pj_str_t* (*P_GET_SCHEME)(const void*);
+typedef void* 		(*P_GET_URI)(void*);
+typedef pj_ssize_t 	(*P_PRINT_URI)(pjsip_uri_context_e,const void *,
+				       char*,unsigned);
+typedef int 		(*P_CMP_URI)(pjsip_uri_context_e, const void*, 
+				     const void*);
+typedef void* 		(*P_CLONE)(pj_pool_t*, const void*);
+
+
 static pjsip_uri_vptr sip_url_vptr = 
 {
-    HAPPY_FLAG &pjsip_url_get_scheme,
-    HAPPY_FLAG &pjsip_get_uri,
-    HAPPY_FLAG &pjsip_url_print,
-    HAPPY_FLAG &pjsip_url_compare,
-    HAPPY_FLAG &pjsip_url_clone
+    (P_GET_SCHEME)	&pjsip_url_get_scheme,
+    (P_GET_URI)		&pjsip_get_uri,
+    (P_PRINT_URI) 	&pjsip_url_print,
+    (P_CMP_URI) 	&pjsip_url_compare,
+    (P_CLONE) 		&pjsip_url_clone
 };
 
 static pjsip_uri_vptr sips_url_vptr = 
 {
-    HAPPY_FLAG &pjsips_url_get_scheme,
-    HAPPY_FLAG &pjsip_get_uri,
-    HAPPY_FLAG &pjsip_url_print,
-    HAPPY_FLAG &pjsip_url_compare,
-    HAPPY_FLAG &pjsip_url_clone
+    (P_GET_SCHEME)	&pjsips_url_get_scheme,
+    (P_GET_URI)		&pjsip_get_uri,
+    (P_PRINT_URI) 	&pjsip_url_print,
+    (P_CMP_URI) 	&pjsip_url_compare,
+    (P_CLONE) 		&pjsip_url_clone
 };
 
 static pjsip_uri_vptr name_addr_vptr = 
 {
-    HAPPY_FLAG &pjsip_name_addr_get_scheme,
-    HAPPY_FLAG &pjsip_name_addr_get_uri,
-    HAPPY_FLAG &pjsip_name_addr_print,
-    HAPPY_FLAG &pjsip_name_addr_compare,
-    HAPPY_FLAG &pjsip_name_addr_clone
+    (P_GET_SCHEME)	&pjsip_name_addr_get_scheme,
+    (P_GET_URI)		&pjsip_name_addr_get_uri,
+    (P_PRINT_URI) 	&pjsip_name_addr_print,
+    (P_CMP_URI) 	&pjsip_name_addr_compare,
+    (P_CLONE) 		&pjsip_name_addr_clone
 };
 
 static const pj_str_t *pjsip_url_get_scheme(const pjsip_sip_uri *url)
@@ -227,7 +230,7 @@
 PJ_DEF(pjsip_sip_uri*) pjsip_sip_uri_create( pj_pool_t *pool, 
 					     pj_bool_t secure )
 {
-    pjsip_sip_uri *url = pj_pool_alloc(pool, sizeof(pjsip_sip_uri));
+    pjsip_sip_uri *url = PJ_POOL_ALLOC_T(pool, pjsip_sip_uri);
     pjsip_sip_uri_init(url, secure);
     return url;
 }
@@ -496,7 +499,7 @@
 
 static pjsip_sip_uri* pjsip_url_clone(pj_pool_t *pool, const pjsip_sip_uri *rhs)
 {
-    pjsip_sip_uri *url = pj_pool_alloc(pool, sizeof(pjsip_sip_uri));
+    pjsip_sip_uri *url = PJ_POOL_ALLOC_T(pool, pjsip_sip_uri);
     if (!url)
 	return NULL;
 
@@ -520,7 +523,7 @@
 
 PJ_DEF(pjsip_name_addr*) pjsip_name_addr_create(pj_pool_t *pool)
 {
-    pjsip_name_addr *name_addr = pj_pool_alloc(pool, sizeof(pjsip_name_addr));
+    pjsip_name_addr *name_addr = PJ_POOL_ALLOC_T(pool, pjsip_name_addr);
     pjsip_name_addr_init(name_addr);
     return name_addr;
 }
@@ -534,7 +537,7 @@
     char *endbuf = buf + size;
     pjsip_uri *uri;
 
-    uri = pjsip_uri_get_uri(name->uri);
+    uri = (pjsip_uri*) pjsip_uri_get_uri(name->uri);
     pj_assert(uri != NULL);
 
     if (context != PJSIP_URI_IN_REQ_URI) {
@@ -565,13 +568,13 @@
 				    const pjsip_name_addr *src)
 {
     pj_strdup( pool, &dst->display, &src->display);
-    dst->uri = pjsip_uri_clone(pool, src->uri);
+    dst->uri = (pjsip_uri*) pjsip_uri_clone(pool, src->uri);
 }
 
 static pjsip_name_addr* pjsip_name_addr_clone( pj_pool_t *pool, 
 					       const pjsip_name_addr *rhs)
 {
-    pjsip_name_addr *addr = pj_pool_alloc(pool, sizeof(pjsip_name_addr));
+    pjsip_name_addr *addr = PJ_POOL_ALLOC_T(pool, pjsip_name_addr);
     if (!addr)
 	return NULL;
 
diff --git a/pjsip/src/pjsip/sip_util.c b/pjsip/src/pjsip/sip_util.c
index 3f1add4..f0292be 100644
--- a/pjsip/src/pjsip/sip_util.c
+++ b/pjsip/src/pjsip/sip_util.c
@@ -84,7 +84,8 @@
     /* Add additional request headers from endpoint. */
     endpt_hdr = pjsip_endpt_get_request_headers(endpt)->next;
     while (endpt_hdr != pjsip_endpt_get_request_headers(endpt)) {
-	pjsip_hdr *hdr = pjsip_hdr_shallow_clone(tdata->pool, endpt_hdr);
+	pjsip_hdr *hdr = (pjsip_hdr*) 
+			 pjsip_hdr_shallow_clone(tdata->pool, endpt_hdr);
 	pjsip_msg_add_hdr( tdata->msg, hdr );
 	endpt_hdr = endpt_hdr->next;
     }
@@ -92,26 +93,26 @@
     /* Add From header. */
     if (param_from->tag.slen == 0)
 	pj_create_unique_string(tdata->pool, &param_from->tag);
-    pjsip_msg_add_hdr(msg, (void*)param_from);
+    pjsip_msg_add_hdr(msg, (pjsip_hdr*)param_from);
 
     /* Add To header. */
-    pjsip_msg_add_hdr(msg, (void*)param_to);
+    pjsip_msg_add_hdr(msg, (pjsip_hdr*)param_to);
 
     /* Add Contact header. */
     if (param_contact) {
-	pjsip_msg_add_hdr(msg, (void*)param_contact);
+	pjsip_msg_add_hdr(msg, (pjsip_hdr*)param_contact);
     }
 
     /* Add Call-ID header. */
-    pjsip_msg_add_hdr(msg, (void*)param_call_id);
+    pjsip_msg_add_hdr(msg, (pjsip_hdr*)param_call_id);
 
     /* Add CSeq header. */
-    pjsip_msg_add_hdr(msg, (void*)param_cseq);
+    pjsip_msg_add_hdr(msg, (pjsip_hdr*)param_cseq);
 
     /* Add a blank Via header in the front of the message. */
     via = pjsip_via_hdr_create(tdata->pool);
     via->rport_param = 0;
-    pjsip_msg_insert_first_hdr(msg, (void*)via);
+    pjsip_msg_insert_first_hdr(msg, (pjsip_hdr*)via);
 
     /* Add header params as request headers */
     if (PJSIP_URI_SCHEME_IS_SIP(param_target) || 
@@ -134,7 +135,7 @@
 
     /* Create message body. */
     if (param_text) {
-	body = pj_pool_calloc(tdata->pool, 1, sizeof(pjsip_msg_body));
+	body = PJ_POOL_ZALLOC_T(tdata->pool, pjsip_msg_body);
 	body->content_type.type = str_TEXT;
 	body->content_type.subtype = str_PLAIN;
 	body->data = pj_pool_alloc(tdata->pool, param_text->slen );
@@ -296,16 +297,18 @@
 
     PJ_TRY {
 	/* Duplicate target URI and headers. */
-	target = pjsip_uri_clone(tdata->pool, param_target);
-	from = pjsip_hdr_clone(tdata->pool, param_from);
+	target = (pjsip_uri*) pjsip_uri_clone(tdata->pool, param_target);
+	from = (pjsip_from_hdr*) pjsip_hdr_clone(tdata->pool, param_from);
 	pjsip_fromto_hdr_set_from(from);
-	to = pjsip_hdr_clone(tdata->pool, param_to);
+	to = (pjsip_to_hdr*) pjsip_hdr_clone(tdata->pool, param_to);
 	pjsip_fromto_hdr_set_to(to);
-	if (param_contact)
-	    contact = pjsip_hdr_clone(tdata->pool, param_contact);
-	else
+	if (param_contact) {
+	    contact = (pjsip_contact_hdr*) 
+	    	      pjsip_hdr_clone(tdata->pool, param_contact);
+	} else {
 	    contact = NULL;
-	call_id = pjsip_hdr_clone(tdata->pool, param_call_id);
+	}
+	call_id = (pjsip_cid_hdr*) pjsip_hdr_clone(tdata->pool, param_call_id);
 	cseq = pjsip_cseq_hdr_create(tdata->pool);
 	if (param_cseq >= 0)
 	    cseq->cseq = param_cseq;
@@ -385,39 +388,42 @@
     /* Copy all the via headers, in order. */
     via = rdata->msg_info.via;
     while (via) {
-	pjsip_msg_add_hdr( msg, pjsip_hdr_clone(tdata->pool, via));
+	pjsip_msg_add_hdr( msg, (pjsip_hdr*)pjsip_hdr_clone(tdata->pool, via));
 	via = via->next;
 	if (via != (void*)&req_msg->hdr)
-	    via = pjsip_msg_find_hdr(req_msg, PJSIP_H_VIA, via);
+	    via = (pjsip_via_hdr*) 
+	    	  pjsip_msg_find_hdr(req_msg, PJSIP_H_VIA, via);
 	else
 	    break;
     }
 
     /* Copy all Record-Route headers, in order. */
-    rr = pjsip_msg_find_hdr(req_msg, PJSIP_H_RECORD_ROUTE, NULL);
+    rr = (pjsip_rr_hdr*) 
+    	 pjsip_msg_find_hdr(req_msg, PJSIP_H_RECORD_ROUTE, NULL);
     while (rr) {
-	pjsip_msg_add_hdr(msg, pjsip_hdr_clone(tdata->pool, rr));
+	pjsip_msg_add_hdr(msg, (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, rr));
 	rr = rr->next;
 	if (rr != (void*)&req_msg->hdr)
-	    rr = pjsip_msg_find_hdr(req_msg, PJSIP_H_RECORD_ROUTE, rr);
+	    rr = (pjsip_rr_hdr*) pjsip_msg_find_hdr(req_msg, 
+	    					    PJSIP_H_RECORD_ROUTE, rr);
 	else
 	    break;
     }
 
     /* Copy Call-ID header. */
-    hdr = pjsip_msg_find_hdr( req_msg, PJSIP_H_CALL_ID, NULL);
-    pjsip_msg_add_hdr(msg, pjsip_hdr_clone(tdata->pool, hdr));
+    hdr = (pjsip_hdr*) pjsip_msg_find_hdr( req_msg, PJSIP_H_CALL_ID, NULL);
+    pjsip_msg_add_hdr(msg, (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, hdr));
 
     /* Copy From header. */
-    hdr = pjsip_hdr_clone(tdata->pool, rdata->msg_info.from);
+    hdr = (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, rdata->msg_info.from);
     pjsip_msg_add_hdr( msg, hdr);
 
     /* Copy To header. */
-    hdr = pjsip_hdr_clone(tdata->pool, rdata->msg_info.to);
+    hdr = (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, rdata->msg_info.to);
     pjsip_msg_add_hdr( msg, hdr);
 
     /* Copy CSeq header. */
-    hdr = pjsip_hdr_clone(tdata->pool, rdata->msg_info.cseq);
+    hdr = (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, rdata->msg_info.cseq);
     pjsip_msg_add_hdr( msg, hdr);
 
     /* All done. */
@@ -494,23 +500,25 @@
 
 
     /* Clear Via headers in the new request. */
-    while ((via=pjsip_msg_find_hdr(ack->msg, PJSIP_H_VIA, NULL)) != NULL)
+    while ((via=(pjsip_hdr*)pjsip_msg_find_hdr(ack->msg, PJSIP_H_VIA, NULL)) != NULL)
 	pj_list_erase(via);
 
     /* Must contain single Via, just as the original INVITE. */
-    hdr = pjsip_msg_find_hdr( invite_msg, PJSIP_H_VIA, NULL);
-    pjsip_msg_insert_first_hdr( ack->msg, pjsip_hdr_clone(ack->pool,hdr) );
+    hdr = (pjsip_hdr*) pjsip_msg_find_hdr( invite_msg, PJSIP_H_VIA, NULL);
+    pjsip_msg_insert_first_hdr( ack->msg, 
+    			        (pjsip_hdr*) pjsip_hdr_clone(ack->pool,hdr) );
 
     /* If the original INVITE has Route headers, those header fields MUST 
      * appear in the ACK.
      */
-    hdr = pjsip_msg_find_hdr( invite_msg, PJSIP_H_ROUTE, NULL);
+    hdr = (pjsip_hdr*) pjsip_msg_find_hdr( invite_msg, PJSIP_H_ROUTE, NULL);
     while (hdr != NULL) {
-	pjsip_msg_add_hdr( ack->msg, pjsip_hdr_clone(ack->pool, hdr) );
+	pjsip_msg_add_hdr( ack->msg, 
+			   (pjsip_hdr*) pjsip_hdr_clone(ack->pool, hdr) );
 	hdr = hdr->next;
 	if (hdr == &invite_msg->hdr)
 	    break;
-	hdr = pjsip_msg_find_hdr( invite_msg, PJSIP_H_ROUTE, hdr);
+	hdr = (pjsip_hdr*) pjsip_msg_find_hdr( invite_msg, PJSIP_H_ROUTE, hdr);
     }
 
     /* We're done.
@@ -578,30 +586,31 @@
 	return status;
 
     /* Clear Via headers in the new request. */
-    while ((via=pjsip_msg_find_hdr(cancel_tdata->msg, PJSIP_H_VIA, NULL)) != NULL)
+    while ((via=(pjsip_hdr*)pjsip_msg_find_hdr(cancel_tdata->msg, PJSIP_H_VIA, NULL)) != NULL)
 	pj_list_erase(via);
 
 
     /* Must only have single Via which matches the top-most Via in the 
      * request being cancelled. 
      */
-    hdr = pjsip_msg_find_hdr(req_tdata->msg, PJSIP_H_VIA, NULL);
+    hdr = (pjsip_hdr*) pjsip_msg_find_hdr(req_tdata->msg, PJSIP_H_VIA, NULL);
     if (hdr) {
 	pjsip_msg_insert_first_hdr(cancel_tdata->msg, 
-				   pjsip_hdr_clone(cancel_tdata->pool, hdr));
+				   (pjsip_hdr*)pjsip_hdr_clone(cancel_tdata->pool, hdr));
     }
 
     /* If the original request has Route header, the CANCEL request must also
      * has exactly the same.
      * Copy "Route" header from the request.
      */
-    hdr = pjsip_msg_find_hdr(req_tdata->msg, PJSIP_H_ROUTE, NULL);
+    hdr = (pjsip_hdr*) pjsip_msg_find_hdr(req_tdata->msg, PJSIP_H_ROUTE, NULL);
     while (hdr != NULL) {
 	pjsip_msg_add_hdr(cancel_tdata->msg, 
-			  pjsip_hdr_clone(cancel_tdata->pool, hdr));
+			  (pjsip_hdr*) pjsip_hdr_clone(cancel_tdata->pool, hdr));
 	hdr = hdr->next;
 	if (hdr != &req_tdata->msg->hdr)
-	    hdr = pjsip_msg_find_hdr(req_tdata->msg, PJSIP_H_ROUTE, hdr);
+	    hdr = (pjsip_hdr*) pjsip_msg_find_hdr(req_tdata->msg, 
+	    					  PJSIP_H_ROUTE, hdr);
 	else
 	    break;
     }
@@ -637,7 +646,8 @@
 
     /* Get the first "Route" header from the message.
      */
-    first_route_hdr = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ROUTE, NULL);
+    first_route_hdr = (const pjsip_route_hdr*) 
+    		      pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ROUTE, NULL);
     if (first_route_hdr) {
 	target_uri = first_route_hdr->name_addr.uri;
     } else {
@@ -697,13 +707,14 @@
     PJ_ASSERT_RETURN(dest_info != NULL, PJ_EINVAL);
 
     /* Find the first and last "Route" headers from the message. */
-    last_route_hdr = first_route_hdr = 
+    last_route_hdr = first_route_hdr = (pjsip_route_hdr*)
 	pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ROUTE, NULL);
     if (first_route_hdr) {
 	topmost_route_uri = &first_route_hdr->name_addr;
 	while (last_route_hdr->next != (void*)&tdata->msg->hdr) {
 	    pjsip_route_hdr *hdr;
-	    hdr = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ROUTE, 
+	    hdr = (pjsip_route_hdr*)
+	    	  pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ROUTE, 
                                      last_route_hdr->next);
 	    if (!hdr)
 		break;
@@ -728,7 +739,7 @@
 	if (PJSIP_URI_SCHEME_IS_SIP(topmost_route_uri) ||
 	    PJSIP_URI_SCHEME_IS_SIPS(topmost_route_uri))
 	{
-	    const pjsip_sip_uri *url = 
+	    const pjsip_sip_uri *url = (const pjsip_sip_uri*)
 		pjsip_uri_get_uri((void*)topmost_route_uri);
 	    has_lr_param = url->lr_param;
 	} else {
@@ -747,7 +758,8 @@
 		last_route_hdr = NULL;
 	    */
 	} else {
-	    new_request_uri = pjsip_uri_get_uri((void*)topmost_route_uri);
+	    new_request_uri = (const pjsip_uri*) 
+	    		      pjsip_uri_get_uri((pjsip_uri*)topmost_route_uri);
 	    pj_list_erase(first_route_hdr);
 	    if (first_route_hdr == last_route_hdr)
 		last_route_hdr = NULL;
@@ -793,7 +805,8 @@
      */
     if (new_request_uri && new_request_uri!=tdata->msg->line.req.uri) {
 	pjsip_route_hdr *route = pjsip_route_hdr_create(tdata->pool);
-	route->name_addr.uri = pjsip_uri_get_uri(tdata->msg->line.req.uri);
+	route->name_addr.uri = (pjsip_uri*) 
+			       pjsip_uri_get_uri(tdata->msg->line.req.uri);
 	if (last_route_hdr)
 	    pj_list_insert_after(last_route_hdr, route);
 	else
@@ -814,7 +827,7 @@
 					 pjsip_tx_data *tdata,
 					 pj_ssize_t sent )
 {
-    pjsip_send_state *stateless_data = token;
+    pjsip_send_state *stateless_data = (pjsip_send_state*) token;
 
     PJ_UNUSED_ARG(tdata);
     pj_assert(tdata == stateless_data->tdata);
@@ -915,8 +928,8 @@
 
 	if (via->branch_param.slen == 0) {
 	    pj_str_t tmp;
-	    via->branch_param.ptr = pj_pool_alloc(tdata->pool,
-						  PJSIP_MAX_BRANCH_LEN);
+	    via->branch_param.ptr = (char*)pj_pool_alloc(tdata->pool,
+						  	 PJSIP_MAX_BRANCH_LEN);
 	    via->branch_param.slen = PJSIP_MAX_BRANCH_LEN;
 	    pj_memcpy(via->branch_param.ptr, PJSIP_RFC3261_BRANCH_ID,
 		      PJSIP_RFC3261_BRANCH_LEN);
@@ -960,7 +973,7 @@
 				  void *token,
 				  const struct pjsip_server_addresses *addr)
 {
-    pjsip_send_state *stateless_data = token;
+    pjsip_send_state *stateless_data = (pjsip_send_state*) token;
 
     /* Fail on server resolution. */
     if (status != PJ_SUCCESS) {
@@ -1008,7 +1021,7 @@
 	return status;
 
     /* Keep stateless data. */
-    stateless_data = pj_pool_zalloc(tdata->pool, sizeof(pjsip_send_state));
+    stateless_data = PJ_POOL_ZALLOC_T(tdata->pool, pjsip_send_state);
     stateless_data->token = token;
     stateless_data->endpt = endpt;
     stateless_data->tdata = tdata;
@@ -1135,7 +1148,7 @@
 static void send_response_transport_cb(void *token, pjsip_tx_data *tdata,
 				       pj_ssize_t sent)
 {
-    pjsip_send_state *send_state = token;
+    pjsip_send_state *send_state = (pjsip_send_state*) token;
     pj_bool_t cont = PJ_FALSE;
 
     /* Call callback, if any. */
@@ -1155,7 +1168,7 @@
 static void send_response_resolver_cb( pj_status_t status, void *token,
 				       const pjsip_server_addresses *addr )
 {
-    pjsip_send_state *send_state = token;
+    pjsip_send_state *send_state = (pjsip_send_state*) token;
 
     if (status != PJ_SUCCESS) {
 	if (send_state->app_cb) {
@@ -1224,7 +1237,7 @@
     pj_status_t status;
 
     /* Create structure to keep the sending state. */
-    send_state = pj_pool_zalloc(tdata->pool, sizeof(pjsip_send_state));
+    send_state = PJ_POOL_ZALLOC_T(tdata->pool, pjsip_send_state);
     send_state->endpt = endpt;
     send_state->tdata = tdata;
     send_state->token = token;
@@ -1317,7 +1330,8 @@
     if (hdr_list) {
 	const pjsip_hdr *hdr = hdr_list->next;
 	while (hdr != hdr_list) {
-	    pjsip_msg_add_hdr( tdata->msg, pjsip_hdr_clone(tdata->pool, hdr) );
+	    pjsip_msg_add_hdr(tdata->msg, 
+	    		      (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, hdr) );
 	    hdr = hdr->next;
 	}
     }
diff --git a/pjsip/src/pjsip/sip_util_proxy.c b/pjsip/src/pjsip/sip_util_proxy.c
index b963139..47b6499 100644
--- a/pjsip/src/pjsip/sip_util_proxy.c
+++ b/pjsip/src/pjsip/sip_util_proxy.c
@@ -128,9 +128,11 @@
 
 	/* Set request URI */
 	if (uri) {
-	    dst->line.req.uri = pjsip_uri_clone(tdata->pool, uri);
+	    dst->line.req.uri = (pjsip_uri*) 
+	    			pjsip_uri_clone(tdata->pool, uri);
 	} else {
-	    dst->line.req.uri = pjsip_uri_clone(tdata->pool, src->line.req.uri);
+	    dst->line.req.uri= (pjsip_uri*)
+	    		       pjsip_uri_clone(tdata->pool, src->line.req.uri);
 	}
 
 	/* Clone ALL headers */
@@ -192,7 +194,7 @@
 #endif
 
 	    /* Clone the header */
-	    hdst = pjsip_hdr_clone(tdata->pool, hsrc);
+	    hdst = (pjsip_hdr*) pjsip_hdr_clone(tdata->pool, hsrc);
 
 	    /* If this is Max-Forward header, decrement the value */
 	    if (hdst->type == PJSIP_H_MAX_FORWARDS) {
@@ -291,7 +293,8 @@
 		continue;
 	    }
 
-	    pjsip_msg_add_hdr(dst, pjsip_hdr_clone(tdata->pool, hsrc));
+	    pjsip_msg_add_hdr(dst, 
+	    		      (pjsip_hdr*)pjsip_hdr_clone(tdata->pool, hsrc));
 
 	    hsrc = hsrc->next;
 	}
@@ -341,7 +344,8 @@
 		  rdata->msg_info.via->branch_param.slen);
     pj_md5_final(&ctx, digest);
 
-    branch.ptr = pj_pool_alloc(rdata->tp_info.pool, 
+    branch.ptr = (char*)
+    		 pj_pool_alloc(rdata->tp_info.pool, 
 			       32 + PJSIP_RFC3261_BRANCH_LEN);
     pj_memcpy(branch.ptr, PJSIP_RFC3261_BRANCH_ID, PJSIP_RFC3261_BRANCH_LEN);
 
diff --git a/pjsip/src/pjsip/sip_util_statefull.c b/pjsip/src/pjsip/sip_util_statefull.c
index 27ce550..129a13c 100644
--- a/pjsip/src/pjsip/sip_util_statefull.c
+++ b/pjsip/src/pjsip/sip_util_statefull.c
@@ -61,7 +61,7 @@
     if (event->type != PJSIP_EVENT_TSX_STATE)
 	return;
 
-    tsx_data = tsx->mod_data[mod_stateful_util.id];
+    tsx_data = (struct tsx_data*) tsx->mod_data[mod_stateful_util.id];
     if (tsx_data == NULL)
 	return;
 
@@ -102,7 +102,7 @@
 	return status;
     }
 
-    tsx_data = pj_pool_alloc(tsx->pool, sizeof(struct tsx_data));
+    tsx_data = PJ_POOL_ALLOC_T(tsx->pool, struct tsx_data);
     tsx_data->token = token;
     tsx_data->cb = cb;
 
@@ -147,7 +147,8 @@
     if (hdr_list) {
 	const pjsip_hdr *hdr = hdr_list->next;
 	while (hdr != hdr_list) {
-	    pjsip_msg_add_hdr( tdata->msg, pjsip_hdr_clone(tdata->pool, hdr) );
+	    pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
+	    		      pjsip_hdr_clone(tdata->pool, hdr) );
 	    hdr = hdr->next;
 	}
     }