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;
 	}
     }
