Ticket #354: continuing work to port the Symbian libraries to .DSO format

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1417 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/build.symbian/bld.inf b/build.symbian/bld.inf
index 42edf83..76ef118 100644
--- a/build.symbian/bld.inf
+++ b/build.symbian/bld.inf
@@ -1,7 +1,7 @@
 prj_platforms
 winscw
 //armv5
-gcce
+//gcce
 
 prj_mmpfiles
 pjlib.mmp
@@ -13,8 +13,6 @@
 pjsip.mmp
 pjsip_simple.mmp
 pjsip_ua.mmp
-pjlib_test.mmp
-sipstateless.mmp
 pjsua_lib.mmp
 null_audio.mmp
 symbian_ua.mmp
diff --git a/build.symbian/makedef.sh b/build.symbian/makedef.sh
index 1fe8c49..67629c6 100644
--- a/build.symbian/makedef.sh
+++ b/build.symbian/makedef.sh
@@ -13,16 +13,23 @@
 	exit 1

 fi

 

-TARGET=`grep -w TARGET $MMP | awk '{print $2}' | awk -F '.' '{print $1}' | head -1`

+TARGET=`grep -w '^TARGET' $MMP | awk '{print $2}' | awk -F '.' '{print $1}' | head -1`

 DEFFILE="${TARGET}U.def"

-SOURCES=`grep -w SOURCE $MMP | awk '{print $2}' | tr '\\\\' '/'`

-SOURCEPATH=`grep -w SOURCEPATH $MMP | tr '\\\\' '/' | awk '{print $2}'`

-INCPATH=`grep INCLUDE $MMP | awk '{print $2}' | grep pj | tr '\\\\' '/'`

+SOURCES=`grep -w '^SOURCE' $MMP | awk '{print $2}' | tr '\\\\' '/'`

+SOURCEPATH=`grep -w '^SOURCEPATH' $MMP | tr '\\\\' '/' | awk '{print $2}'`

+INCPATH=`grep 'INCLUDE' $MMP | awk '{print $2}' | grep pj | tr '\\\\' '/'`

 INCLUDE=""

 for INC in $INCPATH; do

 	INCLUDE=`echo $INCLUDE -I$INC`

 done

 

+#-- debug --

+#echo TARGET=$TARGET

+#echo SOURCES=$SOURCES

+#echo SOURCEPATH=$SOURCEPATH

+#echo INCLUDE=$INCLUDE

+#-- end --

+

 echo > tmpnames.def

 

 

diff --git a/build.symbian/null_audio.mmp b/build.symbian/null_audio.mmp
index 55bc20d..9676335 100644
--- a/build.symbian/null_audio.mmp
+++ b/build.symbian/null_audio.mmp
@@ -1,8 +1,25 @@
+#if defined(EKA2)
+
+TARGET		null_audio.dll
+TARGETTYPE	dll
+UID		0x1000008d 0xA0004294
+
+CAPABILITY	None
+LIBRARY		pjlib.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\null_audio.def
+
+#else
+
 TARGET 		null_audio.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjmedia\src\pjmedia
 
 OPTION		CW -lang c++
diff --git a/build.symbian/null_audioU.def b/build.symbian/null_audioU.def
new file mode 100644
index 0000000..883d5d8
--- /dev/null
+++ b/build.symbian/null_audioU.def
@@ -0,0 +1,12 @@
+EXPORTS
+	pjmedia_snd_deinit                       @ 1 NONAME
+	pjmedia_snd_get_dev_count                @ 2 NONAME
+	pjmedia_snd_get_dev_info                 @ 3 NONAME
+	pjmedia_snd_init                         @ 4 NONAME
+	pjmedia_snd_open                         @ 5 NONAME
+	pjmedia_snd_open_player                  @ 6 NONAME
+	pjmedia_snd_open_rec                     @ 7 NONAME
+	pjmedia_snd_stream_close                 @ 8 NONAME
+	pjmedia_snd_stream_get_info              @ 9 NONAME
+	pjmedia_snd_stream_start                 @ 10 NONAME
+	pjmedia_snd_stream_stop                  @ 11 NONAME
diff --git a/build.symbian/pjlibU.def b/build.symbian/pjlibU.def
index 45439ca..40d0a32 100644
--- a/build.symbian/pjlibU.def
+++ b/build.symbian/pjlibU.def
@@ -4,289 +4,293 @@
 	PJ_FD_ISSET                              @ 3 NONAME
 	PJ_FD_SET                                @ 4 NONAME
 	PJ_FD_ZERO                               @ 5 NONAME
-	PJ_VERSION                               @ 6 NONAME
-	pj_AF_INET                               @ 7 NONAME
-	pj_AF_INET6                              @ 8 NONAME
-	pj_AF_IRDA                               @ 9 NONAME
-	pj_AF_PACKET                             @ 10 NONAME
-	pj_AF_UNIX                               @ 11 NONAME
-	pj_IPTOS_LOWDELAY                        @ 12 NONAME
-	pj_IPTOS_MINCOST                         @ 13 NONAME
-	pj_IPTOS_RELIABILITY                     @ 14 NONAME
-	pj_IPTOS_THROUGHPUT                      @ 15 NONAME
-	pj_IP_TOS                                @ 16 NONAME
-	pj_MSG_DONTROUTE                         @ 17 NONAME
-	pj_MSG_OOB                               @ 18 NONAME
-	pj_MSG_PEEK                              @ 19 NONAME
-	pj_SOCK_DGRAM                            @ 20 NONAME
-	pj_SOCK_RAW                              @ 21 NONAME
-	pj_SOCK_RDM                              @ 22 NONAME
-	pj_SOCK_STREAM                           @ 23 NONAME
-	pj_SOL_IP                                @ 24 NONAME
-	pj_SOL_IPV6                              @ 25 NONAME
-	pj_SOL_SOCKET                            @ 26 NONAME
-	pj_SOL_TCP                               @ 27 NONAME
-	pj_SOL_UDP                               @ 28 NONAME
-	pj_SO_RCVBUF                             @ 29 NONAME
-	pj_SO_SNDBUF                             @ 30 NONAME
-	pj_SO_TYPE                               @ 31 NONAME
-	pj_ansi_to_unicode                       @ 32 NONAME
-	pj_array_erase                           @ 33 NONAME
-	pj_array_find                            @ 34 NONAME
-	pj_array_insert                          @ 35 NONAME
-	pj_atexit                                @ 36 NONAME
-	pj_atomic_add                            @ 37 NONAME
-	pj_atomic_add_and_get                    @ 38 NONAME
-	pj_atomic_create                         @ 39 NONAME
-	pj_atomic_dec                            @ 40 NONAME
-	pj_atomic_dec_and_get                    @ 41 NONAME
-	pj_atomic_destroy                        @ 42 NONAME
-	pj_atomic_get                            @ 43 NONAME
-	pj_atomic_inc                            @ 44 NONAME
-	pj_atomic_inc_and_get                    @ 45 NONAME
-	pj_atomic_set                            @ 46 NONAME
-	pj_caching_pool_destroy                  @ 47 NONAME
-	pj_caching_pool_init                     @ 48 NONAME
-	pj_create_random_string                  @ 49 NONAME
-	pj_create_unique_string                  @ 50 NONAME
-	pj_dump_config                           @ 51 NONAME
-	pj_elapsed_cycle                         @ 52 NONAME
-	pj_elapsed_msec                          @ 53 NONAME
-	pj_elapsed_nanosec                       @ 54 NONAME
-	pj_elapsed_time                          @ 55 NONAME
-	pj_elapsed_usec                          @ 56 NONAME
-	pj_enter_critical_section                @ 57 NONAME
-	pj_enum_ip_interface                     @ 58 NONAME
-	pj_enum_ip_route                         @ 59 NONAME
-	pj_exception_id_alloc                    @ 60 NONAME
-	pj_exception_id_free                     @ 61 NONAME
-	pj_exception_id_name                     @ 62 NONAME
-	pj_fifobuf_alloc                         @ 63 NONAME
-	pj_fifobuf_free                          @ 64 NONAME
-	pj_fifobuf_init                          @ 65 NONAME
-	pj_fifobuf_max_size                      @ 66 NONAME
-	pj_fifobuf_unalloc                       @ 67 NONAME
-	pj_file_close                            @ 68 NONAME
-	pj_file_delete                           @ 69 NONAME
-	pj_file_exists                           @ 70 NONAME
-	pj_file_flush                            @ 71 NONAME
-	pj_file_getpos                           @ 72 NONAME
-	pj_file_getstat                          @ 73 NONAME
-	pj_file_move                             @ 74 NONAME
-	pj_file_open                             @ 75 NONAME
-	pj_file_read                             @ 76 NONAME
-	pj_file_setpos                           @ 77 NONAME
-	pj_file_size                             @ 78 NONAME
-	pj_file_write                            @ 79 NONAME
-	pj_generate_unique_string                @ 80 NONAME
-	pj_get_netos_error                       @ 81 NONAME
-	pj_get_os_error                          @ 82 NONAME
-	pj_get_timestamp                         @ 83 NONAME
-	pj_get_timestamp_freq                    @ 84 NONAME
-	pj_get_version                           @ 85 NONAME
-	pj_gethostaddr                           @ 86 NONAME
-	pj_gethostbyname                         @ 87 NONAME
-	pj_gethostip                             @ 88 NONAME
-	pj_gethostname                           @ 89 NONAME
-	pj_getpid                                @ 90 NONAME
-	pj_gettimeofday                          @ 91 NONAME
-	pj_hash_calc                             @ 92 NONAME
-	pj_hash_calc_tolower                     @ 93 NONAME
-	pj_hash_count                            @ 94 NONAME
-	pj_hash_create                           @ 95 NONAME
-	pj_hash_first                            @ 96 NONAME
-	pj_hash_get                              @ 97 NONAME
-	pj_hash_next                             @ 98 NONAME
-	pj_hash_set                              @ 99 NONAME
-	pj_hash_set_np                           @ 100 NONAME
-	pj_hash_this                             @ 101 NONAME
-	pj_htonl                                 @ 102 NONAME
-	pj_htons                                 @ 103 NONAME
-	pj_inet_addr                             @ 104 NONAME
-	pj_inet_addr2                            @ 105 NONAME
-	pj_inet_aton                             @ 106 NONAME
-	pj_inet_ntoa                             @ 107 NONAME
-	pj_init                                  @ 108 NONAME
-	pj_ioqueue_accept                        @ 109 NONAME
-	pj_ioqueue_connect                       @ 110 NONAME
-	pj_ioqueue_create                        @ 111 NONAME
-	pj_ioqueue_destroy                       @ 112 NONAME
-	pj_ioqueue_get_user_data                 @ 113 NONAME
-	pj_ioqueue_is_pending                    @ 114 NONAME
-	pj_ioqueue_name                          @ 115 NONAME
-	pj_ioqueue_op_key_init                   @ 116 NONAME
-	pj_ioqueue_poll                          @ 117 NONAME
-	pj_ioqueue_post_completion               @ 118 NONAME
-	pj_ioqueue_recv                          @ 119 NONAME
-	pj_ioqueue_recvfrom                      @ 120 NONAME
-	pj_ioqueue_register_sock                 @ 121 NONAME
-	pj_ioqueue_send                          @ 122 NONAME
-	pj_ioqueue_sendto                        @ 123 NONAME
-	pj_ioqueue_set_lock                      @ 124 NONAME
-	pj_ioqueue_set_user_data                 @ 125 NONAME
-	pj_ioqueue_unregister                    @ 126 NONAME
-	pj_leave_critical_section                @ 127 NONAME
-	pj_list_erase                            @ 128 NONAME
-	pj_list_find_node                        @ 129 NONAME
-	pj_list_insert_after                     @ 130 NONAME
-	pj_list_insert_before                    @ 131 NONAME
-	pj_list_insert_nodes_after               @ 132 NONAME
-	pj_list_insert_nodes_before              @ 133 NONAME
-	pj_list_merge_first                      @ 134 NONAME
-	pj_list_merge_last                       @ 135 NONAME
-	pj_list_search                           @ 136 NONAME
-	pj_list_size                             @ 137 NONAME
-	pj_lock_acquire                          @ 138 NONAME
-	pj_lock_create_null_mutex                @ 139 NONAME
-	pj_lock_create_recursive_mutex           @ 140 NONAME
-	pj_lock_create_semaphore                 @ 141 NONAME
-	pj_lock_create_simple_mutex              @ 142 NONAME
-	pj_lock_destroy                          @ 143 NONAME
-	pj_lock_release                          @ 144 NONAME
-	pj_lock_tryacquire                       @ 145 NONAME
-	pj_log                                   @ 146 NONAME
-	pj_log_1                                 @ 147 NONAME
-	pj_log_2                                 @ 148 NONAME
-	pj_log_3                                 @ 149 NONAME
-	pj_log_4                                 @ 150 NONAME
-	pj_log_5                                 @ 151 NONAME
-	pj_log_get_decor                         @ 152 NONAME
-	pj_log_get_level                         @ 153 NONAME
-	pj_log_get_log_func                      @ 154 NONAME
-	pj_log_set_decor                         @ 155 NONAME
-	pj_log_set_level                         @ 156 NONAME
-	pj_log_set_log_func                      @ 157 NONAME
-	pj_log_write                             @ 158 NONAME
-	pj_mutex_create                          @ 159 NONAME
-	pj_mutex_create_recursive                @ 160 NONAME
-	pj_mutex_create_simple                   @ 161 NONAME
-	pj_mutex_destroy                         @ 162 NONAME
-	pj_mutex_lock                            @ 163 NONAME
-	pj_mutex_trylock                         @ 164 NONAME
-	pj_mutex_unlock                          @ 165 NONAME
-	pj_ntohl                                 @ 166 NONAME
-	pj_ntohs                                 @ 167 NONAME
-	pj_pool_alloc                            @ 168 NONAME
-	pj_pool_alloc_from_block                 @ 169 NONAME
-	pj_pool_allocate_find                    @ 170 NONAME
-	pj_pool_calloc                           @ 171 NONAME
-	pj_pool_create                           @ 172 NONAME
-	pj_pool_create_int                       @ 173 NONAME
-	pj_pool_create_on_buf                    @ 174 NONAME
-	pj_pool_destroy_int                      @ 175 NONAME
-	pj_pool_factory_default_policy           @ 176 NONAME
-	pj_pool_factory_get_default_policy       @ 177 NONAME
-	pj_pool_get_capacity                     @ 178 NONAME
-	pj_pool_get_used_size                    @ 179 NONAME
-	pj_pool_getobjname                       @ 180 NONAME
-	pj_pool_init_int                         @ 181 NONAME
-	pj_pool_release                          @ 182 NONAME
-	pj_pool_reset                            @ 183 NONAME
-	pj_rand                                  @ 184 NONAME
-	pj_rbtree_erase                          @ 185 NONAME
-	pj_rbtree_find                           @ 186 NONAME
-	pj_rbtree_first                          @ 187 NONAME
-	pj_rbtree_init                           @ 188 NONAME
-	pj_rbtree_insert                         @ 189 NONAME
-	pj_rbtree_last                           @ 190 NONAME
-	pj_rbtree_max_height                     @ 191 NONAME
-	pj_rbtree_min_height                     @ 192 NONAME
-	pj_rbtree_next                           @ 193 NONAME
-	pj_rbtree_prev                           @ 194 NONAME
-	pj_register_strerror                     @ 195 NONAME
-	pj_rwmutex_create                        @ 196 NONAME
-	pj_rwmutex_destroy                       @ 197 NONAME
-	pj_rwmutex_lock_read                     @ 198 NONAME
-	pj_rwmutex_lock_write                    @ 199 NONAME
-	pj_rwmutex_unlock_read                   @ 200 NONAME
-	pj_rwmutex_unlock_write                  @ 201 NONAME
-	pj_sem_create                            @ 202 NONAME
-	pj_sem_destroy                           @ 203 NONAME
-	pj_sem_post                              @ 204 NONAME
-	pj_sem_trywait                           @ 205 NONAME
-	pj_sem_wait                              @ 206 NONAME
-	pj_set_netos_error                       @ 207 NONAME
-	pj_set_os_error                          @ 208 NONAME
-	pj_shutdown                              @ 209 NONAME
-	pj_sock_accept                           @ 210 NONAME
-	pj_sock_bind                             @ 211 NONAME
-	pj_sock_bind_in                          @ 212 NONAME
-	pj_sock_close                            @ 213 NONAME
-	pj_sock_connect                          @ 214 NONAME
-	pj_sock_getpeername                      @ 215 NONAME
-	pj_sock_getsockname                      @ 216 NONAME
-	pj_sock_getsockopt                       @ 217 NONAME
-	pj_sock_listen                           @ 218 NONAME
-	pj_sock_recv                             @ 219 NONAME
-	pj_sock_recvfrom                         @ 220 NONAME
-	pj_sock_select                           @ 221 NONAME
-	pj_sock_send                             @ 222 NONAME
-	pj_sock_sendto                           @ 223 NONAME
-	pj_sock_setsockopt                       @ 224 NONAME
-	pj_sock_shutdown                         @ 225 NONAME
-	pj_sock_socket                           @ 226 NONAME
-	pj_sockaddr_in_init                      @ 227 NONAME
-	pj_sockaddr_in_set_str_addr              @ 228 NONAME
-	pj_srand                                 @ 229 NONAME
-	pj_str                                   @ 230 NONAME
-	pj_strassign                             @ 231 NONAME
-	pj_strcat                                @ 232 NONAME
-	pj_strcat2                               @ 233 NONAME
-	pj_strcmp                                @ 234 NONAME
-	pj_strcmp2                               @ 235 NONAME
-	pj_strcpy                                @ 236 NONAME
-	pj_strcpy2                               @ 237 NONAME
-	pj_strdup                                @ 238 NONAME
-	pj_strdup2                               @ 239 NONAME
-	pj_strdup2_with_null                     @ 240 NONAME
-	pj_strdup3                               @ 241 NONAME
-	pj_strdup_with_null                      @ 242 NONAME
-	pj_strerror                              @ 243 NONAME
-	pj_stricmp                               @ 244 NONAME
-	pj_stricmp2                              @ 245 NONAME
-	pj_strltrim                              @ 246 NONAME
-	pj_strncmp                               @ 247 NONAME
-	pj_strncmp2                              @ 248 NONAME
-	pj_strncpy                               @ 249 NONAME
-	pj_strncpy_with_null                     @ 250 NONAME
-	pj_strnicmp                              @ 251 NONAME
-	pj_strnicmp2                             @ 252 NONAME
-	pj_strrtrim                              @ 253 NONAME
-	pj_strtoul                               @ 254 NONAME
-	pj_strtoul2                              @ 255 NONAME
-	pj_strtrim                               @ 256 NONAME
-	pj_symbianos_poll                        @ 257 NONAME
-	pj_thread_create                         @ 258 NONAME
-	pj_thread_destroy                        @ 259 NONAME
-	pj_thread_get_name                       @ 260 NONAME
-	pj_thread_join                           @ 261 NONAME
-	pj_thread_local_alloc                    @ 262 NONAME
-	pj_thread_local_free                     @ 263 NONAME
-	pj_thread_local_get                      @ 264 NONAME
-	pj_thread_local_set                      @ 265 NONAME
-	pj_thread_register                       @ 266 NONAME
-	pj_thread_resume                         @ 267 NONAME
-	pj_thread_sleep                          @ 268 NONAME
-	pj_thread_this                           @ 269 NONAME
-	pj_time_decode                           @ 270 NONAME
-	pj_time_encode                           @ 271 NONAME
-	pj_time_gmt_to_local                     @ 272 NONAME
-	pj_time_local_to_gmt                     @ 273 NONAME
-	pj_time_val_normalize                    @ 274 NONAME
-	pj_timer_entry_init                      @ 275 NONAME
-	pj_timer_heap_cancel                     @ 276 NONAME
-	pj_timer_heap_count                      @ 277 NONAME
-	pj_timer_heap_create                     @ 278 NONAME
-	pj_timer_heap_destroy                    @ 279 NONAME
-	pj_timer_heap_earliest_time              @ 280 NONAME
-	pj_timer_heap_mem_size                   @ 281 NONAME
-	pj_timer_heap_poll                       @ 282 NONAME
-	pj_timer_heap_schedule                   @ 283 NONAME
-	pj_timer_heap_set_lock                   @ 284 NONAME
-	pj_timer_heap_set_max_timed_out_per_poll @ 285 NONAME
-	pj_unicode_to_ansi                       @ 286 NONAME
-	pj_utoa                                  @ 287 NONAME
-	pj_utoa_pad                              @ 288 NONAME
-	platform_strerror                        @ 289 NONAME
-	snprintf                                 @ 290 NONAME
-	vsnprintf                                @ 291 NONAME
+	PJ_GUID_STRING_LENGTH                    @ 6 NONAME
+	PJ_NO_MEMORY_EXCEPTION                   @ 7 NONAME
+	PJ_VERSION                               @ 8 NONAME
+	pj_AF_INET                               @ 9 NONAME
+	pj_AF_INET6                              @ 10 NONAME
+	pj_AF_IRDA                               @ 11 NONAME
+	pj_AF_PACKET                             @ 12 NONAME
+	pj_AF_UNIX                               @ 13 NONAME
+	pj_GUID_STRING_LENGTH                    @ 14 NONAME
+	pj_IPTOS_LOWDELAY                        @ 15 NONAME
+	pj_IPTOS_MINCOST                         @ 16 NONAME
+	pj_IPTOS_RELIABILITY                     @ 17 NONAME
+	pj_IPTOS_THROUGHPUT                      @ 18 NONAME
+	pj_IP_TOS                                @ 19 NONAME
+	pj_MSG_DONTROUTE                         @ 20 NONAME
+	pj_MSG_OOB                               @ 21 NONAME
+	pj_MSG_PEEK                              @ 22 NONAME
+	pj_NO_MEMORY_EXCEPTION                   @ 23 NONAME
+	pj_SOCK_DGRAM                            @ 24 NONAME
+	pj_SOCK_RAW                              @ 25 NONAME
+	pj_SOCK_RDM                              @ 26 NONAME
+	pj_SOCK_STREAM                           @ 27 NONAME
+	pj_SOL_IP                                @ 28 NONAME
+	pj_SOL_IPV6                              @ 29 NONAME
+	pj_SOL_SOCKET                            @ 30 NONAME
+	pj_SOL_TCP                               @ 31 NONAME
+	pj_SOL_UDP                               @ 32 NONAME
+	pj_SO_RCVBUF                             @ 33 NONAME
+	pj_SO_SNDBUF                             @ 34 NONAME
+	pj_SO_TYPE                               @ 35 NONAME
+	pj_ansi_to_unicode                       @ 36 NONAME
+	pj_array_erase                           @ 37 NONAME
+	pj_array_find                            @ 38 NONAME
+	pj_array_insert                          @ 39 NONAME
+	pj_atexit                                @ 40 NONAME
+	pj_atomic_add                            @ 41 NONAME
+	pj_atomic_add_and_get                    @ 42 NONAME
+	pj_atomic_create                         @ 43 NONAME
+	pj_atomic_dec                            @ 44 NONAME
+	pj_atomic_dec_and_get                    @ 45 NONAME
+	pj_atomic_destroy                        @ 46 NONAME
+	pj_atomic_get                            @ 47 NONAME
+	pj_atomic_inc                            @ 48 NONAME
+	pj_atomic_inc_and_get                    @ 49 NONAME
+	pj_atomic_set                            @ 50 NONAME
+	pj_caching_pool_destroy                  @ 51 NONAME
+	pj_caching_pool_init                     @ 52 NONAME
+	pj_create_random_string                  @ 53 NONAME
+	pj_create_unique_string                  @ 54 NONAME
+	pj_dump_config                           @ 55 NONAME
+	pj_elapsed_cycle                         @ 56 NONAME
+	pj_elapsed_msec                          @ 57 NONAME
+	pj_elapsed_nanosec                       @ 58 NONAME
+	pj_elapsed_time                          @ 59 NONAME
+	pj_elapsed_usec                          @ 60 NONAME
+	pj_enter_critical_section                @ 61 NONAME
+	pj_enum_ip_interface                     @ 62 NONAME
+	pj_enum_ip_route                         @ 63 NONAME
+	pj_exception_id_alloc                    @ 64 NONAME
+	pj_exception_id_free                     @ 65 NONAME
+	pj_exception_id_name                     @ 66 NONAME
+	pj_fifobuf_alloc                         @ 67 NONAME
+	pj_fifobuf_free                          @ 68 NONAME
+	pj_fifobuf_init                          @ 69 NONAME
+	pj_fifobuf_max_size                      @ 70 NONAME
+	pj_fifobuf_unalloc                       @ 71 NONAME
+	pj_file_close                            @ 72 NONAME
+	pj_file_delete                           @ 73 NONAME
+	pj_file_exists                           @ 74 NONAME
+	pj_file_flush                            @ 75 NONAME
+	pj_file_getpos                           @ 76 NONAME
+	pj_file_getstat                          @ 77 NONAME
+	pj_file_move                             @ 78 NONAME
+	pj_file_open                             @ 79 NONAME
+	pj_file_read                             @ 80 NONAME
+	pj_file_setpos                           @ 81 NONAME
+	pj_file_size                             @ 82 NONAME
+	pj_file_write                            @ 83 NONAME
+	pj_generate_unique_string                @ 84 NONAME
+	pj_get_netos_error                       @ 85 NONAME
+	pj_get_os_error                          @ 86 NONAME
+	pj_get_timestamp                         @ 87 NONAME
+	pj_get_timestamp_freq                    @ 88 NONAME
+	pj_get_version                           @ 89 NONAME
+	pj_gethostaddr                           @ 90 NONAME
+	pj_gethostbyname                         @ 91 NONAME
+	pj_gethostip                             @ 92 NONAME
+	pj_gethostname                           @ 93 NONAME
+	pj_getpid                                @ 94 NONAME
+	pj_gettimeofday                          @ 95 NONAME
+	pj_hash_calc                             @ 96 NONAME
+	pj_hash_calc_tolower                     @ 97 NONAME
+	pj_hash_count                            @ 98 NONAME
+	pj_hash_create                           @ 99 NONAME
+	pj_hash_first                            @ 100 NONAME
+	pj_hash_get                              @ 101 NONAME
+	pj_hash_next                             @ 102 NONAME
+	pj_hash_set                              @ 103 NONAME
+	pj_hash_set_np                           @ 104 NONAME
+	pj_hash_this                             @ 105 NONAME
+	pj_htonl                                 @ 106 NONAME
+	pj_htons                                 @ 107 NONAME
+	pj_inet_addr                             @ 108 NONAME
+	pj_inet_addr2                            @ 109 NONAME
+	pj_inet_aton                             @ 110 NONAME
+	pj_inet_ntoa                             @ 111 NONAME
+	pj_init                                  @ 112 NONAME
+	pj_ioqueue_accept                        @ 113 NONAME
+	pj_ioqueue_connect                       @ 114 NONAME
+	pj_ioqueue_create                        @ 115 NONAME
+	pj_ioqueue_destroy                       @ 116 NONAME
+	pj_ioqueue_get_user_data                 @ 117 NONAME
+	pj_ioqueue_is_pending                    @ 118 NONAME
+	pj_ioqueue_name                          @ 119 NONAME
+	pj_ioqueue_op_key_init                   @ 120 NONAME
+	pj_ioqueue_poll                          @ 121 NONAME
+	pj_ioqueue_post_completion               @ 122 NONAME
+	pj_ioqueue_recv                          @ 123 NONAME
+	pj_ioqueue_recvfrom                      @ 124 NONAME
+	pj_ioqueue_register_sock                 @ 125 NONAME
+	pj_ioqueue_send                          @ 126 NONAME
+	pj_ioqueue_sendto                        @ 127 NONAME
+	pj_ioqueue_set_lock                      @ 128 NONAME
+	pj_ioqueue_set_user_data                 @ 129 NONAME
+	pj_ioqueue_unregister                    @ 130 NONAME
+	pj_leave_critical_section                @ 131 NONAME
+	pj_list_erase                            @ 132 NONAME
+	pj_list_find_node                        @ 133 NONAME
+	pj_list_insert_after                     @ 134 NONAME
+	pj_list_insert_before                    @ 135 NONAME
+	pj_list_insert_nodes_after               @ 136 NONAME
+	pj_list_insert_nodes_before              @ 137 NONAME
+	pj_list_merge_first                      @ 138 NONAME
+	pj_list_merge_last                       @ 139 NONAME
+	pj_list_search                           @ 140 NONAME
+	pj_list_size                             @ 141 NONAME
+	pj_lock_acquire                          @ 142 NONAME
+	pj_lock_create_null_mutex                @ 143 NONAME
+	pj_lock_create_recursive_mutex           @ 144 NONAME
+	pj_lock_create_semaphore                 @ 145 NONAME
+	pj_lock_create_simple_mutex              @ 146 NONAME
+	pj_lock_destroy                          @ 147 NONAME
+	pj_lock_release                          @ 148 NONAME
+	pj_lock_tryacquire                       @ 149 NONAME
+	pj_log                                   @ 150 NONAME
+	pj_log_1                                 @ 151 NONAME
+	pj_log_2                                 @ 152 NONAME
+	pj_log_3                                 @ 153 NONAME
+	pj_log_4                                 @ 154 NONAME
+	pj_log_5                                 @ 155 NONAME
+	pj_log_get_decor                         @ 156 NONAME
+	pj_log_get_level                         @ 157 NONAME
+	pj_log_get_log_func                      @ 158 NONAME
+	pj_log_set_decor                         @ 159 NONAME
+	pj_log_set_level                         @ 160 NONAME
+	pj_log_set_log_func                      @ 161 NONAME
+	pj_log_write                             @ 162 NONAME
+	pj_mutex_create                          @ 163 NONAME
+	pj_mutex_create_recursive                @ 164 NONAME
+	pj_mutex_create_simple                   @ 165 NONAME
+	pj_mutex_destroy                         @ 166 NONAME
+	pj_mutex_lock                            @ 167 NONAME
+	pj_mutex_trylock                         @ 168 NONAME
+	pj_mutex_unlock                          @ 169 NONAME
+	pj_ntohl                                 @ 170 NONAME
+	pj_ntohs                                 @ 171 NONAME
+	pj_pool_alloc                            @ 172 NONAME
+	pj_pool_alloc_from_block                 @ 173 NONAME
+	pj_pool_allocate_find                    @ 174 NONAME
+	pj_pool_calloc                           @ 175 NONAME
+	pj_pool_create                           @ 176 NONAME
+	pj_pool_create_int                       @ 177 NONAME
+	pj_pool_create_on_buf                    @ 178 NONAME
+	pj_pool_destroy_int                      @ 179 NONAME
+	pj_pool_factory_default_policy           @ 180 NONAME
+	pj_pool_factory_get_default_policy       @ 181 NONAME
+	pj_pool_get_capacity                     @ 182 NONAME
+	pj_pool_get_used_size                    @ 183 NONAME
+	pj_pool_getobjname                       @ 184 NONAME
+	pj_pool_init_int                         @ 185 NONAME
+	pj_pool_release                          @ 186 NONAME
+	pj_pool_reset                            @ 187 NONAME
+	pj_rand                                  @ 188 NONAME
+	pj_rbtree_erase                          @ 189 NONAME
+	pj_rbtree_find                           @ 190 NONAME
+	pj_rbtree_first                          @ 191 NONAME
+	pj_rbtree_init                           @ 192 NONAME
+	pj_rbtree_insert                         @ 193 NONAME
+	pj_rbtree_last                           @ 194 NONAME
+	pj_rbtree_max_height                     @ 195 NONAME
+	pj_rbtree_min_height                     @ 196 NONAME
+	pj_rbtree_next                           @ 197 NONAME
+	pj_rbtree_prev                           @ 198 NONAME
+	pj_register_strerror                     @ 199 NONAME
+	pj_rwmutex_create                        @ 200 NONAME
+	pj_rwmutex_destroy                       @ 201 NONAME
+	pj_rwmutex_lock_read                     @ 202 NONAME
+	pj_rwmutex_lock_write                    @ 203 NONAME
+	pj_rwmutex_unlock_read                   @ 204 NONAME
+	pj_rwmutex_unlock_write                  @ 205 NONAME
+	pj_sem_create                            @ 206 NONAME
+	pj_sem_destroy                           @ 207 NONAME
+	pj_sem_post                              @ 208 NONAME
+	pj_sem_trywait                           @ 209 NONAME
+	pj_sem_wait                              @ 210 NONAME
+	pj_set_netos_error                       @ 211 NONAME
+	pj_set_os_error                          @ 212 NONAME
+	pj_shutdown                              @ 213 NONAME
+	pj_sock_accept                           @ 214 NONAME
+	pj_sock_bind                             @ 215 NONAME
+	pj_sock_bind_in                          @ 216 NONAME
+	pj_sock_close                            @ 217 NONAME
+	pj_sock_connect                          @ 218 NONAME
+	pj_sock_getpeername                      @ 219 NONAME
+	pj_sock_getsockname                      @ 220 NONAME
+	pj_sock_getsockopt                       @ 221 NONAME
+	pj_sock_listen                           @ 222 NONAME
+	pj_sock_recv                             @ 223 NONAME
+	pj_sock_recvfrom                         @ 224 NONAME
+	pj_sock_select                           @ 225 NONAME
+	pj_sock_send                             @ 226 NONAME
+	pj_sock_sendto                           @ 227 NONAME
+	pj_sock_setsockopt                       @ 228 NONAME
+	pj_sock_shutdown                         @ 229 NONAME
+	pj_sock_socket                           @ 230 NONAME
+	pj_sockaddr_in_init                      @ 231 NONAME
+	pj_sockaddr_in_set_str_addr              @ 232 NONAME
+	pj_srand                                 @ 233 NONAME
+	pj_str                                   @ 234 NONAME
+	pj_strassign                             @ 235 NONAME
+	pj_strcat                                @ 236 NONAME
+	pj_strcat2                               @ 237 NONAME
+	pj_strcmp                                @ 238 NONAME
+	pj_strcmp2                               @ 239 NONAME
+	pj_strcpy                                @ 240 NONAME
+	pj_strcpy2                               @ 241 NONAME
+	pj_strdup                                @ 242 NONAME
+	pj_strdup2                               @ 243 NONAME
+	pj_strdup2_with_null                     @ 244 NONAME
+	pj_strdup3                               @ 245 NONAME
+	pj_strdup_with_null                      @ 246 NONAME
+	pj_strerror                              @ 247 NONAME
+	pj_stricmp                               @ 248 NONAME
+	pj_stricmp2                              @ 249 NONAME
+	pj_strltrim                              @ 250 NONAME
+	pj_strncmp                               @ 251 NONAME
+	pj_strncmp2                              @ 252 NONAME
+	pj_strncpy                               @ 253 NONAME
+	pj_strncpy_with_null                     @ 254 NONAME
+	pj_strnicmp                              @ 255 NONAME
+	pj_strnicmp2                             @ 256 NONAME
+	pj_strrtrim                              @ 257 NONAME
+	pj_strtoul                               @ 258 NONAME
+	pj_strtoul2                              @ 259 NONAME
+	pj_strtrim                               @ 260 NONAME
+	pj_symbianos_poll                        @ 261 NONAME
+	pj_thread_create                         @ 262 NONAME
+	pj_thread_destroy                        @ 263 NONAME
+	pj_thread_get_name                       @ 264 NONAME
+	pj_thread_join                           @ 265 NONAME
+	pj_thread_local_alloc                    @ 266 NONAME
+	pj_thread_local_free                     @ 267 NONAME
+	pj_thread_local_get                      @ 268 NONAME
+	pj_thread_local_set                      @ 269 NONAME
+	pj_thread_register                       @ 270 NONAME
+	pj_thread_resume                         @ 271 NONAME
+	pj_thread_sleep                          @ 272 NONAME
+	pj_thread_this                           @ 273 NONAME
+	pj_time_decode                           @ 274 NONAME
+	pj_time_encode                           @ 275 NONAME
+	pj_time_gmt_to_local                     @ 276 NONAME
+	pj_time_local_to_gmt                     @ 277 NONAME
+	pj_time_val_normalize                    @ 278 NONAME
+	pj_timer_entry_init                      @ 279 NONAME
+	pj_timer_heap_cancel                     @ 280 NONAME
+	pj_timer_heap_count                      @ 281 NONAME
+	pj_timer_heap_create                     @ 282 NONAME
+	pj_timer_heap_destroy                    @ 283 NONAME
+	pj_timer_heap_earliest_time              @ 284 NONAME
+	pj_timer_heap_mem_size                   @ 285 NONAME
+	pj_timer_heap_poll                       @ 286 NONAME
+	pj_timer_heap_schedule                   @ 287 NONAME
+	pj_timer_heap_set_lock                   @ 288 NONAME
+	pj_timer_heap_set_max_timed_out_per_poll @ 289 NONAME
+	pj_unicode_to_ansi                       @ 290 NONAME
+	pj_utoa                                  @ 291 NONAME
+	pj_utoa_pad                              @ 292 NONAME
+	platform_strerror                        @ 293 NONAME
+	snprintf                                 @ 294 NONAME
+	vsnprintf                                @ 295 NONAME
diff --git a/build.symbian/pjmedia.mmp b/build.symbian/pjmedia.mmp
index 4534a45..a8bab26 100644
--- a/build.symbian/pjmedia.mmp
+++ b/build.symbian/pjmedia.mmp
@@ -1,8 +1,24 @@
+#if defined(EKA2)
+
+TARGET		pjmedia.dll
+TARGETTYPE	dll
+UID		0x1000008d 0xA0004295
+CAPABILITY	None
+LIBRARY		null_audio.lib pjsdp.lib pjnath.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\pjmedia.def
+
+#else
+
 TARGET 		pjmedia.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjmedia\src\pjmedia
 
 //OPTION		CW -lang c++
@@ -37,10 +53,7 @@
 SOURCE		resample_resample.c
 SOURCE		rtcp.c
 SOURCE		rtp.c
-//SDP files are in pjsdp.mmp
-//SOURCE		sdp.c
-//SOURCE		sdp_cmp.c
-//SOURCE		sdp_neg.c
+//SDP files are in pjsdp.mmp: sdp.c, sdp_cmp.c, sdp_neg.c
 SOURCE		session.c
 SOURCE		silencedet.c
 SOURCE		sound_port.c
@@ -76,5 +89,4 @@
 SYSTEMINCLUDE	\epoc32\include\libc
 //SYSTEMINCLUDE	\epoc32\include\mmf\plugin
 
-CAPABILITY	None
 
diff --git a/build.symbian/pjmediaU.def b/build.symbian/pjmediaU.def
new file mode 100644
index 0000000..df314c5
--- /dev/null
+++ b/build.symbian/pjmediaU.def
@@ -0,0 +1,186 @@
+EXPORTS
+	echo_supp_cancel_echo                    @ 1 NONAME
+	echo_supp_capture                        @ 2 NONAME
+	echo_supp_create                         @ 3 NONAME
+	echo_supp_destroy                        @ 4 NONAME
+	echo_supp_playback                       @ 5 NONAME
+	pjmedia_bidirectional_port_create        @ 6 NONAME
+	pjmedia_calc_avg_signal                  @ 7 NONAME
+	pjmedia_clock_create                     @ 8 NONAME
+	pjmedia_clock_destroy                    @ 9 NONAME
+	pjmedia_clock_start                      @ 10 NONAME
+	pjmedia_clock_stop                       @ 11 NONAME
+	pjmedia_clock_wait                       @ 12 NONAME
+	pjmedia_codec_g711_deinit                @ 13 NONAME
+	pjmedia_codec_g711_init                  @ 14 NONAME
+	pjmedia_codec_info_to_id                 @ 15 NONAME
+	pjmedia_codec_mgr_alloc_codec            @ 16 NONAME
+	pjmedia_codec_mgr_dealloc_codec          @ 17 NONAME
+	pjmedia_codec_mgr_enum_codecs            @ 18 NONAME
+	pjmedia_codec_mgr_find_codecs_by_id      @ 19 NONAME
+	pjmedia_codec_mgr_get_codec_info         @ 20 NONAME
+	pjmedia_codec_mgr_get_default_param      @ 21 NONAME
+	pjmedia_codec_mgr_init                   @ 22 NONAME
+	pjmedia_codec_mgr_register_factory       @ 23 NONAME
+	pjmedia_codec_mgr_set_codec_priority     @ 24 NONAME
+	pjmedia_codec_mgr_unregister_factory     @ 25 NONAME
+	pjmedia_conf_add_passive_port            @ 26 NONAME
+	pjmedia_conf_add_port                    @ 27 NONAME
+	pjmedia_conf_adjust_rx_level             @ 28 NONAME
+	pjmedia_conf_adjust_tx_level             @ 29 NONAME
+	pjmedia_conf_configure_port              @ 30 NONAME
+	pjmedia_conf_connect_port                @ 31 NONAME
+	pjmedia_conf_create                      @ 32 NONAME
+	pjmedia_conf_destroy                     @ 33 NONAME
+	pjmedia_conf_disconnect_port             @ 34 NONAME
+	pjmedia_conf_enum_ports                  @ 35 NONAME
+	pjmedia_conf_get_connect_count           @ 36 NONAME
+	pjmedia_conf_get_master_port             @ 37 NONAME
+	pjmedia_conf_get_port_count              @ 38 NONAME
+	pjmedia_conf_get_port_info               @ 39 NONAME
+	pjmedia_conf_get_ports_info              @ 40 NONAME
+	pjmedia_conf_get_signal_level            @ 41 NONAME
+	pjmedia_conf_remove_port                 @ 42 NONAME
+	pjmedia_conf_set_port0_name              @ 43 NONAME
+	pjmedia_echo_cancel                      @ 44 NONAME
+	pjmedia_echo_capture                     @ 45 NONAME
+	pjmedia_echo_create                      @ 46 NONAME
+	pjmedia_echo_destroy                     @ 47 NONAME
+	pjmedia_echo_playback                    @ 48 NONAME
+	pjmedia_echo_port_create                 @ 49 NONAME
+	pjmedia_endpt_create                     @ 50 NONAME
+	pjmedia_endpt_create_pool                @ 51 NONAME
+	pjmedia_endpt_create_sdp                 @ 52 NONAME
+	pjmedia_endpt_destroy                    @ 53 NONAME
+	pjmedia_endpt_dump                       @ 54 NONAME
+	pjmedia_endpt_get_codec_mgr              @ 55 NONAME
+	pjmedia_endpt_get_ioqueue                @ 56 NONAME
+	pjmedia_ice_create                       @ 57 NONAME
+	pjmedia_ice_destroy                      @ 58 NONAME
+	pjmedia_ice_get_comp                     @ 59 NONAME
+	pjmedia_ice_get_init_status              @ 60 NONAME
+	pjmedia_ice_init_ice                     @ 61 NONAME
+	pjmedia_ice_modify_sdp                   @ 62 NONAME
+	pjmedia_ice_start_ice                    @ 63 NONAME
+	pjmedia_ice_start_init                   @ 64 NONAME
+	pjmedia_ice_stop_ice                     @ 65 NONAME
+	pjmedia_jbuf_create                      @ 66 NONAME
+	pjmedia_jbuf_destroy                     @ 67 NONAME
+	pjmedia_jbuf_get_frame                   @ 68 NONAME
+	pjmedia_jbuf_get_state                   @ 69 NONAME
+	pjmedia_jbuf_put_frame                   @ 70 NONAME
+	pjmedia_jbuf_reset                       @ 71 NONAME
+	pjmedia_jbuf_set_adaptive                @ 72 NONAME
+	pjmedia_jbuf_set_fixed                   @ 73 NONAME
+	pjmedia_master_port_create               @ 74 NONAME
+	pjmedia_master_port_destroy              @ 75 NONAME
+	pjmedia_master_port_get_dport            @ 76 NONAME
+	pjmedia_master_port_get_uport            @ 77 NONAME
+	pjmedia_master_port_set_dport            @ 78 NONAME
+	pjmedia_master_port_set_uport            @ 79 NONAME
+	pjmedia_master_port_start                @ 80 NONAME
+	pjmedia_master_port_stop                 @ 81 NONAME
+	pjmedia_mem_capture_create               @ 82 NONAME
+	pjmedia_mem_capture_get_size             @ 83 NONAME
+	pjmedia_mem_capture_set_eof_cb           @ 84 NONAME
+	pjmedia_mem_player_create                @ 85 NONAME
+	pjmedia_mem_player_set_eof_cb            @ 86 NONAME
+	pjmedia_null_port_create                 @ 87 NONAME
+	pjmedia_plc_create                       @ 88 NONAME
+	pjmedia_plc_generate                     @ 89 NONAME
+	pjmedia_plc_save                         @ 90 NONAME
+	pjmedia_port_destroy                     @ 91 NONAME
+	pjmedia_port_get_frame                   @ 92 NONAME
+	pjmedia_port_info_init                   @ 93 NONAME
+	pjmedia_port_put_frame                   @ 94 NONAME
+	pjmedia_resample_create                  @ 95 NONAME
+	pjmedia_resample_destroy                 @ 96 NONAME
+	pjmedia_resample_get_input_size          @ 97 NONAME
+	pjmedia_resample_port_create             @ 98 NONAME
+	pjmedia_resample_run                     @ 99 NONAME
+	pjmedia_rtcp_build_rtcp                  @ 100 NONAME
+	pjmedia_rtcp_fini                        @ 101 NONAME
+	pjmedia_rtcp_get_ntp_time                @ 102 NONAME
+	pjmedia_rtcp_init                        @ 103 NONAME
+	pjmedia_rtcp_rx_rtcp                     @ 104 NONAME
+	pjmedia_rtcp_rx_rtp                      @ 105 NONAME
+	pjmedia_rtcp_tx_rtp                      @ 106 NONAME
+	pjmedia_rtp_decode_rtp                   @ 107 NONAME
+	pjmedia_rtp_encode_rtp                   @ 108 NONAME
+	pjmedia_rtp_session_init                 @ 109 NONAME
+	pjmedia_rtp_session_update               @ 110 NONAME
+	pjmedia_session_check_dtmf               @ 111 NONAME
+	pjmedia_session_create                   @ 112 NONAME
+	pjmedia_session_destroy                  @ 113 NONAME
+	pjmedia_session_dial_dtmf                @ 114 NONAME
+	pjmedia_session_enum_streams             @ 115 NONAME
+	pjmedia_session_get_dtmf                 @ 116 NONAME
+	pjmedia_session_get_info                 @ 117 NONAME
+	pjmedia_session_get_port                 @ 118 NONAME
+	pjmedia_session_get_stream_stat          @ 119 NONAME
+	pjmedia_session_info_from_sdp            @ 120 NONAME
+	pjmedia_session_pause                    @ 121 NONAME
+	pjmedia_session_pause_stream             @ 122 NONAME
+	pjmedia_session_resume                   @ 123 NONAME
+	pjmedia_session_resume_stream            @ 124 NONAME
+	pjmedia_session_set_dtmf_callback        @ 125 NONAME
+	pjmedia_silence_det_apply                @ 126 NONAME
+	pjmedia_silence_det_create               @ 127 NONAME
+	pjmedia_silence_det_detect               @ 128 NONAME
+	pjmedia_silence_det_disable              @ 129 NONAME
+	pjmedia_silence_det_set_adaptive         @ 130 NONAME
+	pjmedia_silence_det_set_fixed            @ 131 NONAME
+	pjmedia_silence_det_set_name             @ 132 NONAME
+	pjmedia_silence_det_set_params           @ 133 NONAME
+	pjmedia_snd_port_connect                 @ 134 NONAME
+	pjmedia_snd_port_create                  @ 135 NONAME
+	pjmedia_snd_port_create_player           @ 136 NONAME
+	pjmedia_snd_port_create_rec              @ 137 NONAME
+	pjmedia_snd_port_destroy                 @ 138 NONAME
+	pjmedia_snd_port_disconnect              @ 139 NONAME
+	pjmedia_snd_port_get_ec_tail             @ 140 NONAME
+	pjmedia_snd_port_get_port                @ 141 NONAME
+	pjmedia_snd_port_get_snd_stream          @ 142 NONAME
+	pjmedia_snd_port_set_ec                  @ 143 NONAME
+	pjmedia_splitcomb_create                 @ 144 NONAME
+	pjmedia_splitcomb_create_rev_channel     @ 145 NONAME
+	pjmedia_splitcomb_set_channel            @ 146 NONAME
+	pjmedia_stream_check_dtmf                @ 147 NONAME
+	pjmedia_stream_create                    @ 148 NONAME
+	pjmedia_stream_destroy                   @ 149 NONAME
+	pjmedia_stream_dial_dtmf                 @ 150 NONAME
+	pjmedia_stream_get_dtmf                  @ 151 NONAME
+	pjmedia_stream_get_port                  @ 152 NONAME
+	pjmedia_stream_get_stat                  @ 153 NONAME
+	pjmedia_stream_get_transport             @ 154 NONAME
+	pjmedia_stream_info_from_sdp             @ 155 NONAME
+	pjmedia_stream_pause                     @ 156 NONAME
+	pjmedia_stream_resume                    @ 157 NONAME
+	pjmedia_stream_set_dtmf_callback         @ 158 NONAME
+	pjmedia_stream_start                     @ 159 NONAME
+	pjmedia_strerror                         @ 160 NONAME
+	pjmedia_tonegen_create                   @ 161 NONAME
+	pjmedia_tonegen_create2                  @ 162 NONAME
+	pjmedia_tonegen_get_digit_map            @ 163 NONAME
+	pjmedia_tonegen_is_busy                  @ 164 NONAME
+	pjmedia_tonegen_play                     @ 165 NONAME
+	pjmedia_tonegen_play_digits              @ 166 NONAME
+	pjmedia_tonegen_set_digit_map            @ 167 NONAME
+	pjmedia_tonegen_stop                     @ 168 NONAME
+	pjmedia_transport_udp_attach             @ 169 NONAME
+	pjmedia_transport_udp_close              @ 170 NONAME
+	pjmedia_transport_udp_create             @ 171 NONAME
+	pjmedia_transport_udp_create2            @ 172 NONAME
+	pjmedia_transport_udp_get_info           @ 173 NONAME
+	pjmedia_transport_udp_simulate_lost      @ 174 NONAME
+	pjmedia_wav_player_port_create           @ 175 NONAME
+	pjmedia_wav_player_port_get_pos          @ 176 NONAME
+	pjmedia_wav_player_port_set_pos          @ 177 NONAME
+	pjmedia_wav_player_set_eof_cb            @ 178 NONAME
+	pjmedia_wav_playlist_create              @ 179 NONAME
+	pjmedia_wav_playlist_set_eof_cb          @ 180 NONAME
+	pjmedia_wav_writer_port_create           @ 181 NONAME
+	pjmedia_wav_writer_port_get_pos          @ 182 NONAME
+	pjmedia_wav_writer_port_set_cb           @ 183 NONAME
+	pjmedia_wave_hdr_file_to_host            @ 184 NONAME
+	pjmedia_wave_hdr_host_to_file            @ 185 NONAME
diff --git a/build.symbian/pjproject.cww b/build.symbian/pjproject.cww
index 445369f..bf5fb93 100644
--- a/build.symbian/pjproject.cww
+++ b/build.symbian/pjproject.cww
@@ -54,7 +54,7 @@
             <COLUMN>0</COLUMN>

             <DOCKBARID>59420</DOCKBARID>

             <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

+            <HGT>274</HGT>

             <GROUPID>

                 <GIDHIGHPART>4294967294</GIDHIGHPART>

                 <GIDLOWPART>4294967294</GIDLOWPART>

@@ -79,7 +79,7 @@
             <COLUMN>0</COLUMN>

             <DOCKBARID>59420</DOCKBARID>

             <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

+            <HGT>274</HGT>

             <GROUPID>

                 <GIDHIGHPART>4294967294</GIDHIGHPART>

                 <GIDLOWPART>4294967294</GIDLOWPART>

@@ -104,132 +104,7 @@
             <COLUMN>0</COLUMN>

             <DOCKBARID>59420</DOCKBARID>

             <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

-            <GROUPID>

-                <GIDHIGHPART>4294967294</GIDHIGHPART>

-                <GIDLOWPART>4294967294</GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-1</SESSION>

-        <EDOCTYPE>0</EDOCTYPE>

-        <PATH USERELATIVEPATHS = "true">pjmedia.mcp</PATH>

-        <FRAMELOC>

-            <X>0</X>

-            <Y>0</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>347</W>

-            <H>128</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>1</STATUS>

-            <ROW>0</ROW>

-            <COLUMN>0</COLUMN>

-            <DOCKBARID>59420</DOCKBARID>

-            <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

-            <GROUPID>

-                <GIDHIGHPART>4294967294</GIDHIGHPART>

-                <GIDLOWPART>4294967294</GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-1</SESSION>

-        <EDOCTYPE>0</EDOCTYPE>

-        <PATH USERELATIVEPATHS = "true">pjsip.mcp</PATH>

-        <FRAMELOC>

-            <X>0</X>

-            <Y>0</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>347</W>

-            <H>128</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>1</STATUS>

-            <ROW>0</ROW>

-            <COLUMN>0</COLUMN>

-            <DOCKBARID>59420</DOCKBARID>

-            <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

-            <GROUPID>

-                <GIDHIGHPART>4294967294</GIDHIGHPART>

-                <GIDLOWPART>4294967294</GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-1</SESSION>

-        <EDOCTYPE>0</EDOCTYPE>

-        <PATH USERELATIVEPATHS = "true">pjsip_ua.mcp</PATH>

-        <FRAMELOC>

-            <X>548</X>

-            <Y>123</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>400</W>

-            <H>372</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>1</STATUS>

-            <ROW>0</ROW>

-            <COLUMN>0</COLUMN>

-            <DOCKBARID>59420</DOCKBARID>

-            <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

-            <GROUPID>

-                <GIDHIGHPART>4294967294</GIDHIGHPART>

-                <GIDLOWPART>4294967294</GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-1</SESSION>

-        <EDOCTYPE>0</EDOCTYPE>

-        <PATH USERELATIVEPATHS = "true">pjsip_simple.mcp</PATH>

-        <FRAMELOC>

-            <X>0</X>

-            <Y>0</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>347</W>

-            <H>128</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>1</STATUS>

-            <ROW>0</ROW>

-            <COLUMN>0</COLUMN>

-            <DOCKBARID>59420</DOCKBARID>

-            <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

-            <GROUPID>

-                <GIDHIGHPART>4294967294</GIDHIGHPART>

-                <GIDLOWPART>4294967294</GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-1</SESSION>

-        <EDOCTYPE>0</EDOCTYPE>

-        <PATH USERELATIVEPATHS = "true">pjsua_lib.mcp</PATH>

-        <FRAMELOC>

-            <X>634</X>

-            <Y>231</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>347</W>

-            <H>128</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>1</STATUS>

-            <ROW>0</ROW>

-            <COLUMN>0</COLUMN>

-            <DOCKBARID>59420</DOCKBARID>

-            <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

+            <HGT>274</HGT>

             <GROUPID>

                 <GIDHIGHPART>4294967294</GIDHIGHPART>

                 <GIDLOWPART>4294967294</GIDLOWPART>

@@ -254,7 +129,157 @@
             <COLUMN>0</COLUMN>

             <DOCKBARID>59420</DOCKBARID>

             <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjmedia.mcp</PATH>

+        <FRAMELOC>

+            <X>0</X>

+            <Y>0</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>347</W>

+            <H>128</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjsdp.mcp</PATH>

+        <FRAMELOC>

+            <X>0</X>

+            <Y>0</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>347</W>

+            <H>128</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjsip.mcp</PATH>

+        <FRAMELOC>

+            <X>0</X>

+            <Y>0</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>347</W>

+            <H>128</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjsip_simple.mcp</PATH>

+        <FRAMELOC>

+            <X>0</X>

+            <Y>0</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>347</W>

+            <H>128</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjsip_ua.mcp</PATH>

+        <FRAMELOC>

+            <X>548</X>

+            <Y>123</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>400</W>

+            <H>372</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

+            <GROUPID>

+                <GIDHIGHPART>4294967294</GIDHIGHPART>

+                <GIDLOWPART>4294967294</GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>0</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">pjsua_lib.mcp</PATH>

+        <FRAMELOC>

+            <X>634</X>

+            <Y>231</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>347</W>

+            <H>128</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>1</STATUS>

+            <ROW>0</ROW>

+            <COLUMN>0</COLUMN>

+            <DOCKBARID>59420</DOCKBARID>

+            <PCTWIDTH>1.000000</PCTWIDTH>

+            <HGT>274</HGT>

             <GROUPID>

                 <GIDHIGHPART>4294967294</GIDHIGHPART>

                 <GIDLOWPART>4294967294</GIDLOWPART>

@@ -279,83 +304,11 @@
             <COLUMN>0</COLUMN>

             <DOCKBARID>59420</DOCKBARID>

             <PCTWIDTH>1.000000</PCTWIDTH>

-            <HGT>294</HGT>

+            <HGT>274</HGT>

             <GROUPID>

                 <GIDHIGHPART>4294967294</GIDHIGHPART>

                 <GIDLOWPART>4294967294</GIDLOWPART>

             </GROUPID>

         </DOCKINFO>

     </WINDOW>

-    <WINDOW>

-        <SESSION>-2147483648</SESSION>

-        <EDOCTYPE>36</EDOCTYPE>

-        <FRAMELOC>

-            <X>4</X>

-            <Y>23</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>534</W>

-            <H>921</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>0</STATUS>

-            <ROW></ROW>

-            <COLUMN></COLUMN>

-            <DOCKBARID></DOCKBARID>

-            <PCTWIDTH></PCTWIDTH>

-            <HGT></HGT>

-            <GROUPID>

-                <GIDHIGHPART></GIDHIGHPART>

-                <GIDLOWPART></GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-2147483648</SESSION>

-        <EDOCTYPE>20</EDOCTYPE>

-        <FRAMELOC>

-            <X>4</X>

-            <Y>23</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>1008</W>

-            <H>2142</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>0</STATUS>

-            <ROW></ROW>

-            <COLUMN></COLUMN>

-            <DOCKBARID></DOCKBARID>

-            <PCTWIDTH></PCTWIDTH>

-            <HGT></HGT>

-            <GROUPID>

-                <GIDHIGHPART></GIDHIGHPART>

-                <GIDLOWPART></GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

-    <WINDOW>

-        <SESSION>-2147483648</SESSION>

-        <EDOCTYPE>23</EDOCTYPE>

-        <FRAMELOC>

-            <X>6</X>

-            <Y>81</Y>

-        </FRAMELOC>

-        <FRAMESIZE>

-            <W>566</W>

-            <H>477</H>

-        </FRAMESIZE>

-        <DOCKINFO>

-            <STATUS>0</STATUS>

-            <ROW></ROW>

-            <COLUMN></COLUMN>

-            <DOCKBARID></DOCKBARID>

-            <PCTWIDTH></PCTWIDTH>

-            <HGT></HGT>

-            <GROUPID>

-                <GIDHIGHPART></GIDHIGHPART>

-                <GIDLOWPART></GIDLOWPART>

-            </GROUPID>

-        </DOCKINFO>

-    </WINDOW>

 </MWIDEWORKSPACE>

diff --git a/build.symbian/pjsdp.mmp b/build.symbian/pjsdp.mmp
index 3ff46f1..3d5e4d5 100644
--- a/build.symbian/pjsdp.mmp
+++ b/build.symbian/pjsdp.mmp
@@ -1,8 +1,23 @@
+#if defined(EKA2)
+TARGET		pjsdp.dll
+TARGETTYPE	dll
+UID		0x1000008d 0xA0004296
+CAPABILITY	None
+LIBRARY		pjlib_util.lib pjlib.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\pjsdp.def
+
+#else
+
 TARGET 		pjsdp.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjmedia\src\pjmedia
 
 OPTION		CW -lang c++
diff --git a/build.symbian/pjsdpU.def b/build.symbian/pjsdpU.def
new file mode 100644
index 0000000..569193d
--- /dev/null
+++ b/build.symbian/pjsdpU.def
@@ -0,0 +1,45 @@
+EXPORTS
+	pjmedia_sdp_attr_add                     @ 1 NONAME
+	pjmedia_sdp_attr_clone                   @ 2 NONAME
+	pjmedia_sdp_attr_create                  @ 3 NONAME
+	pjmedia_sdp_attr_find                    @ 4 NONAME
+	pjmedia_sdp_attr_find2                   @ 5 NONAME
+	pjmedia_sdp_attr_get_fmtp                @ 6 NONAME
+	pjmedia_sdp_attr_get_rtcp                @ 7 NONAME
+	pjmedia_sdp_attr_get_rtpmap              @ 8 NONAME
+	pjmedia_sdp_attr_remove                  @ 9 NONAME
+	pjmedia_sdp_attr_remove_all              @ 10 NONAME
+	pjmedia_sdp_attr_to_rtpmap               @ 11 NONAME
+	pjmedia_sdp_conn_clone                   @ 12 NONAME
+	pjmedia_sdp_media_add_attr               @ 13 NONAME
+	pjmedia_sdp_media_clone                  @ 14 NONAME
+	pjmedia_sdp_media_cmp                    @ 15 NONAME
+	pjmedia_sdp_media_find_attr              @ 16 NONAME
+	pjmedia_sdp_media_find_attr2             @ 17 NONAME
+	pjmedia_sdp_media_remove_all_attr        @ 18 NONAME
+	pjmedia_sdp_media_remove_attr            @ 19 NONAME
+	pjmedia_sdp_neg_cancel_offer             @ 20 NONAME
+	pjmedia_sdp_neg_create_w_local_offer     @ 21 NONAME
+	pjmedia_sdp_neg_create_w_remote_offer    @ 22 NONAME
+	pjmedia_sdp_neg_get_active_local         @ 23 NONAME
+	pjmedia_sdp_neg_get_active_remote        @ 24 NONAME
+	pjmedia_sdp_neg_get_neg_local            @ 25 NONAME
+	pjmedia_sdp_neg_get_neg_remote           @ 26 NONAME
+	pjmedia_sdp_neg_get_state                @ 27 NONAME
+	pjmedia_sdp_neg_has_local_answer         @ 28 NONAME
+	pjmedia_sdp_neg_modify_local_offer       @ 29 NONAME
+	pjmedia_sdp_neg_negotiate                @ 30 NONAME
+	pjmedia_sdp_neg_send_local_offer         @ 31 NONAME
+	pjmedia_sdp_neg_set_local_answer         @ 32 NONAME
+	pjmedia_sdp_neg_set_prefer_remote_codec_order @ 33 NONAME
+	pjmedia_sdp_neg_set_remote_answer        @ 34 NONAME
+	pjmedia_sdp_neg_set_remote_offer         @ 35 NONAME
+	pjmedia_sdp_neg_state_str                @ 36 NONAME
+	pjmedia_sdp_neg_was_answer_remote        @ 37 NONAME
+	pjmedia_sdp_parse                        @ 38 NONAME
+	pjmedia_sdp_print                        @ 39 NONAME
+	pjmedia_sdp_rtpmap_to_attr               @ 40 NONAME
+	pjmedia_sdp_session_clone                @ 41 NONAME
+	pjmedia_sdp_session_cmp                  @ 42 NONAME
+	pjmedia_sdp_validate                     @ 43 NONAME
+	pjmedia_strerror                         @ 44 NONAME
diff --git a/build.symbian/pjsip.mmp b/build.symbian/pjsip.mmp
index cabb74b..efaf9bd 100644
--- a/build.symbian/pjsip.mmp
+++ b/build.symbian/pjsip.mmp
@@ -1,8 +1,26 @@
+#if defined(EKA2)
+
+TARGET		pjsip.dll
+TARGETTYPE	dll
+
+UID		0x1000008d 0xA0004293
+
+CAPABILITY	None
+LIBRARY		pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\pjsip.def
+
+#else
+
 TARGET 		pjsip.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjsip\src\pjsip
 
 MACRO		PJ_M_I386=1
@@ -43,5 +61,4 @@
 SYSTEMINCLUDE	\epoc32\include
 SYSTEMINCLUDE	\epoc32\include\libc
 
-CAPABILITY	None
 
diff --git a/build.symbian/pjsipU.def b/build.symbian/pjsipU.def
new file mode 100644
index 0000000..57b0eca
--- /dev/null
+++ b/build.symbian/pjsipU.def
@@ -0,0 +1,269 @@
+EXPORTS
+	pjsip_accept_hdr_create                  @ 1 NONAME
+	pjsip_accept_hdr_init                    @ 2 NONAME
+	pjsip_ack_method                         @ 3 NONAME
+	pjsip_allow_hdr_create                   @ 4 NONAME
+	pjsip_allow_hdr_init                     @ 5 NONAME
+	pjsip_auth_clt_clone                     @ 6 NONAME
+	pjsip_auth_clt_init                      @ 7 NONAME
+	pjsip_auth_clt_init_req                  @ 8 NONAME
+	pjsip_auth_clt_reinit_req                @ 9 NONAME
+	pjsip_auth_clt_set_credentials           @ 10 NONAME
+	pjsip_auth_deinit_parser                 @ 11 NONAME
+	pjsip_auth_init_parser                   @ 12 NONAME
+	pjsip_auth_srv_challenge                 @ 13 NONAME
+	pjsip_auth_srv_init                      @ 14 NONAME
+	pjsip_auth_srv_verify                    @ 15 NONAME
+	pjsip_authorization_hdr_create           @ 16 NONAME
+	pjsip_bye_method                         @ 17 NONAME
+	pjsip_calculate_branch_id                @ 18 NONAME
+	pjsip_cancel_method                      @ 19 NONAME
+	pjsip_cid_hdr_create                     @ 20 NONAME
+	pjsip_cid_hdr_init                       @ 21 NONAME
+	pjsip_clen_hdr_create                    @ 22 NONAME
+	pjsip_clen_hdr_init                      @ 23 NONAME
+	pjsip_clone_text_data                    @ 24 NONAME
+	pjsip_concat_param_imp                   @ 25 NONAME
+	pjsip_contact_hdr_create                 @ 26 NONAME
+	pjsip_contact_hdr_init                   @ 27 NONAME
+	pjsip_cseq_hdr_create                    @ 28 NONAME
+	pjsip_cseq_hdr_init                      @ 29 NONAME
+	pjsip_ctype_hdr_create                   @ 30 NONAME
+	pjsip_ctype_hdr_init                     @ 31 NONAME
+	pjsip_dlg_add_usage                      @ 32 NONAME
+	pjsip_dlg_create_request                 @ 33 NONAME
+	pjsip_dlg_create_response                @ 34 NONAME
+	pjsip_dlg_create_uac                     @ 35 NONAME
+	pjsip_dlg_create_uas                     @ 36 NONAME
+	pjsip_dlg_dec_lock                       @ 37 NONAME
+	pjsip_dlg_dec_session                    @ 38 NONAME
+	pjsip_dlg_fork                           @ 39 NONAME
+	pjsip_dlg_get_mod_data                   @ 40 NONAME
+	pjsip_dlg_inc_lock                       @ 41 NONAME
+	pjsip_dlg_inc_session                    @ 42 NONAME
+	pjsip_dlg_modify_response                @ 43 NONAME
+	pjsip_dlg_respond                        @ 44 NONAME
+	pjsip_dlg_send_request                   @ 45 NONAME
+	pjsip_dlg_send_response                  @ 46 NONAME
+	pjsip_dlg_set_mod_data                   @ 47 NONAME
+	pjsip_dlg_set_route_set                  @ 48 NONAME
+	pjsip_dlg_set_transport                  @ 49 NONAME
+	pjsip_dlg_terminate                      @ 50 NONAME
+	pjsip_dlg_try_inc_lock                   @ 51 NONAME
+	pjsip_endpt_acquire_transport            @ 52 NONAME
+	pjsip_endpt_add_capability               @ 53 NONAME
+	pjsip_endpt_cancel_timer                 @ 54 NONAME
+	pjsip_endpt_create                       @ 55 NONAME
+	pjsip_endpt_create_ack                   @ 56 NONAME
+	pjsip_endpt_create_cancel                @ 57 NONAME
+	pjsip_endpt_create_pool                  @ 58 NONAME
+	pjsip_endpt_create_request               @ 59 NONAME
+	pjsip_endpt_create_request_from_hdr      @ 60 NONAME
+	pjsip_endpt_create_request_fwd           @ 61 NONAME
+	pjsip_endpt_create_resolver              @ 62 NONAME
+	pjsip_endpt_create_response              @ 63 NONAME
+	pjsip_endpt_create_response_fwd          @ 64 NONAME
+	pjsip_endpt_create_tdata                 @ 65 NONAME
+	pjsip_endpt_destroy                      @ 66 NONAME
+	pjsip_endpt_dump                         @ 67 NONAME
+	pjsip_endpt_get_capability               @ 68 NONAME
+	pjsip_endpt_get_ioqueue                  @ 69 NONAME
+	pjsip_endpt_get_request_headers          @ 70 NONAME
+	pjsip_endpt_get_resolver                 @ 71 NONAME
+	pjsip_endpt_get_timer_heap               @ 72 NONAME
+	pjsip_endpt_get_tpmgr                    @ 73 NONAME
+	pjsip_endpt_handle_events                @ 74 NONAME
+	pjsip_endpt_handle_events2               @ 75 NONAME
+	pjsip_endpt_has_capability               @ 76 NONAME
+	pjsip_endpt_log_error                    @ 77 NONAME
+	pjsip_endpt_name                         @ 78 NONAME
+	pjsip_endpt_register_module              @ 79 NONAME
+	pjsip_endpt_release_pool                 @ 80 NONAME
+	pjsip_endpt_resolve                      @ 81 NONAME
+	pjsip_endpt_respond                      @ 82 NONAME
+	pjsip_endpt_respond_stateless            @ 83 NONAME
+	pjsip_endpt_schedule_timer               @ 84 NONAME
+	pjsip_endpt_send_raw                     @ 85 NONAME
+	pjsip_endpt_send_raw_to_uri              @ 86 NONAME
+	pjsip_endpt_send_request                 @ 87 NONAME
+	pjsip_endpt_send_request_stateless       @ 88 NONAME
+	pjsip_endpt_send_response                @ 89 NONAME
+	pjsip_endpt_send_response2               @ 90 NONAME
+	pjsip_endpt_set_resolver                 @ 91 NONAME
+	pjsip_endpt_unregister_module            @ 92 NONAME
+	pjsip_event_str                          @ 93 NONAME
+	pjsip_expires_hdr_create                 @ 94 NONAME
+	pjsip_expires_hdr_init                   @ 95 NONAME
+	pjsip_find_msg                           @ 96 NONAME
+	pjsip_from_hdr_create                    @ 97 NONAME
+	pjsip_from_hdr_init                      @ 98 NONAME
+	pjsip_fromto_hdr_set_from                @ 99 NONAME
+	pjsip_fromto_hdr_set_to                  @ 100 NONAME
+	pjsip_generic_array_hdr_create           @ 101 NONAME
+	pjsip_generic_array_hdr_init             @ 102 NONAME
+	pjsip_generic_int_hdr_create             @ 103 NONAME
+	pjsip_generic_int_hdr_init               @ 104 NONAME
+	pjsip_generic_string_hdr_create          @ 105 NONAME
+	pjsip_generic_string_hdr_init            @ 106 NONAME
+	pjsip_generic_string_hdr_init2           @ 107 NONAME
+	pjsip_get_ack_method                     @ 108 NONAME
+	pjsip_get_bye_method                     @ 109 NONAME
+	pjsip_get_cancel_method                  @ 110 NONAME
+	pjsip_get_invite_method                  @ 111 NONAME
+	pjsip_get_options_method                 @ 112 NONAME
+	pjsip_get_register_method                @ 113 NONAME
+	pjsip_get_request_dest                   @ 114 NONAME
+	pjsip_get_response_addr                  @ 115 NONAME
+	pjsip_get_status_text                    @ 116 NONAME
+	pjsip_hdr_clone                          @ 117 NONAME
+	pjsip_hdr_print_on                       @ 118 NONAME
+	pjsip_hdr_shallow_clone                  @ 119 NONAME
+	pjsip_invite_method                      @ 120 NONAME
+	pjsip_loop_set_delay                     @ 121 NONAME
+	pjsip_loop_set_discard                   @ 122 NONAME
+	pjsip_loop_set_failure                   @ 123 NONAME
+	pjsip_loop_set_recv_delay                @ 124 NONAME
+	pjsip_loop_set_send_callback_delay       @ 125 NONAME
+	pjsip_loop_start                         @ 126 NONAME
+	pjsip_max_fwd_hdr_create                 @ 127 NONAME
+	pjsip_max_fwd_hdr_init                   @ 128 NONAME
+	pjsip_method_cmp                         @ 129 NONAME
+	pjsip_method_copy                        @ 130 NONAME
+	pjsip_method_creates_dialog              @ 131 NONAME
+	pjsip_method_init                        @ 132 NONAME
+	pjsip_method_init_np                     @ 133 NONAME
+	pjsip_method_set                         @ 134 NONAME
+	pjsip_min_expires_hdr_create             @ 135 NONAME
+	pjsip_min_expires_hdr_init               @ 136 NONAME
+	pjsip_msg_body_clone                     @ 137 NONAME
+	pjsip_msg_body_copy                      @ 138 NONAME
+	pjsip_msg_body_create                    @ 139 NONAME
+	pjsip_msg_clone                          @ 140 NONAME
+	pjsip_msg_create                         @ 141 NONAME
+	pjsip_msg_find_hdr                       @ 142 NONAME
+	pjsip_msg_find_hdr_by_name               @ 143 NONAME
+	pjsip_msg_find_remove_hdr                @ 144 NONAME
+	pjsip_msg_print                          @ 145 NONAME
+	pjsip_name_addr_assign                   @ 146 NONAME
+	pjsip_name_addr_create                   @ 147 NONAME
+	pjsip_name_addr_init                     @ 148 NONAME
+	pjsip_options_method                     @ 149 NONAME
+	pjsip_param_cfind                        @ 150 NONAME
+	pjsip_param_clone                        @ 151 NONAME
+	pjsip_param_find                         @ 152 NONAME
+	pjsip_param_print_on                     @ 153 NONAME
+	pjsip_param_shallow_clone                @ 154 NONAME
+	pjsip_parse_end_hdr_imp                  @ 155 NONAME
+	pjsip_parse_hdr                          @ 156 NONAME
+	pjsip_parse_msg                          @ 157 NONAME
+	pjsip_parse_param_imp                    @ 158 NONAME
+	pjsip_parse_rdata                        @ 159 NONAME
+	pjsip_parse_status_line                  @ 160 NONAME
+	pjsip_parse_uri                          @ 161 NONAME
+	pjsip_parse_uri_param_imp                @ 162 NONAME
+	pjsip_parser_const                       @ 163 NONAME
+	pjsip_print_text_body                    @ 164 NONAME
+	pjsip_process_route_set                  @ 165 NONAME
+	pjsip_proxy_authenticate_hdr_create      @ 166 NONAME
+	pjsip_proxy_authorization_hdr_create     @ 167 NONAME
+	pjsip_rdata_get_dlg                      @ 168 NONAME
+	pjsip_rdata_get_tsx                      @ 169 NONAME
+	pjsip_register_hdr_parser                @ 170 NONAME
+	pjsip_register_method                    @ 171 NONAME
+	pjsip_register_uri_parser                @ 172 NONAME
+	pjsip_require_hdr_create                 @ 173 NONAME
+	pjsip_require_hdr_init                   @ 174 NONAME
+	pjsip_resolve                            @ 175 NONAME
+	pjsip_resolver_create                    @ 176 NONAME
+	pjsip_resolver_destroy                   @ 177 NONAME
+	pjsip_resolver_get_resolver              @ 178 NONAME
+	pjsip_resolver_set_resolver              @ 179 NONAME
+	pjsip_retry_after_hdr_create             @ 180 NONAME
+	pjsip_retry_after_hdr_init               @ 181 NONAME
+	pjsip_role_name                          @ 182 NONAME
+	pjsip_route_hdr_create                   @ 183 NONAME
+	pjsip_route_hdr_init                     @ 184 NONAME
+	pjsip_routing_hdr_set_route              @ 185 NONAME
+	pjsip_routing_hdr_set_rr                 @ 186 NONAME
+	pjsip_rr_hdr_create                      @ 187 NONAME
+	pjsip_rr_hdr_init                        @ 188 NONAME
+	pjsip_rx_data_get_info                   @ 189 NONAME
+	pjsip_sip_uri_assign                     @ 190 NONAME
+	pjsip_sip_uri_create                     @ 191 NONAME
+	pjsip_sip_uri_init                       @ 192 NONAME
+	pjsip_sip_uri_set_secure                 @ 193 NONAME
+	pjsip_strerror                           @ 194 NONAME
+	pjsip_supported_hdr_create               @ 195 NONAME
+	pjsip_supported_hdr_init                 @ 196 NONAME
+	pjsip_tcp_transport_start                @ 197 NONAME
+	pjsip_tcp_transport_start2               @ 198 NONAME
+	pjsip_tel_nb_cmp                         @ 199 NONAME
+	pjsip_tel_uri_create                     @ 200 NONAME
+	pjsip_to_hdr_create                      @ 201 NONAME
+	pjsip_to_hdr_init                        @ 202 NONAME
+	pjsip_tpmgr_acquire_transport            @ 203 NONAME
+	pjsip_tpmgr_create                       @ 204 NONAME
+	pjsip_tpmgr_destroy                      @ 205 NONAME
+	pjsip_tpmgr_dump_transports              @ 206 NONAME
+	pjsip_tpmgr_find_local_addr              @ 207 NONAME
+	pjsip_tpmgr_get_transport_count          @ 208 NONAME
+	pjsip_tpmgr_receive_packet               @ 209 NONAME
+	pjsip_tpmgr_register_tpfactory           @ 210 NONAME
+	pjsip_tpmgr_send_raw                     @ 211 NONAME
+	pjsip_tpmgr_unregister_tpfactory         @ 212 NONAME
+	pjsip_tpselector_add_ref                 @ 213 NONAME
+	pjsip_tpselector_dec_ref                 @ 214 NONAME
+	pjsip_transport_add_ref                  @ 215 NONAME
+	pjsip_transport_dec_ref                  @ 216 NONAME
+	pjsip_transport_destroy                  @ 217 NONAME
+	pjsip_transport_get_default_port_for_type @ 218 NONAME
+	pjsip_transport_get_flag_from_type       @ 219 NONAME
+	pjsip_transport_get_type_from_flag       @ 220 NONAME
+	pjsip_transport_get_type_from_name       @ 221 NONAME
+	pjsip_transport_get_type_name            @ 222 NONAME
+	pjsip_transport_register                 @ 223 NONAME
+	pjsip_transport_register_type            @ 224 NONAME
+	pjsip_transport_send                     @ 225 NONAME
+	pjsip_transport_shutdown                 @ 226 NONAME
+	pjsip_tsx_create_key                     @ 227 NONAME
+	pjsip_tsx_create_uac                     @ 228 NONAME
+	pjsip_tsx_create_uas                     @ 229 NONAME
+	pjsip_tsx_get_dlg                        @ 230 NONAME
+	pjsip_tsx_layer_destroy                  @ 231 NONAME
+	pjsip_tsx_layer_dump                     @ 232 NONAME
+	pjsip_tsx_layer_find_tsx                 @ 233 NONAME
+	pjsip_tsx_layer_init_module              @ 234 NONAME
+	pjsip_tsx_layer_instance                 @ 235 NONAME
+	pjsip_tsx_recv_msg                       @ 236 NONAME
+	pjsip_tsx_send_msg                       @ 237 NONAME
+	pjsip_tsx_set_transport                  @ 238 NONAME
+	pjsip_tsx_state_str                      @ 239 NONAME
+	pjsip_tsx_stop_retransmit                @ 240 NONAME
+	pjsip_tsx_terminate                      @ 241 NONAME
+	pjsip_tx_data_add_ref                    @ 242 NONAME
+	pjsip_tx_data_create                     @ 243 NONAME
+	pjsip_tx_data_dec_ref                    @ 244 NONAME
+	pjsip_tx_data_get_info                   @ 245 NONAME
+	pjsip_tx_data_invalidate_msg             @ 246 NONAME
+	pjsip_tx_data_is_valid                   @ 247 NONAME
+	pjsip_tx_data_set_transport              @ 248 NONAME
+	pjsip_ua_destroy                         @ 249 NONAME
+	pjsip_ua_dump                            @ 250 NONAME
+	pjsip_ua_find_dialog                     @ 251 NONAME
+	pjsip_ua_get_endpt                       @ 252 NONAME
+	pjsip_ua_init_module                     @ 253 NONAME
+	pjsip_ua_instance                        @ 254 NONAME
+	pjsip_ua_register_dlg                    @ 255 NONAME
+	pjsip_ua_unregister_dlg                  @ 256 NONAME
+	pjsip_udp_transport_attach               @ 257 NONAME
+	pjsip_udp_transport_get_socket           @ 258 NONAME
+	pjsip_udp_transport_pause                @ 259 NONAME
+	pjsip_udp_transport_restart              @ 260 NONAME
+	pjsip_udp_transport_start                @ 261 NONAME
+	pjsip_unsupported_hdr_create             @ 262 NONAME
+	pjsip_unsupported_hdr_init               @ 263 NONAME
+	pjsip_via_hdr_create                     @ 264 NONAME
+	pjsip_via_hdr_init                       @ 265 NONAME
+	pjsip_warning_hdr_create                 @ 266 NONAME
+	pjsip_warning_hdr_create_from_status     @ 267 NONAME
+	pjsip_www_authenticate_hdr_create        @ 268 NONAME
diff --git a/build.symbian/pjsip_simple.mmp b/build.symbian/pjsip_simple.mmp
index f77c5b4..fafbf85 100644
--- a/build.symbian/pjsip_simple.mmp
+++ b/build.symbian/pjsip_simple.mmp
@@ -1,8 +1,26 @@
+#if defined(EKA2)
+
+TARGET		pjsip_simple.dll
+TARGETTYPE	dll
+
+UID		0x1000008d 0xA0004292
+
+CAPABILITY	None
+LIBRARY		pjsip.lib pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\pjsip_simple.def
+
+#else
+
 TARGET 		pjsip_simple.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjsip\src\pjsip-simple
 
 MACRO		PJ_M_I386=1
@@ -32,5 +50,3 @@
 SYSTEMINCLUDE	\epoc32\include
 SYSTEMINCLUDE	\epoc32\include\libc
 
-CAPABILITY	None
-
diff --git a/build.symbian/pjsip_simpleU.def b/build.symbian/pjsip_simpleU.def
new file mode 100644
index 0000000..c3548cf
--- /dev/null
+++ b/build.symbian/pjsip_simpleU.def
@@ -0,0 +1,93 @@
+EXPORTS
+	pjpidf_create                            @ 1 NONAME
+	pjpidf_parse                             @ 2 NONAME
+	pjpidf_pres_add_note                     @ 3 NONAME
+	pjpidf_pres_add_tuple                    @ 4 NONAME
+	pjpidf_pres_construct                    @ 5 NONAME
+	pjpidf_pres_find_tuple                   @ 6 NONAME
+	pjpidf_pres_get_first_note               @ 7 NONAME
+	pjpidf_pres_get_first_tuple              @ 8 NONAME
+	pjpidf_pres_get_next_note                @ 9 NONAME
+	pjpidf_pres_get_next_tuple               @ 10 NONAME
+	pjpidf_pres_remove_tuple                 @ 11 NONAME
+	pjpidf_print                             @ 12 NONAME
+	pjpidf_status_construct                  @ 13 NONAME
+	pjpidf_status_is_basic_open              @ 14 NONAME
+	pjpidf_status_set_basic_open             @ 15 NONAME
+	pjpidf_tuple_add_note                    @ 16 NONAME
+	pjpidf_tuple_construct                   @ 17 NONAME
+	pjpidf_tuple_get_contact                 @ 18 NONAME
+	pjpidf_tuple_get_contact_prio            @ 19 NONAME
+	pjpidf_tuple_get_first_note              @ 20 NONAME
+	pjpidf_tuple_get_id                      @ 21 NONAME
+	pjpidf_tuple_get_next_note               @ 22 NONAME
+	pjpidf_tuple_get_status                  @ 23 NONAME
+	pjpidf_tuple_get_timestamp               @ 24 NONAME
+	pjpidf_tuple_set_contact                 @ 25 NONAME
+	pjpidf_tuple_set_contact_prio            @ 26 NONAME
+	pjpidf_tuple_set_id                      @ 27 NONAME
+	pjpidf_tuple_set_timestamp               @ 28 NONAME
+	pjpidf_tuple_set_timestamp_np            @ 29 NONAME
+	pjsip_allow_events_hdr_create            @ 30 NONAME
+	pjsip_event_hdr_create                   @ 31 NONAME
+	pjsip_evsub_accept                       @ 32 NONAME
+	pjsip_evsub_create_uac                   @ 33 NONAME
+	pjsip_evsub_create_uas                   @ 34 NONAME
+	pjsip_evsub_current_notify               @ 35 NONAME
+	pjsip_evsub_get_allow_events_hdr         @ 36 NONAME
+	pjsip_evsub_get_mod_data                 @ 37 NONAME
+	pjsip_evsub_get_state                    @ 38 NONAME
+	pjsip_evsub_get_state_name               @ 39 NONAME
+	pjsip_evsub_init_module                  @ 40 NONAME
+	pjsip_evsub_init_parser                  @ 41 NONAME
+	pjsip_evsub_initiate                     @ 42 NONAME
+	pjsip_evsub_instance                     @ 43 NONAME
+	pjsip_evsub_notify                       @ 44 NONAME
+	pjsip_evsub_register_pkg                 @ 45 NONAME
+	pjsip_evsub_send_request                 @ 46 NONAME
+	pjsip_evsub_set_mod_data                 @ 47 NONAME
+	pjsip_evsub_terminate                    @ 48 NONAME
+	pjsip_get_notify_method                  @ 49 NONAME
+	pjsip_get_subscribe_method               @ 50 NONAME
+	pjsip_iscomposing_create_body            @ 51 NONAME
+	pjsip_iscomposing_create_xml             @ 52 NONAME
+	pjsip_iscomposing_parse                  @ 53 NONAME
+	pjsip_notify_method                      @ 54 NONAME
+	pjsip_pres_accept                        @ 55 NONAME
+	pjsip_pres_create_pidf                   @ 56 NONAME
+	pjsip_pres_create_uac                    @ 57 NONAME
+	pjsip_pres_create_uas                    @ 58 NONAME
+	pjsip_pres_create_xpidf                  @ 59 NONAME
+	pjsip_pres_current_notify                @ 60 NONAME
+	pjsip_pres_get_status                    @ 61 NONAME
+	pjsip_pres_init_module                   @ 62 NONAME
+	pjsip_pres_initiate                      @ 63 NONAME
+	pjsip_pres_instance                      @ 64 NONAME
+	pjsip_pres_notify                        @ 65 NONAME
+	pjsip_pres_parse_pidf                    @ 66 NONAME
+	pjsip_pres_parse_xpidf                   @ 67 NONAME
+	pjsip_pres_send_request                  @ 68 NONAME
+	pjsip_pres_set_status                    @ 69 NONAME
+	pjsip_pres_terminate                     @ 70 NONAME
+	pjsip_publishc_create                    @ 71 NONAME
+	pjsip_publishc_destroy                   @ 72 NONAME
+	pjsip_publishc_get_pool                  @ 73 NONAME
+	pjsip_publishc_init                      @ 74 NONAME
+	pjsip_publishc_init_module               @ 75 NONAME
+	pjsip_publishc_publish                   @ 76 NONAME
+	pjsip_publishc_send                      @ 77 NONAME
+	pjsip_publishc_set_credentials           @ 78 NONAME
+	pjsip_publishc_set_route_set             @ 79 NONAME
+	pjsip_publishc_unpublish                 @ 80 NONAME
+	pjsip_publishc_update_expires            @ 81 NONAME
+	pjsip_sub_state_hdr_create               @ 82 NONAME
+	pjsip_subscribe_method                   @ 83 NONAME
+	pjsip_tsx_get_evsub                      @ 84 NONAME
+	pjsipsimple_strerror                     @ 85 NONAME
+	pjxpidf_create                           @ 86 NONAME
+	pjxpidf_get_status                       @ 87 NONAME
+	pjxpidf_get_uri                          @ 88 NONAME
+	pjxpidf_parse                            @ 89 NONAME
+	pjxpidf_print                            @ 90 NONAME
+	pjxpidf_set_status                       @ 91 NONAME
+	pjxpidf_set_uri                          @ 92 NONAME
diff --git a/build.symbian/pjsip_ua.mmp b/build.symbian/pjsip_ua.mmp
index 08ab245..3dde4c5 100644
--- a/build.symbian/pjsip_ua.mmp
+++ b/build.symbian/pjsip_ua.mmp
@@ -1,8 +1,26 @@
+#if defined(EKA2)
+
+TARGET		pjsip_ua.dll
+TARGETTYPE	dll
+
+UID		0x1000008d 0xA0004291
+
+CAPABILITY	None
+LIBRARY		pjsip_simple.lib pjsip.lib pjsdp.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib
+MACRO		PJ_DLL
+MACRO		PJ_EXPORTING
+
+DEFFILE		.\pjsip_ua.def
+
+#else
+
 TARGET 		pjsip_ua.lib
 TARGETTYPE 	lib
 UID		0x100039CE 0x10004299
 VENDORID	0x70000001
 
+#endif
+
 SOURCEPATH	..\pjsip\src\pjsip-ua
 
 MACRO		PJ_M_I386=1
@@ -26,5 +44,4 @@
 SYSTEMINCLUDE	\epoc32\include
 SYSTEMINCLUDE	\epoc32\include\libc
 
-CAPABILITY	None
 
diff --git a/build.symbian/pjsip_uaU.def b/build.symbian/pjsip_uaU.def
new file mode 100644
index 0000000..9b7edcc
--- /dev/null
+++ b/build.symbian/pjsip_uaU.def
@@ -0,0 +1,46 @@
+EXPORTS
+	pjsip_create_sdp_body                    @ 1 NONAME
+	pjsip_dlg_get_inv_session                @ 2 NONAME
+	pjsip_get_refer_method                   @ 3 NONAME
+	pjsip_inv_answer                         @ 4 NONAME
+	pjsip_inv_create_uac                     @ 5 NONAME
+	pjsip_inv_create_uas                     @ 6 NONAME
+	pjsip_inv_end_session                    @ 7 NONAME
+	pjsip_inv_initial_answer                 @ 8 NONAME
+	pjsip_inv_invite                         @ 9 NONAME
+	pjsip_inv_reinvite                       @ 10 NONAME
+	pjsip_inv_send_msg                       @ 11 NONAME
+	pjsip_inv_set_sdp_answer                 @ 12 NONAME
+	pjsip_inv_state_name                     @ 13 NONAME
+	pjsip_inv_terminate                      @ 14 NONAME
+	pjsip_inv_update                         @ 15 NONAME
+	pjsip_inv_usage_init                     @ 16 NONAME
+	pjsip_inv_usage_instance                 @ 17 NONAME
+	pjsip_inv_verify_request                 @ 18 NONAME
+	pjsip_refer_method                       @ 19 NONAME
+	pjsip_regc_add_headers                   @ 20 NONAME
+	pjsip_regc_create                        @ 21 NONAME
+	pjsip_regc_destroy                       @ 22 NONAME
+	pjsip_regc_get_info                      @ 23 NONAME
+	pjsip_regc_get_pool                      @ 24 NONAME
+	pjsip_regc_init                          @ 25 NONAME
+	pjsip_regc_register                      @ 26 NONAME
+	pjsip_regc_send                          @ 27 NONAME
+	pjsip_regc_set_credentials               @ 28 NONAME
+	pjsip_regc_set_route_set                 @ 29 NONAME
+	pjsip_regc_set_transport                 @ 30 NONAME
+	pjsip_regc_unregister                    @ 31 NONAME
+	pjsip_regc_unregister_all                @ 32 NONAME
+	pjsip_regc_update_contact                @ 33 NONAME
+	pjsip_regc_update_expires                @ 34 NONAME
+	pjsip_replaces_hdr_create                @ 35 NONAME
+	pjsip_replaces_init_module               @ 36 NONAME
+	pjsip_replaces_verify_request            @ 37 NONAME
+	pjsip_xfer_accept                        @ 38 NONAME
+	pjsip_xfer_create_uac                    @ 39 NONAME
+	pjsip_xfer_create_uas                    @ 40 NONAME
+	pjsip_xfer_current_notify                @ 41 NONAME
+	pjsip_xfer_init_module                   @ 42 NONAME
+	pjsip_xfer_initiate                      @ 43 NONAME
+	pjsip_xfer_notify                        @ 44 NONAME
+	pjsip_xfer_send_request                  @ 45 NONAME
diff --git a/build.symbian/pjsua_lib.mmp b/build.symbian/pjsua_lib.mmp
index 6dc316c..97bc38f 100644
--- a/build.symbian/pjsua_lib.mmp
+++ b/build.symbian/pjsua_lib.mmp
@@ -1,8 +1,26 @@
+#if defined(EKA2)

+

+TARGET		pjsua_lib.dll

+TARGETTYPE	dll

+

+UID		0x1000008d 0xA0004290

+

+CAPABILITY	None

+LIBRARY		pjsip_ua.lib pjsip_simple.lib pjsip.lib pjmedia.lib null_audio.lib pjsdp.lib pjnath.lib pjlib_util.lib pjlib.lib esock.lib insock.lib charconv.lib euser.lib estlib.lib

+MACRO		PJ_DLL

+MACRO		PJ_EXPORTING

+

+DEFFILE		.\pjsua_lib.def

+

+#else

+

 TARGET 		pjsua_lib.lib

 TARGETTYPE 	lib

 UID		0x100039CE 0x10004299

 VENDORID	0x70000001

 

+#endif

+

 SOURCEPATH	..\pjsip\src\pjsua-lib

 

 MACRO		PJ_M_I386=1

@@ -28,5 +46,4 @@
 SYSTEMINCLUDE	\epoc32\include

 SYSTEMINCLUDE	\epoc32\include\libc

 

-CAPABILITY	None

 

diff --git a/build.symbian/pjsua_libU.def b/build.symbian/pjsua_libU.def
new file mode 100644
index 0000000..be8569d
--- /dev/null
+++ b/build.symbian/pjsua_libU.def
@@ -0,0 +1,114 @@
+EXPORTS
+	pjsip_cred_dup                           @ 1 NONAME
+	pjsua_acc_add                            @ 2 NONAME
+	pjsua_acc_add_local                      @ 3 NONAME
+	pjsua_acc_config_default                 @ 4 NONAME
+	pjsua_acc_create_request                 @ 5 NONAME
+	pjsua_acc_create_uac_contact             @ 6 NONAME
+	pjsua_acc_create_uas_contact             @ 7 NONAME
+	pjsua_acc_del                            @ 8 NONAME
+	pjsua_acc_enum_info                      @ 9 NONAME
+	pjsua_acc_find_for_incoming              @ 10 NONAME
+	pjsua_acc_find_for_outgoing              @ 11 NONAME
+	pjsua_acc_get_count                      @ 12 NONAME
+	pjsua_acc_get_default                    @ 13 NONAME
+	pjsua_acc_get_info                       @ 14 NONAME
+	pjsua_acc_is_valid                       @ 15 NONAME
+	pjsua_acc_modify                         @ 16 NONAME
+	pjsua_acc_set_default                    @ 17 NONAME
+	pjsua_acc_set_online_status              @ 18 NONAME
+	pjsua_acc_set_registration               @ 19 NONAME
+	pjsua_acc_set_transport                  @ 20 NONAME
+	pjsua_buddy_add                          @ 21 NONAME
+	pjsua_buddy_config_default               @ 22 NONAME
+	pjsua_buddy_del                          @ 23 NONAME
+	pjsua_buddy_get_info                     @ 24 NONAME
+	pjsua_buddy_is_valid                     @ 25 NONAME
+	pjsua_buddy_subscribe_pres               @ 26 NONAME
+	pjsua_call_answer                        @ 27 NONAME
+	pjsua_call_dial_dtmf                     @ 28 NONAME
+	pjsua_call_dump                          @ 29 NONAME
+	pjsua_call_get_conf_port                 @ 30 NONAME
+	pjsua_call_get_count                     @ 31 NONAME
+	pjsua_call_get_info                      @ 32 NONAME
+	pjsua_call_get_max_count                 @ 33 NONAME
+	pjsua_call_get_user_data                 @ 34 NONAME
+	pjsua_call_hangup                        @ 35 NONAME
+	pjsua_call_hangup_all                    @ 36 NONAME
+	pjsua_call_has_media                     @ 37 NONAME
+	pjsua_call_is_active                     @ 38 NONAME
+	pjsua_call_make_call                     @ 39 NONAME
+	pjsua_call_reinvite                      @ 40 NONAME
+	pjsua_call_send_im                       @ 41 NONAME
+	pjsua_call_send_typing_ind               @ 42 NONAME
+	pjsua_call_set_hold                      @ 43 NONAME
+	pjsua_call_set_user_data                 @ 44 NONAME
+	pjsua_call_xfer                          @ 45 NONAME
+	pjsua_call_xfer_replaces                 @ 46 NONAME
+	pjsua_codec_get_param                    @ 47 NONAME
+	pjsua_codec_set_param                    @ 48 NONAME
+	pjsua_codec_set_priority                 @ 49 NONAME
+	pjsua_conf_add_port                      @ 50 NONAME
+	pjsua_conf_adjust_rx_level               @ 51 NONAME
+	pjsua_conf_adjust_tx_level               @ 52 NONAME
+	pjsua_conf_connect                       @ 53 NONAME
+	pjsua_conf_disconnect                    @ 54 NONAME
+	pjsua_conf_get_active_ports              @ 55 NONAME
+	pjsua_conf_get_max_ports                 @ 56 NONAME
+	pjsua_conf_get_port_info                 @ 57 NONAME
+	pjsua_conf_get_signal_level              @ 58 NONAME
+	pjsua_conf_remove_port                   @ 59 NONAME
+	pjsua_config_default                     @ 60 NONAME
+	pjsua_config_dup                         @ 61 NONAME
+	pjsua_create                             @ 62 NONAME
+	pjsua_destroy                            @ 63 NONAME
+	pjsua_dump                               @ 64 NONAME
+	pjsua_enum_accs                          @ 65 NONAME
+	pjsua_enum_buddies                       @ 66 NONAME
+	pjsua_enum_calls                         @ 67 NONAME
+	pjsua_enum_codecs                        @ 68 NONAME
+	pjsua_enum_conf_ports                    @ 69 NONAME
+	pjsua_enum_snd_devs                      @ 70 NONAME
+	pjsua_enum_transports                    @ 71 NONAME
+	pjsua_get_buddy_count                    @ 72 NONAME
+	pjsua_get_ec_tail                        @ 73 NONAME
+	pjsua_get_pjmedia_endpt                  @ 74 NONAME
+	pjsua_get_pjsip_endpt                    @ 75 NONAME
+	pjsua_get_pool_factory                   @ 76 NONAME
+	pjsua_get_snd_dev                        @ 77 NONAME
+	pjsua_handle_events                      @ 78 NONAME
+	pjsua_im_send                            @ 79 NONAME
+	pjsua_im_typing                          @ 80 NONAME
+	pjsua_init                               @ 81 NONAME
+	pjsua_logging_config_default             @ 82 NONAME
+	pjsua_logging_config_dup                 @ 83 NONAME
+	pjsua_media_config_default               @ 84 NONAME
+	pjsua_media_transports_create            @ 85 NONAME
+	pjsua_msg_data_init                      @ 86 NONAME
+	pjsua_perror                             @ 87 NONAME
+	pjsua_player_create                      @ 88 NONAME
+	pjsua_player_destroy                     @ 89 NONAME
+	pjsua_player_get_conf_port               @ 90 NONAME
+	pjsua_player_get_port                    @ 91 NONAME
+	pjsua_player_set_pos                     @ 92 NONAME
+	pjsua_playlist_create                    @ 93 NONAME
+	pjsua_pool_create                        @ 94 NONAME
+	pjsua_pres_dump                          @ 95 NONAME
+	pjsua_reconfigure_logging                @ 96 NONAME
+	pjsua_recorder_create                    @ 97 NONAME
+	pjsua_recorder_destroy                   @ 98 NONAME
+	pjsua_recorder_get_conf_port             @ 99 NONAME
+	pjsua_recorder_get_port                  @ 100 NONAME
+	pjsua_set_ec                             @ 101 NONAME
+	pjsua_set_no_snd_dev                     @ 102 NONAME
+	pjsua_set_null_snd_dev                   @ 103 NONAME
+	pjsua_set_snd_dev                        @ 104 NONAME
+	pjsua_start                              @ 105 NONAME
+	pjsua_transport_close                    @ 106 NONAME
+	pjsua_transport_config_default           @ 107 NONAME
+	pjsua_transport_config_dup               @ 108 NONAME
+	pjsua_transport_create                   @ 109 NONAME
+	pjsua_transport_get_info                 @ 110 NONAME
+	pjsua_transport_register                 @ 111 NONAME
+	pjsua_transport_set_enable               @ 112 NONAME
+	pjsua_verify_sip_url                     @ 113 NONAME
diff --git a/build.symbian/symbian_ua.mmp b/build.symbian/symbian_ua.mmp
index 46075da..ee243f2 100644
--- a/build.symbian/symbian_ua.mmp
+++ b/build.symbian/symbian_ua.mmp
@@ -7,6 +7,7 @@
 

 MACRO		PJ_M_I386=1

 MACRO		PJ_SYMBIAN=1

+MACRO		PJ_DLL=1

 

 // Test files

 

@@ -25,6 +26,6 @@
 SYSTEMINCLUDE	\epoc32\include\libc

 

 LIBRARY		esock.lib insock.lib charconv.lib euser.lib estlib.lib eexe.lib

-STATICLIBRARY   null_audio.lib pjsua_lib.lib pjsip_ua.lib pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib pjnath.lib pjlib_util.lib pjlib.lib ecrt0.lib

+LIBRARY		null_audio.lib pjsua_lib.lib pjsip_ua.lib pjsip_simple.lib pjsip.lib pjsdp.lib pjmedia.lib pjnath.lib pjlib_util.lib pjlib.lib ecrt0.lib

 CAPABILITY	None

 

diff --git a/pjlib/include/pj/guid.h b/pjlib/include/pj/guid.h
index 3eea11a..a437646 100644
--- a/pjlib/include/pj/guid.h
+++ b/pjlib/include/pj/guid.h
@@ -55,8 +55,16 @@
  *
  * Regardless of the actual length of the GUID, it will not exceed
  * PJ_GUID_MAX_LENGTH characters.
+ *
+ * @see pj_GUID_STRING_LENGTH()
+ * @see PJ_GUID_MAX_LENGTH
  */
-extern const unsigned PJ_GUID_STRING_LENGTH;
+PJ_DECL_DATA(const unsigned) PJ_GUID_STRING_LENGTH;
+
+/**
+ * Get #PJ_GUID_STRING_LENGTH constant.
+ */
+PJ_DECL(unsigned) pj_GUID_STRING_LENGTH();
 
 /**
  * PJ_GUID_MAX_LENGTH specifies the maximum length of GUID string,
diff --git a/pjlib/include/pj/pool.h b/pjlib/include/pj/pool.h
index 5cb6aaf..d12076f 100644
--- a/pjlib/include/pj/pool.h
+++ b/pjlib/include/pj/pool.h
@@ -614,8 +614,15 @@
 /**
  * This constant denotes the exception number that will be thrown by default
  * memory factory policy when memory allocation fails.
+ *
+ * @see pj_NO_MEMORY_EXCEPTION()
  */
-extern int PJ_NO_MEMORY_EXCEPTION;
+PJ_DECL_DATA(int) PJ_NO_MEMORY_EXCEPTION;
+
+/**
+ * Get #PJ_NO_MEMORY_EXCEPTION constant.
+ */ 
+PJ_DECL(int) pj_NO_MEMORY_EXCEPTION();
 
 /**
  * This global variable points to default memory pool factory policy.
diff --git a/pjlib/src/pj/guid_simple.c b/pjlib/src/pj/guid_simple.c
index fecdd78..0f3d085 100644
--- a/pjlib/src/pj/guid_simple.c
+++ b/pjlib/src/pj/guid_simple.c
@@ -21,7 +21,12 @@
 #include <pj/rand.h>
 #include <pj/string.h>
 
-const unsigned PJ_GUID_STRING_LENGTH=20;
+PJ_DEF_DATA(const unsigned) PJ_GUID_STRING_LENGTH=20;
+
+PJ_DEF(unsigned) pj_GUID_STRING_LENGTH()
+{
+    return PJ_GUID_STRING_LENGTH;
+}
 
 static void init_mac_address(unsigned char mac_addr[16])
 {
diff --git a/pjlib/src/pj/guid_uuid.c b/pjlib/src/pj/guid_uuid.c
index c4b46a5..c0d71f4 100644
--- a/pjlib/src/pj/guid_uuid.c
+++ b/pjlib/src/pj/guid_uuid.c
@@ -24,7 +24,12 @@
 
 #include <uuid/uuid.h>
 
-const unsigned PJ_GUID_STRING_LENGTH=36;
+PJ_DEF_DATA(const unsigned) PJ_GUID_STRING_LENGTH=36;
+
+PJ_DEF(unsigned) pj_GUID_STRING_LENGTH()
+{
+    return PJ_GUID_STRING_LENGTH;
+}
 
 PJ_DEF(pj_str_t*) pj_generate_unique_string(pj_str_t *str)
 {
diff --git a/pjlib/src/pj/guid_win32.c b/pjlib/src/pj/guid_win32.c
index 41d3c5c..1f14505 100644
--- a/pjlib/src/pj/guid_win32.c
+++ b/pjlib/src/pj/guid_win32.c
@@ -24,7 +24,12 @@
 #include <pj/os.h>
 
 
-const unsigned PJ_GUID_STRING_LENGTH=32;
+PJ_DEF_DATA(const unsigned) PJ_GUID_STRING_LENGTH=32;
+
+PJ_DEF(unsigned) pj_GUID_STRING_LENGTH()
+{
+    return PJ_GUID_STRING_LENGTH;
+}
 
 PJ_INLINE(void) hex2digit(unsigned value, char *p)
 {
diff --git a/pjlib/src/pj/os_symbian.h b/pjlib/src/pj/os_symbian.h
index abfa7f0..512640a 100644
--- a/pjlib/src/pj/os_symbian.h
+++ b/pjlib/src/pj/os_symbian.h
@@ -25,9 +25,9 @@
 #include <e32base.h>
 #include <e32cmn.h>
 #include <e32std.h>
-#include <ES_SOCK.H>
+#include <es_sock.h>
 #include <in_sock.h>
-#include <CHARCONV.H>
+#include <charconf.h>
 #include <utf.h>
 #include <e32cons.h>
 
diff --git a/pjlib/src/pj/pool.c b/pjlib/src/pj/pool.c
index 9f47892..26fd6bb 100644
--- a/pjlib/src/pj/pool.c
+++ b/pjlib/src/pj/pool.c
@@ -32,7 +32,12 @@
 
 #define LOG(expr)   PJ_LOG(6,expr)
 
-int PJ_NO_MEMORY_EXCEPTION;
+PJ_DEF_DATA(int) PJ_NO_MEMORY_EXCEPTION;
+
+PJ_DEF(int) pj_NO_MEMORY_EXCEPTION()
+{
+    return PJ_NO_MEMORY_EXCEPTION;
+}
 
 /*
  * Create new block.
diff --git a/pjmedia/include/pjmedia/errno.h b/pjmedia/include/pjmedia/errno.h
index 332d1e4..3b1f7cd 100644
--- a/pjmedia/include/pjmedia/errno.h
+++ b/pjmedia/include/pjmedia/errno.h
@@ -521,6 +521,23 @@
 #define PJMEDIA_ESNDINSAMPLEFMT	    (PJMEDIA_ERRNO_START+203)    /* 220203 */
 
 
+/**
+ * Get error message for the specified error code. Note that this
+ * function is only able to decode PJMEDIA specific error code.
+ * Application should use pj_strerror(), which should be able to
+ * decode all error codes belonging to all subsystems (e.g. pjlib,
+ * pjmedia, pjsip, etc).
+ *
+ * @param status    The error code.
+ * @param buffer    The buffer where to put the error message.
+ * @param bufsize   Size of the buffer.
+ *
+ * @return	    The error message as NULL terminated string,
+ *                  wrapped with pj_str_t.
+ */
+PJ_DECL(pj_str_t) pjmedia_strerror( pj_status_t status, char *buffer,
+				    pj_size_t bufsize);
+
 
 PJ_END_DECL
 
diff --git a/pjmedia/include/pjmedia/rtcp.h b/pjmedia/include/pjmedia/rtcp.h
index 5d34e5f..b680d0e 100644
--- a/pjmedia/include/pjmedia/rtcp.h
+++ b/pjmedia/include/pjmedia/rtcp.h
@@ -309,8 +309,8 @@
  *
  * @return		    PJ_SUCCESS on success.
  */
-PJ_DEF(pj_status_t) pjmedia_rtcp_get_ntp_time(const pjmedia_rtcp_session *sess,
-					      pjmedia_rtcp_ntp_rec *ntp);
+PJ_DECL(pj_status_t) pjmedia_rtcp_get_ntp_time(const pjmedia_rtcp_session *sess,
+					       pjmedia_rtcp_ntp_rec *ntp);
 
 
 /**
diff --git a/pjmedia/src/pjmedia/alaw_ulaw.c b/pjmedia/src/pjmedia/alaw_ulaw.c
index 5fd9747..7bb5c77 100644
--- a/pjmedia/src/pjmedia/alaw_ulaw.c
+++ b/pjmedia/src/pjmedia/alaw_ulaw.c
@@ -116,8 +116,7 @@
  * For further information see John C. Bellamy's Digital Telephony, 1982,
  * John Wiley & Sons, pps 98-111 and 472-476.
  */
-PJ_DEF(pj_uint8_t)
-pjmedia_linear2alaw(
+PJ_DEF(pj_uint8_t) pjmedia_linear2alaw(
 	int		pcm_val)	/* 2's complement (16-bit range) */
 {
 	int		mask;
@@ -152,8 +151,7 @@
  * alaw2linear() - Convert an A-law value to 16-bit linear PCM
  *
  */
-PJ_DEF(int)
-pjmedia_alaw2linear(
+PJ_DEF(int) pjmedia_alaw2linear(
 	unsigned a_val)
 {
 	int		t;
@@ -208,8 +206,7 @@
  * For further information see John C. Bellamy's Digital Telephony, 1982,
  * John Wiley & Sons, pps 98-111 and 472-476.
  */
-PJ_DECL(unsigned char)
-pjmedia_linear2ulaw(
+PJ_DEF(unsigned char) pjmedia_linear2ulaw(
 	int		pcm_val)	/* 2's complement (16-bit range) */
 {
 	int		mask;
@@ -250,8 +247,7 @@
  * Note that this function expects to be passed the complement of the
  * original code word. This is in keeping with ISDN conventions.
  */
-PJ_DEF(int)
-pjmedia_ulaw2linear(
+PJ_DEF(int) pjmedia_ulaw2linear(
 	unsigned char	u_val)
 {
 	int		t;
@@ -276,8 +272,7 @@
 }
 
 /* A-law to u-law conversion */
-PJ_DEF(unsigned char)
-pjmedia_alaw2ulaw(
+PJ_DEF(unsigned char) pjmedia_alaw2ulaw(
 	unsigned char	aval)
 {
 	aval &= 0xff;
@@ -286,8 +281,7 @@
 }
 
 /* u-law to A-law conversion */
-PJ_DEF(unsigned char)
-pjmedia_ulaw2alaw(
+PJ_DEF(unsigned char) pjmedia_ulaw2alaw(
 	unsigned char	uval)
 {
 	uval &= 0xff;
diff --git a/pjmedia/src/pjmedia/codec.c b/pjmedia/src/pjmedia/codec.c
index 12ff4c0..4e5ea2a 100644
--- a/pjmedia/src/pjmedia/codec.c
+++ b/pjmedia/src/pjmedia/codec.c
@@ -50,8 +50,7 @@
 /*
  * Register a codec factory.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_codec_mgr_register_factory( pjmedia_codec_mgr *mgr,
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_register_factory( pjmedia_codec_mgr *mgr,
 				    pjmedia_codec_factory *factory)
 {
     pjmedia_codec_info info[PJMEDIA_CODEC_MGR_MAX_CODECS];
@@ -100,9 +99,9 @@
 /*
  * Unregister a codec factory.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_codec_mgr_unregister_factory(pjmedia_codec_mgr *mgr, 
-				     pjmedia_codec_factory *factory)
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_unregister_factory(
+				pjmedia_codec_mgr *mgr, 
+				pjmedia_codec_factory *factory)
 {
     unsigned i;
     PJ_ASSERT_RETURN(mgr && factory, PJ_EINVAL);
@@ -139,8 +138,7 @@
 /*
  * Enum all codecs.
  */
-PJ_DEF(pj_status_t)
-pjmedia_codec_mgr_enum_codecs(pjmedia_codec_mgr *mgr, 
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_enum_codecs(pjmedia_codec_mgr *mgr, 
 			      unsigned *count, 
 			      pjmedia_codec_info codecs[],
 			      unsigned *prio)
@@ -170,8 +168,7 @@
 /*
  * Get codec info for static payload type.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_codec_mgr_get_codec_info( pjmedia_codec_mgr *mgr,
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_get_codec_info( pjmedia_codec_mgr *mgr,
 				  unsigned pt,
 				  const pjmedia_codec_info **p_info)
 {
@@ -222,8 +219,7 @@
  * "L16" is specified, then it will find "L16/8000/1", "L16/16000/1",
  * and so on, up to the maximum count specified in the argument.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_codec_mgr_find_codecs_by_id( pjmedia_codec_mgr *mgr,
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_find_codecs_by_id( pjmedia_codec_mgr *mgr,
 				     const pj_str_t *codec_id,
 				     unsigned *count,
 				     const pjmedia_codec_info *p_info[],
@@ -306,10 +302,10 @@
  * are found with the same codec_id prefix, then the function sets the
  * priorities of all those codecs.
  */
-PJ_DEF(pj_status_t)
-pjmedia_codec_mgr_set_codec_priority(pjmedia_codec_mgr *mgr, 
-				     const pj_str_t *codec_id,
-				     pj_uint8_t prio)
+PJ_DEF(pj_status_t) pjmedia_codec_mgr_set_codec_priority(
+				pjmedia_codec_mgr *mgr, 
+				const pj_str_t *codec_id,
+				pj_uint8_t prio)
 {
     unsigned i, found = 0;
 
diff --git a/pjmedia/src/pjmedia/conference.c b/pjmedia/src/pjmedia/conference.c
index 74bdafc..7dd1fa3 100644
--- a/pjmedia/src/pjmedia/conference.c
+++ b/pjmedia/src/pjmedia/conference.c
@@ -818,7 +818,7 @@
 /*
  * Change TX and RX settings for the port.
  */
-PJ_DECL(pj_status_t) pjmedia_conf_configure_port( pjmedia_conf *conf,
+PJ_DEF(pj_status_t) pjmedia_conf_configure_port( pjmedia_conf *conf,
 						  unsigned slot,
 						  pjmedia_port_op tx,
 						  pjmedia_port_op rx)
@@ -979,7 +979,7 @@
 /*
  * Get total number of ports connections currently set up in the bridge.
  */
-PJ_DECL(unsigned) pjmedia_conf_get_connect_count(pjmedia_conf *conf)
+PJ_DEF(unsigned) pjmedia_conf_get_connect_count(pjmedia_conf *conf)
 {
     return conf->connect_cnt;
 }
diff --git a/pjmedia/src/pjmedia/echo_common.c b/pjmedia/src/pjmedia/echo_common.c
index 079333b..568a606 100644
--- a/pjmedia/src/pjmedia/echo_common.c
+++ b/pjmedia/src/pjmedia/echo_common.c
@@ -21,7 +21,7 @@
 #include <pjmedia/echo.h>
 #include <pj/assert.h>
 #include <pj/pool.h>
-
+#include "echo_internal.h"
 
 typedef struct ec_operations ec_operations;
 
@@ -55,29 +55,6 @@
 };
 
 
-
-/*
- * Simple echo suppressor
- */
-PJ_DECL(pj_status_t) echo_supp_create(pj_pool_t *pool,
-				      unsigned clock_rate,
-				      unsigned samples_per_frame,
-				      unsigned tail_ms,
-				      unsigned latency_ms,
-				      unsigned options,
-				      void **p_state );
-PJ_DECL(pj_status_t) echo_supp_destroy(void *state);
-PJ_DECL(pj_status_t) echo_supp_playback(void *state,
-					pj_int16_t *play_frm );
-PJ_DECL(pj_status_t) echo_supp_capture(void *state,
-				       pj_int16_t *rec_frm,
-				       unsigned options );
-PJ_DECL(pj_status_t) echo_supp_cancel_echo(void *state,
-					   pj_int16_t *rec_frm,
-					   const pj_int16_t *play_frm,
-					   unsigned options,
-					   void *reserved );
-
 static struct ec_operations echo_supp_op = 
 {
     &echo_supp_create,
@@ -93,25 +70,6 @@
  * Speex AEC prototypes
  */
 #if defined(PJMEDIA_HAS_SPEEX_AEC) && PJMEDIA_HAS_SPEEX_AEC!=0
-PJ_DECL(pj_status_t) speex_aec_create(pj_pool_t *pool,
-				      unsigned clock_rate,
-				      unsigned samples_per_frame,
-				      unsigned tail_ms,
-				      unsigned latency_ms,
-				      unsigned options,
-				      void **p_state );
-PJ_DECL(pj_status_t) speex_aec_destroy(void *state );
-PJ_DECL(pj_status_t) speex_aec_playback(void *state,
-				        pj_int16_t *play_frm );
-PJ_DECL(pj_status_t) speex_aec_capture(void *state,
-				       pj_int16_t *rec_frm,
-				       unsigned options );
-PJ_DECL(pj_status_t) speex_aec_cancel_echo(void *state,
-					   pj_int16_t *rec_frm,
-					   const pj_int16_t *play_frm,
-					   unsigned options,
-					   void *reserved );
-
 static struct ec_operations aec_op = 
 {
     &speex_aec_create,
diff --git a/pjmedia/src/pjmedia/echo_internal.h b/pjmedia/src/pjmedia/echo_internal.h
new file mode 100644
index 0000000..e134f86
--- /dev/null
+++ b/pjmedia/src/pjmedia/echo_internal.h
@@ -0,0 +1,71 @@
+/* $Id$ */
+/* 
+ * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __PJMEDIA_ECHO_INTERNAL_H__
+#define __PJMEDIA_ECHO_INTERNAL_H__
+
+#include <pjmedia/types.h>
+
+PJ_BEGIN_DECL
+
+/*
+ * Simple echo suppressor
+ */
+PJ_DECL(pj_status_t) echo_supp_create(pj_pool_t *pool,
+				      unsigned clock_rate,
+				      unsigned samples_per_frame,
+				      unsigned tail_ms,
+				      unsigned latency_ms,
+				      unsigned options,
+				      void **p_state );
+PJ_DECL(pj_status_t) echo_supp_destroy(void *state);
+PJ_DECL(pj_status_t) echo_supp_playback(void *state,
+					pj_int16_t *play_frm );
+PJ_DECL(pj_status_t) echo_supp_capture(void *state,
+				       pj_int16_t *rec_frm,
+				       unsigned options );
+PJ_DECL(pj_status_t) echo_supp_cancel_echo(void *state,
+					   pj_int16_t *rec_frm,
+					   const pj_int16_t *play_frm,
+					   unsigned options,
+					   void *reserved );
+
+PJ_DECL(pj_status_t) speex_aec_create(pj_pool_t *pool,
+				      unsigned clock_rate,
+				      unsigned samples_per_frame,
+				      unsigned tail_ms,
+				      unsigned latency_ms,
+				      unsigned options,
+				      void **p_state );
+PJ_DECL(pj_status_t) speex_aec_destroy(void *state );
+PJ_DECL(pj_status_t) speex_aec_playback(void *state,
+				        pj_int16_t *play_frm );
+PJ_DECL(pj_status_t) speex_aec_capture(void *state,
+				       pj_int16_t *rec_frm,
+				       unsigned options );
+PJ_DECL(pj_status_t) speex_aec_cancel_echo(void *state,
+					   pj_int16_t *rec_frm,
+					   const pj_int16_t *play_frm,
+					   unsigned options,
+					   void *reserved );
+
+
+PJ_END_DECL
+
+#endif
+
diff --git a/pjmedia/src/pjmedia/echo_speex.c b/pjmedia/src/pjmedia/echo_speex.c
index daf19d4..3e0d481 100644
--- a/pjmedia/src/pjmedia/echo_speex.c
+++ b/pjmedia/src/pjmedia/echo_speex.c
@@ -28,6 +28,7 @@
 #include <speex/speex_echo.h>
 #include <speex/speex_preprocess.h>
 
+#include "echo_internal.h"
 
 #define THIS_FILE	"echo_speex.c"
 #define BUF_COUNT	16
@@ -226,29 +227,6 @@
     return PJ_SUCCESS;
 }
 
-/*
- * Prototypes
- */
-PJ_DECL(pj_status_t) speex_aec_create(pj_pool_t *pool,
-				      unsigned clock_rate,
-				      unsigned samples_per_frame,
-				      unsigned tail_ms,
-				      unsigned latency_ms,
-				      unsigned options,
-				      void **p_state );
-PJ_DECL(pj_status_t) speex_aec_destroy(void *state );
-PJ_DECL(pj_status_t) speex_aec_playback(void *state,
-				        pj_int16_t *play_frm );
-PJ_DECL(pj_status_t) speex_aec_capture(void *state,
-				       pj_int16_t *rec_frm,
-				       unsigned options );
-PJ_DECL(pj_status_t) speex_aec_cancel_echo(void *state,
-					   pj_int16_t *rec_frm,
-					   const pj_int16_t *play_frm,
-					   unsigned options,
-					   void *reserved );
-
-
 enum
 {
     TS_FLAG_PLAY = 1,
diff --git a/pjmedia/src/pjmedia/echo_suppress.c b/pjmedia/src/pjmedia/echo_suppress.c
index 93a3cba..3f5c0ef 100644
--- a/pjmedia/src/pjmedia/echo_suppress.c
+++ b/pjmedia/src/pjmedia/echo_suppress.c
@@ -25,6 +25,7 @@
 #include <pj/os.h>
 #include <pj/pool.h>
 
+#include "echo_internal.h"
 
 #define THIS_FILE			    "echo_suppress.c"
 
@@ -44,30 +45,6 @@
 
 
 /*
- * Prototypes.
- */
-PJ_DECL(pj_status_t) echo_supp_create(pj_pool_t *pool,
-				      unsigned clock_rate,
-				      unsigned samples_per_frame,
-				      unsigned tail_ms,
-				      unsigned latency_ms,
-				      unsigned options,
-				      void **p_state );
-PJ_DECL(pj_status_t) echo_supp_destroy(void *state);
-PJ_DECL(pj_status_t) echo_supp_playback(void *state,
-					pj_int16_t *play_frm );
-PJ_DECL(pj_status_t) echo_supp_capture(void *state,
-				       pj_int16_t *rec_frm,
-				       unsigned options );
-PJ_DECL(pj_status_t) echo_supp_cancel_echo(void *state,
-					   pj_int16_t *rec_frm,
-					   const pj_int16_t *play_frm,
-					   unsigned options,
-					   void *reserved );
-
-
-
-/*
  * Create. 
  */
 PJ_DEF(pj_status_t) echo_supp_create( pj_pool_t *pool,
diff --git a/pjmedia/src/pjmedia/endpoint.c b/pjmedia/src/pjmedia/endpoint.c
index 5848c4a..d9296f1 100644
--- a/pjmedia/src/pjmedia/endpoint.c
+++ b/pjmedia/src/pjmedia/endpoint.c
@@ -50,25 +50,6 @@
 	    PJMEDIA_ADD_RTPMAP_FOR_STATIC_PT;
 
 
-/**
- * Defined in pjmedia/errno.c
- * 
- * Get error message for the specified error code. Note that this
- * function is only able to decode PJMEDIA specific error code.
- * Application should use pj_strerror(), which should be able to
- * decode all error codes belonging to all subsystems (e.g. pjlib,
- * pjmedia, pjsip, etc).
- *
- * @param status    The error code.
- * @param buffer    The buffer where to put the error message.
- * @param bufsize   Size of the buffer.
- *
- * @return	    The error message as NULL terminated string,
- *                  wrapped with pj_str_t.
- */
-PJ_DECL(pj_str_t) pjmedia_strerror( pj_status_t status, char *buffer,
-				    pj_size_t bufsize);
-
 
 /* Worker thread proc. */
 static int PJ_THREAD_FUNC worker_proc(void*);
diff --git a/pjmedia/src/pjmedia/g711.c b/pjmedia/src/pjmedia/g711.c
index b2c0819..3997da5 100644
--- a/pjmedia/src/pjmedia/g711.c
+++ b/pjmedia/src/pjmedia/g711.c
@@ -42,10 +42,6 @@
 #define FRAME_SIZE	    (8000 * PTIME / 1000)   /* 80 bytes	    */
 #define SAMPLES_PER_FRAME   (8000 * PTIME / 1000)   /* 80 samples   */
 
-/* These are the only public functions exported to applications */
-PJ_DECL(pj_status_t) g711_init_factory (pjmedia_codec_factory *factory, 
-					pj_pool_t *pool);
-
 /* Prototypes for G711 factory */
 static pj_status_t g711_test_alloc( pjmedia_codec_factory *factory, 
 				    const pjmedia_codec_info *id );
diff --git a/pjmedia/src/pjmedia/mem_capture.c b/pjmedia/src/pjmedia/mem_capture.c
index 074f377..1a73e0d 100644
--- a/pjmedia/src/pjmedia/mem_capture.c
+++ b/pjmedia/src/pjmedia/mem_capture.c
@@ -51,7 +51,7 @@
 static pj_status_t rec_on_destroy(pjmedia_port *this_port);
 
 
-PJ_DECL(pj_status_t) pjmedia_mem_capture_create(pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_mem_capture_create( pj_pool_t *pool,
 						void *buffer,
 						pj_size_t size,
 						unsigned clock_rate,
@@ -104,8 +104,7 @@
  * Register a callback to be called when the file reading has reached the
  * end of buffer.
  */
-PJ_DEF(pj_status_t)
-pjmedia_mem_capture_set_eof_cb( pjmedia_port *port,
+PJ_DEF(pj_status_t) pjmedia_mem_capture_set_eof_cb( pjmedia_port *port,
 				void *user_data,
 				pj_status_t (*cb)(pjmedia_port *port,
 						  void *usr_data))
diff --git a/pjmedia/src/pjmedia/mem_player.c b/pjmedia/src/pjmedia/mem_player.c
index 95add9a..678391c 100644
--- a/pjmedia/src/pjmedia/mem_player.c
+++ b/pjmedia/src/pjmedia/mem_player.c
@@ -105,8 +105,7 @@
  * Register a callback to be called when the file reading has reached the
  * end of buffer.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_mem_player_set_eof_cb( pjmedia_port *port,
+PJ_DEF(pj_status_t) pjmedia_mem_player_set_eof_cb( pjmedia_port *port,
 			       void *user_data,
 			       pj_status_t (*cb)(pjmedia_port *port,
 						 void *usr_data))
diff --git a/pjmedia/src/pjmedia/sdp.c b/pjmedia/src/pjmedia/sdp.c
index 25d8683..be6f802 100644
--- a/pjmedia/src/pjmedia/sdp.c
+++ b/pjmedia/src/pjmedia/sdp.c
@@ -131,11 +131,10 @@
     return attr;
 }
 
-PJ_DEF(pjmedia_sdp_attr*) 
-pjmedia_sdp_attr_find (unsigned count, 
-		       pjmedia_sdp_attr *const attr_array[],
-		       const pj_str_t *name,
-		       const pj_str_t *c_fmt)
+PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_attr_find (unsigned count, 
+				       pjmedia_sdp_attr *const attr_array[],
+				       const pj_str_t *name,
+				       const pj_str_t *c_fmt)
 {
     unsigned i;
     unsigned c_pt = 0xFFFF;
@@ -158,11 +157,10 @@
     return NULL;
 }
 
-PJ_DEF(pjmedia_sdp_attr*) 
-pjmedia_sdp_attr_find2(unsigned count, 
-		       pjmedia_sdp_attr *const attr_array[],
-		       const char *c_name,
-		       const pj_str_t *c_fmt)
+PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_attr_find2(unsigned count, 
+				       pjmedia_sdp_attr *const attr_array[],
+				       const char *c_name,
+				       const pj_str_t *c_fmt)
 {
     pj_str_t name;
 
@@ -615,9 +613,9 @@
     return m;
 }
 
-PJ_DEF(pjmedia_sdp_attr*) 
-pjmedia_sdp_media_find_attr(const pjmedia_sdp_media *m,
-			    const pj_str_t *name, const pj_str_t *fmt)
+PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_media_find_attr(
+				const pjmedia_sdp_media *m,
+				const pj_str_t *name, const pj_str_t *fmt)
 {
     PJ_ASSERT_RETURN(m && name, NULL);
     return pjmedia_sdp_attr_find(m->attr_count, m->attr, name, fmt);
@@ -625,9 +623,9 @@
 
 
 
-PJ_DEF(pjmedia_sdp_attr*) 
-pjmedia_sdp_media_find_attr2(const pjmedia_sdp_media *m,
-			     const char *name, const pj_str_t *fmt)
+PJ_DEF(pjmedia_sdp_attr*) pjmedia_sdp_media_find_attr2(
+				const pjmedia_sdp_media *m,
+				const char *name, const pj_str_t *fmt)
 {
     PJ_ASSERT_RETURN(m && name, NULL);
     return pjmedia_sdp_attr_find2(m->attr_count, m->attr, name, fmt);
@@ -640,16 +638,14 @@
     return pjmedia_sdp_attr_add(&m->attr_count, m->attr, attr);
 }
 
-PJ_DEF(unsigned) 
-pjmedia_sdp_media_remove_all_attr(pjmedia_sdp_media *m,
-				  const char *name)
+PJ_DEF(unsigned) pjmedia_sdp_media_remove_all_attr(pjmedia_sdp_media *m,
+						   const char *name)
 {
     return pjmedia_sdp_attr_remove_all(&m->attr_count, m->attr, name);
 }
 
-PJ_DEF(pj_status_t)
-pjmedia_sdp_media_remove_attr(pjmedia_sdp_media *m,
-			      pjmedia_sdp_attr *attr)
+PJ_DEF(pj_status_t) pjmedia_sdp_media_remove_attr(pjmedia_sdp_media *m,
+			      			  pjmedia_sdp_attr *attr)
 {
     return pjmedia_sdp_attr_remove(&m->attr_count, m->attr, attr);
 }
@@ -1128,9 +1124,8 @@
 /*
  * Clone session
  */
-PJ_DEF(pjmedia_sdp_session*) 
-pjmedia_sdp_session_clone( pj_pool_t *pool,
-			   const pjmedia_sdp_session *rhs)
+PJ_DEF(pjmedia_sdp_session*) pjmedia_sdp_session_clone( pj_pool_t *pool,
+			   			const pjmedia_sdp_session *rhs)
 {
     pjmedia_sdp_session *sess;
     unsigned i;
diff --git a/pjmedia/src/pjmedia/sdp_neg.c b/pjmedia/src/pjmedia/sdp_neg.c
index f24dc41..12c0f49 100644
--- a/pjmedia/src/pjmedia/sdp_neg.c
+++ b/pjmedia/src/pjmedia/sdp_neg.c
@@ -66,8 +66,7 @@
 /*
  * Create with local offer.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_create_w_local_offer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_create_w_local_offer( pj_pool_t *pool,
 				      const pjmedia_sdp_session *local,
 				      pjmedia_sdp_neg **p_neg)
 {
@@ -98,8 +97,7 @@
 /*
  * Create with remote offer and initial local offer/answer.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_create_w_remote_offer(pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_create_w_remote_offer(pj_pool_t *pool,
 				      const pjmedia_sdp_session *initial,
 				      const pjmedia_sdp_session *remote,
 				      pjmedia_sdp_neg **p_neg)
@@ -147,9 +145,9 @@
 /*
  * Set codec order preference.
  */
-PJ_DEF(pj_status_t)
-pjmedia_sdp_neg_set_prefer_remote_codec_order(pjmedia_sdp_neg *neg,
-					      pj_bool_t prefer_remote)
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_set_prefer_remote_codec_order(
+						pjmedia_sdp_neg *neg,
+						pj_bool_t prefer_remote)
 {
     PJ_ASSERT_RETURN(neg, PJ_EINVAL);
     neg->prefer_remote_codec_order = prefer_remote;
@@ -160,8 +158,7 @@
 /*
  * Get SDP negotiator state.
  */
-PJ_DEF(pjmedia_sdp_neg_state)
-pjmedia_sdp_neg_get_state( pjmedia_sdp_neg *neg )
+PJ_DEF(pjmedia_sdp_neg_state) pjmedia_sdp_neg_get_state( pjmedia_sdp_neg *neg )
 {
     /* Check arguments are valid. */
     PJ_ASSERT_RETURN(neg != NULL, PJMEDIA_SDP_NEG_STATE_NULL);
@@ -169,9 +166,8 @@
 }
 
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_get_active_local( pjmedia_sdp_neg *neg,
-				  const pjmedia_sdp_session **local)
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_active_local( pjmedia_sdp_neg *neg,
+					const pjmedia_sdp_session **local)
 {
     PJ_ASSERT_RETURN(neg && local, PJ_EINVAL);
     PJ_ASSERT_RETURN(neg->active_local_sdp, PJMEDIA_SDPNEG_ENOACTIVE);
@@ -181,8 +177,7 @@
 }
 
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_get_active_remote( pjmedia_sdp_neg *neg,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_active_remote( pjmedia_sdp_neg *neg,
 				   const pjmedia_sdp_session **remote)
 {
     PJ_ASSERT_RETURN(neg && remote, PJ_EINVAL);
@@ -193,8 +188,7 @@
 }
 
 
-PJ_DEF(pj_bool_t)
-pjmedia_sdp_neg_was_answer_remote(pjmedia_sdp_neg *neg)
+PJ_DEF(pj_bool_t) pjmedia_sdp_neg_was_answer_remote(pjmedia_sdp_neg *neg)
 {
     PJ_ASSERT_RETURN(neg, PJ_FALSE);
 
@@ -202,8 +196,7 @@
 }
 
 
-PJ_DEF(pj_status_t)
-pjmedia_sdp_neg_get_neg_remote( pjmedia_sdp_neg *neg,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_neg_remote( pjmedia_sdp_neg *neg,
 				const pjmedia_sdp_session **remote)
 {
     PJ_ASSERT_RETURN(neg && remote, PJ_EINVAL);
@@ -213,8 +206,7 @@
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_get_neg_local( pjmedia_sdp_neg *neg,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_neg_local( pjmedia_sdp_neg *neg,
 			       const pjmedia_sdp_session **local)
 {
     PJ_ASSERT_RETURN(neg && local, PJ_EINVAL);
@@ -228,8 +220,7 @@
 /*
  * Modify local SDP and wait for remote answer.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_modify_local_offer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_modify_local_offer( pj_pool_t *pool,
 				    pjmedia_sdp_neg *neg,
 				    const pjmedia_sdp_session *local)
 {
@@ -249,8 +240,7 @@
 }
 
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_send_local_offer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_send_local_offer( pj_pool_t *pool,
 				  pjmedia_sdp_neg *neg,
 				  const pjmedia_sdp_session **offer)
 {
@@ -285,8 +275,7 @@
 }
 
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_set_remote_answer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_set_remote_answer( pj_pool_t *pool,
 				   pjmedia_sdp_neg *neg,
 				   const pjmedia_sdp_session *remote)
 {
@@ -308,8 +297,7 @@
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_set_remote_offer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_set_remote_offer( pj_pool_t *pool,
 				  pjmedia_sdp_neg *neg,
 				  const pjmedia_sdp_session *remote)
 {
@@ -330,8 +318,7 @@
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) 
-pjmedia_sdp_neg_set_local_answer( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_sdp_neg_set_local_answer( pj_pool_t *pool,
 				  pjmedia_sdp_neg *neg,
 				  const pjmedia_sdp_session *local)
 {
diff --git a/pjmedia/src/pjmedia/session.c b/pjmedia/src/pjmedia/session.c
index 72e55a9..ae72154 100644
--- a/pjmedia/src/pjmedia/session.c
+++ b/pjmedia/src/pjmedia/session.c
@@ -478,8 +478,7 @@
 /*
  * Initialize session info from SDP session descriptors.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_session_info_from_sdp( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_session_info_from_sdp( pj_pool_t *pool,
 			       pjmedia_endpt *endpt,
 			       unsigned max_streams,
 			       pjmedia_session_info *si,
@@ -760,8 +759,7 @@
 /*
  * Install DTMF callback.
  */
-PJ_DEF(pj_status_t)
-pjmedia_session_set_dtmf_callback(pjmedia_session *session,
+PJ_DEF(pj_status_t) pjmedia_session_set_dtmf_callback(pjmedia_session *session,
 				  unsigned index,
 				  void (*cb)(pjmedia_stream*, 
 				 	     void *user_data, 
diff --git a/pjmedia/src/pjmedia/splitcomb.c b/pjmedia/src/pjmedia/splitcomb.c
index a3d8e05..cf729d0 100644
--- a/pjmedia/src/pjmedia/splitcomb.c
+++ b/pjmedia/src/pjmedia/splitcomb.c
@@ -216,8 +216,7 @@
 /*
  * Create reverse phase port for the specified channel.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_splitcomb_create_rev_channel( pj_pool_t *pool,
+PJ_DEF(pj_status_t) pjmedia_splitcomb_create_rev_channel( pj_pool_t *pool,
 				      pjmedia_port *splitcomb,
 				      unsigned ch_num,
 				      unsigned options,
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c
index e519259..6b1e265 100644
--- a/pjmedia/src/pjmedia/transport_udp.c
+++ b/pjmedia/src/pjmedia/transport_udp.c
@@ -324,8 +324,7 @@
 /*
  * Get media socket info.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_transport_udp_get_info( pjmedia_transport *tp,
+PJ_DEF(pj_status_t) pjmedia_transport_udp_get_info( pjmedia_transport *tp,
 				pjmedia_transport_udp_info *inf)
 {
     return transport_get_info(tp, &inf->skinfo);
diff --git a/pjmedia/src/pjmedia/wav_player.c b/pjmedia/src/pjmedia/wav_player.c
index c7e81d0..225f1e5 100644
--- a/pjmedia/src/pjmedia/wav_player.c
+++ b/pjmedia/src/pjmedia/wav_player.c
@@ -455,8 +455,7 @@
  * Register a callback to be called when the file reading has reached the
  * end of file.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_wav_player_set_eof_cb( pjmedia_port *port,
+PJ_DEF(pj_status_t) pjmedia_wav_player_set_eof_cb( pjmedia_port *port,
 			       void *user_data,
 			       pj_status_t (*cb)(pjmedia_port *port,
 						 void *usr_data))
diff --git a/pjmedia/src/pjmedia/wav_playlist.c b/pjmedia/src/pjmedia/wav_playlist.c
index d5882c8..a192cef 100644
--- a/pjmedia/src/pjmedia/wav_playlist.c
+++ b/pjmedia/src/pjmedia/wav_playlist.c
@@ -538,8 +538,7 @@
  * Register a callback to be called when the file reading has reached the
  * end of the last file.
  */
-PJ_DEF(pj_status_t)
-pjmedia_wav_playlist_set_eof_cb(pjmedia_port *port,
+PJ_DEF(pj_status_t) pjmedia_wav_playlist_set_eof_cb(pjmedia_port *port,
 			        void *user_data,
 			        pj_status_t (*cb)(pjmedia_port *port,
 						  void *usr_data))
diff --git a/pjmedia/src/pjmedia/wav_writer.c b/pjmedia/src/pjmedia/wav_writer.c
index 89eb347..eee72cf 100644
--- a/pjmedia/src/pjmedia/wav_writer.c
+++ b/pjmedia/src/pjmedia/wav_writer.c
@@ -194,8 +194,7 @@
 /*
  * Register callback.
  */
-PJ_DEF(pj_status_t) 
-pjmedia_wav_writer_port_set_cb( pjmedia_port *port,
+PJ_DEF(pj_status_t) pjmedia_wav_writer_port_set_cb( pjmedia_port *port,
 				pj_size_t pos,
 				void *user_data,
 			        pj_status_t (*cb)(pjmedia_port *port,
diff --git a/pjnath/include/pjnath/stun_msg.h b/pjnath/include/pjnath/stun_msg.h
index 553a3af..f977e8e 100644
--- a/pjnath/include/pjnath/stun_msg.h
+++ b/pjnath/include/pjnath/stun_msg.h
@@ -1417,7 +1417,7 @@
  *
  * @return		PJ_SUCCESS on success or the appropriate error code.
  */
-PJ_DEF(pj_status_t)  pj_stun_uint64_attr_create(pj_pool_t *pool,
+PJ_DECL(pj_status_t)  pj_stun_uint64_attr_create(pj_pool_t *pool,
 					        int attr_type,
 					        const pj_timestamp *value,
 					        pj_stun_uint64_attr **p_attr);
diff --git a/pjsip-apps/src/samples/pjsip-perf.c b/pjsip-apps/src/samples/pjsip-perf.c
index 7d46bb9..456e2d0 100644
--- a/pjsip-apps/src/samples/pjsip-perf.c
+++ b/pjsip-apps/src/samples/pjsip-perf.c
@@ -1196,7 +1196,7 @@
     app.local_port = 5060;
     app.thread_count = 1;
     app.client.job_count = DEFAULT_COUNT;
-    app.client.method = pjsip_options_method;
+    app.client.method = *pjsip_get_options_method();
     app.client.job_window = c = JOB_WINDOW;
     app.client.timeout = 60;
     app.log_level = 3;
diff --git a/pjsip-apps/src/samples/stateful_proxy.c b/pjsip-apps/src/samples/stateful_proxy.c
index d83ec91..695f532 100644
--- a/pjsip-apps/src/samples/stateful_proxy.c
+++ b/pjsip-apps/src/samples/stateful_proxy.c
@@ -251,7 +251,7 @@
 	
 	/* Find the UAS INVITE transaction */
 	pjsip_tsx_create_key(rdata->tp_info.pool, &key, PJSIP_UAS_ROLE,
-			     &pjsip_invite_method, rdata);
+			     pjsip_get_invite_method(), rdata);
 	invite_uas = pjsip_tsx_layer_find_tsx(&key, PJ_TRUE);
 	if (!invite_uas) {
 	    /* Invite transaction not found, respond CANCEL with 481 */
diff --git a/pjsip-apps/src/symbian_ua/ua.cpp b/pjsip-apps/src/symbian_ua/ua.cpp
index f3f9b70..c75432b 100644
--- a/pjsip-apps/src/symbian_ua/ua.cpp
+++ b/pjsip-apps/src/symbian_ua/ua.cpp
@@ -438,12 +438,12 @@
     PJ_LOG(3, (THIS_FILE, "\n\n"
 	    "Menu:\n"
 	    "  d    Dump states\n"
-	    "  D    Dump all states (detail)\n"
+	    "  D    Dump states detail\n"
 	    "  P    Dump pool factory\n"
-	    "  m    Make call to " SIP_DST_URI "\n"
+	    "  m    Call " SIP_DST_URI "\n"
 	    "  a    Answer call\n"
 	    "  h    Hangup all calls\n"
-	    "  s    Subscribe to " SIP_DST_URI "\n"
+	    "  s    Subscribe " SIP_DST_URI "\n"
 	    "  S    Unsubscribe presence\n"
 	    "  o    Set account online\n"
 	    "  O    Set account offline\n"
@@ -467,7 +467,7 @@
 	    break;
     case 'p':
     case 'P':
-	    pj_pool_factory_dump(&pjsua_var.cp.factory, PJ_TRUE);
+	    pj_pool_factory_dump(pjsua_get_pool_factory(), PJ_TRUE);
 	    break;
     case 'm':
 	    if (g_call_id != PJSUA_INVALID_ID) {
diff --git a/pjsip/include/pjsip-simple/errno.h b/pjsip/include/pjsip-simple/errno.h
index 911333c..ab3d4ec 100644
--- a/pjsip/include/pjsip-simple/errno.h
+++ b/pjsip/include/pjsip-simple/errno.h
@@ -19,9 +19,10 @@
 #ifndef __PJSIP_SIMPLE_ERRNO_H__
 #define __PJSIP_SIMPLE_ERRNO_H__
 
-
 #include <pjsip/sip_errno.h>
 
+PJ_BEGIN_DECL
+
 /**
  * Start of error code relative to PJ_ERRNO_START_USER.
  */
@@ -87,6 +88,25 @@
  */
 #define PJSIP_SIMPLE_EBADISCOMPOSE  (PJSIP_SIMPLE_ERRNO_START+40)   /*270040*/
 
+/**
+ * Get error message for the specified error code. Note that this
+ * function is only able to decode PJSIP-SIMPLE specific error code.
+ * Application should use pj_strerror(), which should be able to
+ * decode all error codes belonging to all subsystems (e.g. pjlib,
+ * pjmedia, pjsip, etc).
+ *
+ * @param status    The error code.
+ * @param buffer    The buffer where to put the error message.
+ * @param bufsize   Size of the buffer.
+ *
+ * @return	    The error message as NULL terminated string,
+ *                  wrapped with pj_str_t.
+ */
+PJ_DECL(pj_str_t) pjsipsimple_strerror(pj_status_t status, 
+				       char *buffer, pj_size_t bufsize);
+
+
+PJ_END_DECL
 
 #endif	/* __PJSIP_SIMPLE_ERRNO_H__ */
 
diff --git a/pjsip/include/pjsip-simple/evsub.h b/pjsip/include/pjsip-simple/evsub.h
index 3f67590..1c3ee97 100644
--- a/pjsip/include/pjsip-simple/evsub.h
+++ b/pjsip/include/pjsip-simple/evsub.h
@@ -202,15 +202,24 @@
 
 
 /**
+ * SUBSCRIBE method constant. @see pjsip_get_subscribe_method()
+ */
+PJ_DECL_DATA(const pjsip_method) pjsip_subscribe_method;
+
+/**
+ * NOTIFY method constant. @see pjsip_get_notify_method()
+ */
+PJ_DECL_DATA(const pjsip_method) pjsip_notify_method;
+
+/**
  * SUBSCRIBE method constant.
  */
-extern const pjsip_method pjsip_subscribe_method;
+PJ_DECL(const pjsip_method*) pjsip_get_subscribe_method();
 
 /**
  * NOTIFY method constant.
  */
-extern const pjsip_method pjsip_notify_method;
-
+PJ_DECL(const pjsip_method*) pjsip_get_notify_method();
 
 
 /**
diff --git a/pjsip/include/pjsip-simple/evsub_msg.h b/pjsip/include/pjsip-simple/evsub_msg.h
index a27e07a..f1c3f4b 100644
--- a/pjsip/include/pjsip-simple/evsub_msg.h
+++ b/pjsip/include/pjsip-simple/evsub_msg.h
@@ -104,7 +104,7 @@
 /**
  * Initialize parser for event notify module.
  */
-PJ_DEF(void) pjsip_evsub_init_parser(void);
+PJ_DECL(void) pjsip_evsub_init_parser(void);
 
 
 PJ_END_DECL
diff --git a/pjsip/include/pjsip-ua/sip_xfer.h b/pjsip/include/pjsip-ua/sip_xfer.h
index cbc3a7d..2ad9324 100644
--- a/pjsip/include/pjsip-ua/sip_xfer.h
+++ b/pjsip/include/pjsip-ua/sip_xfer.h
@@ -61,10 +61,11 @@
 PJ_BEGIN_DECL
 
 
-/**
- * Declaration for REFER method constant.
- */
-extern const pjsip_method pjsip_refer_method;
+/** Declaration for REFER method constant. */
+PJ_DECL_DATA(const pjsip_method) pjsip_refer_method;
+
+/** Get REFER method constant */
+PJ_DECL(const pjsip_method*) pjsip_get_refer_method();
 
 
 /**
diff --git a/pjsip/include/pjsip/sip_config.h b/pjsip/include/pjsip/sip_config.h
index c591e0d..846c2a5 100644
--- a/pjsip/include/pjsip/sip_config.h
+++ b/pjsip/include/pjsip/sip_config.h
@@ -467,9 +467,9 @@
 #define PJSIP_POOL_INC_USER_AGENT	1024
 
 /* Message/URL related constants. */
-#define PJSIP_MAX_CALL_ID_LEN		PJ_GUID_STRING_LENGTH
-#define PJSIP_MAX_TAG_LEN		PJ_GUID_STRING_LENGTH
-#define PJSIP_MAX_BRANCH_LEN		(PJSIP_RFC3261_BRANCH_LEN + PJ_GUID_STRING_LENGTH + 2)
+#define PJSIP_MAX_CALL_ID_LEN		pj_GUID_STRING_LENGTH()
+#define PJSIP_MAX_TAG_LEN		pj_GUID_STRING_LENGTH()
+#define PJSIP_MAX_BRANCH_LEN		(PJSIP_RFC3261_BRANCH_LEN + pj_GUID_STRING_LENGTH() + 2)
 #define PJSIP_MAX_HNAME_LEN		64
 
 /* Dialog related constants. */
diff --git a/pjsip/include/pjsip/sip_dialog.h b/pjsip/include/pjsip/sip_dialog.h
index 00768ff..626ec08 100644
--- a/pjsip/include/pjsip/sip_dialog.h
+++ b/pjsip/include/pjsip/sip_dialog.h
@@ -86,6 +86,7 @@
     PJSIP_DIALOG_STATE_ESTABLISHED
 } pjsip_dialog_state;
 
+
 /**
  * This structure describes the dialog structure. Application MUST NOT
  * try to SET the values here directly, but instead it MUST use the
@@ -126,6 +127,7 @@
     pjsip_role_e	role;	    /**< Initial role.			    */
     pj_bool_t		uac_has_2xx;/**< UAC has received 2xx response?	    */
     pj_bool_t		secure;	    /**< Use secure transport?		    */
+    pj_bool_t		add_allow;  /**< Add Allow header in requests?	    */
     pjsip_cid_hdr      *call_id;    /**< Call-ID header.		    */
     pjsip_route_hdr	route_set;  /**< Route set.			    */
     pjsip_auth_clt_sess	auth_sess;  /**< Client authentication session.	    */
diff --git a/pjsip/include/pjsip/sip_errno.h b/pjsip/include/pjsip/sip_errno.h
index 11823c9..0e5ae2f 100644
--- a/pjsip/include/pjsip/sip_errno.h
+++ b/pjsip/include/pjsip/sip_errno.h
@@ -487,6 +487,22 @@
 #define PJSIP_TLS_ETIMEDOUT	(PJSIP_ERRNO_START_PJSIP+172)	/* 171172 */
 
 
+/**
+ * Get error message for the specified error code. Note that this
+ * function is only able to decode PJSIP specific error code.
+ * Application should use pj_strerror(), which should be able to
+ * decode all error codes belonging to all subsystems (e.g. pjlib,
+ * pjmedia, pjsip, etc).
+ *
+ * @param status    The error code.
+ * @param buffer    The buffer where to put the error message.
+ * @param bufsize   Size of the buffer.
+ *
+ * @return	    The error message as NULL terminated string,
+ *                  wrapped with pj_str_t.
+ */
+PJ_DECL(pj_str_t) pjsip_strerror(pj_status_t status, 
+				 char *buffer, pj_size_t bufsize);
 
 
 PJ_END_DECL
@@ -497,3 +513,4 @@
  */
 
 #endif	/* __PJSIP_SIP_ERRNO_H__ */
+
diff --git a/pjsip/include/pjsip/sip_event.h b/pjsip/include/pjsip/sip_event.h
index 0df0c04..e4b27ca 100644
--- a/pjsip/include/pjsip/sip_event.h
+++ b/pjsip/include/pjsip/sip_event.h
@@ -218,7 +218,7 @@
  * @param e the event ID.
  * @note defined in sip_util.c
  */
-PJ_DEF(const char *) pjsip_event_str(pjsip_event_id_e e);
+PJ_DECL(const char *) pjsip_event_str(pjsip_event_id_e e);
 
 /**
  * @}
diff --git a/pjsip/include/pjsip/sip_msg.h b/pjsip/include/pjsip/sip_msg.h
index 7a30352..906c4a5 100644
--- a/pjsip/include/pjsip/sip_msg.h
+++ b/pjsip/include/pjsip/sip_msg.h
@@ -84,13 +84,44 @@
 /*
  * For convenience, standard method structures are defined in the library.
  */
-extern const pjsip_method pjsip_invite_method;	    /**< INVITE structure.  */
-extern const pjsip_method pjsip_cancel_method;	    /**< CANCEL structure.  */
-extern const pjsip_method pjsip_ack_method;	    /**< ACK structure.     */
-extern const pjsip_method pjsip_bye_method;	    /**< BYE structure.     */
-extern const pjsip_method pjsip_register_method;    /**< REGISTER structure.*/
-extern const pjsip_method pjsip_options_method;	    /**< OPTIONS structure. */
+/** INVITE method constant. @see pjsip_get_invite_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_invite_method;
 
+/** CANCEL method constant. @see pjsip_get_cancel_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_cancel_method;
+
+/** ACK method constant. @see pjsip_get_ack_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_ack_method;
+
+/** BYE method constant. @see pjsip_get_bye_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_bye_method;
+
+/** REGISTER method constant. @see pjsip_get_register_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_register_method;
+
+/** OPTIONS method constant. @see pjsip_get_options_method() */
+PJ_DECL_DATA(const pjsip_method) pjsip_options_method;
+
+/*
+ * Accessor functions for standard SIP methods.
+ */
+/** Get INVITE method constant. */
+PJ_DECL(const pjsip_method*) pjsip_get_invite_method(void);
+/** Get CANCEL method constant. */
+PJ_DECL(const pjsip_method*) pjsip_get_cancel_method(void);
+/** Get ACK method constant. */
+PJ_DECL(const pjsip_method*) pjsip_get_ack_method(void);
+/** Get BYE method constant. */
+PJ_DECL(const pjsip_method*) pjsip_get_bye_method(void);
+/** Get REGISTER method constant.*/
+PJ_DECL(const pjsip_method*) pjsip_get_register_method(void);
+/** Get OPTIONS method constant. */
+PJ_DECL(const pjsip_method*) pjsip_get_options_method(void);
+
+
+/*
+ * Accessor functions
+ */
 
 /** 
  * Initialize the method structure from a string. 
diff --git a/pjsip/include/pjsip/sip_parser.h b/pjsip/include/pjsip/sip_parser.h
index ef8277f..804aed1 100644
--- a/pjsip/include/pjsip/sip_parser.h
+++ b/pjsip/include/pjsip/sip_parser.h
@@ -315,51 +315,64 @@
  */
 
 
-/*
- * Various specification used in parsing, exported here as extern for other
- * parsers.
+/**
+ * Parser constants. @see pjsip_parser_const()
  */
-extern pj_cis_t    
-    pjsip_HOST_SPEC,		/**< For scanning host part. */
-    pjsip_DIGIT_SPEC,		/**< Decimal digits */
-    pjsip_ALPHA_SPEC,		/**< Alpha (A-Z, a-z) */
-    pjsip_ALNUM_SPEC,		/**< Decimal + Alpha. */
-    pjsip_TOKEN_SPEC,		/**< Token. */
-    pjsip_TOKEN_SPEC_ESC,	/**< Token without '%' character */
-    pjsip_HEX_SPEC,	        /**< Hexadecimal digits. */
-    pjsip_PARAM_CHAR_SPEC,      /**< For scanning pname (or pvalue when it's 
-				     not quoted.) in URI */
-    pjsip_PARAM_CHAR_SPEC_ESC,	/**< Variant without the escape ('%') char */
-    pjsip_HDR_CHAR_SPEC,	/**< Chars in hname/havalue in URL. */
-    pjsip_HDR_CHAR_SPEC_ESC,	/**< Variant without the escape ('%') char */
-    pjsip_PROBE_USER_HOST_SPEC, /**< Hostname characters. */
-    pjsip_PASSWD_SPEC,		/**< Password. */
-    pjsip_PASSWD_SPEC_ESC,	/**< Variant without the escape ('%') char */
-    pjsip_USER_SPEC,		/**< User */
-    pjsip_USER_SPEC_ESC,	/**< Variant without the escape ('%') char */
-    pjsip_NOT_NEWLINE,		/**< For eating up header, basicly any chars
-				     except newlines or zero. */
-    pjsip_NOT_COMMA_OR_NEWLINE, /**< Array elements. */
-    pjsip_DISPLAY_SPEC;		/**< Used when searching for display name. */
+typedef struct pjsip_parser_const_t
+{
+    const pj_str_t pjsip_USER_STR;	/**< "user" string constant.    */
+    const pj_str_t pjsip_METHOD_STR;	/**< "method" string constant   */
+    const pj_str_t pjsip_TRANSPORT_STR;	/**< "transport" string const.  */
+    const pj_str_t pjsip_MADDR_STR;	/**< "maddr" string const.	*/
+    const pj_str_t pjsip_LR_STR;	/**< "lr" string const.		*/
+    const pj_str_t pjsip_SIP_STR;	/**< "sip" string constant.	*/
+    const pj_str_t pjsip_SIPS_STR;	/**< "sips" string constant.    */
+    const pj_str_t pjsip_TEL_STR;	/**< "tel" string constant.	*/
+    const pj_str_t pjsip_BRANCH_STR;	/**< "branch" string constant.  */
+    const pj_str_t pjsip_TTL_STR;	/**< "ttl" string constant.	*/
+    const pj_str_t pjsip_RECEIVED_STR;	/**< "received" string const.   */
+    const pj_str_t pjsip_Q_STR;		/**< "q" string constant.	*/
+    const pj_str_t pjsip_EXPIRES_STR;	/**< "expires" string constant. */
+    const pj_str_t pjsip_TAG_STR;	/**< "tag" string constant.	*/
+    const pj_str_t pjsip_RPORT_STR;	/**< "rport" string const.	*/
 
-/*
- * Various string constants.
+    pj_cis_t pjsip_HOST_SPEC;		/**< For scanning host part.	*/
+    pj_cis_t pjsip_DIGIT_SPEC;		/**< Decimal digits		*/
+    pj_cis_t pjsip_ALPHA_SPEC;		/**< Alpha (A-Z, a-z)		*/
+    pj_cis_t pjsip_ALNUM_SPEC;		/**< Decimal + Alpha.		*/
+    pj_cis_t pjsip_TOKEN_SPEC;		/**< Token.			*/
+    pj_cis_t pjsip_TOKEN_SPEC_ESC;	/**< Token without '%' character */
+    pj_cis_t pjsip_HEX_SPEC;  		/**< Hexadecimal digits.	*/
+    pj_cis_t pjsip_PARAM_CHAR_SPEC;	/**< For scanning pname (or pvalue
+					     when it's  not quoted.) in URI */
+    pj_cis_t pjsip_PARAM_CHAR_SPEC_ESC;	/**< Variant without the escape ('%')
+					     char			*/
+    pj_cis_t pjsip_HDR_CHAR_SPEC;	/**< Chars in hname/havalue in URL. */
+    pj_cis_t pjsip_HDR_CHAR_SPEC_ESC;	/**< Variant without the escape ('%')
+					     char			*/
+    pj_cis_t pjsip_PROBE_USER_HOST_SPEC;/**< Hostname characters.	*/
+    pj_cis_t pjsip_PASSWD_SPEC;		/**< Password.			*/
+    pj_cis_t pjsip_PASSWD_SPEC_ESC;	/**< Variant without the escape ('%')
+					     char			*/
+    pj_cis_t pjsip_USER_SPEC;		/**< User */
+    pj_cis_t pjsip_USER_SPEC_ESC;	/**< Variant without the escape ('%')
+					     char			*/
+    pj_cis_t pjsip_USER_SPEC_LENIENT;	/**< User, with additional '#' char */
+    pj_cis_t pjsip_USER_SPEC_LENIENT_ESC;/**< pjsip_USER_SPEC_ESC with '#' */
+    pj_cis_t pjsip_NOT_NEWLINE;		/**< For eating up header, basically
+					     any chars except newlines or 
+					     zero.			*/
+    pj_cis_t pjsip_NOT_COMMA_OR_NEWLINE;/**< Array elements.		*/
+    pj_cis_t pjsip_DISPLAY_SPEC;	/**< Used when searching for display
+					     name.			*/
+
+} pjsip_parser_const_t;
+
+
+/**
+ * Get parser constants.
  */
-extern const pj_str_t pjsip_USER_STR,	    /**< "user" string constant.    */
-		      pjsip_METHOD_STR,	    /**< "method" string constant   */
-		      pjsip_TRANSPORT_STR,  /**< "transport" string const.  */
-		      pjsip_MADDR_STR,	    /**< "maddr" string const.	    */
-		      pjsip_LR_STR,	    /**< "lr" string const.	    */
-		      pjsip_SIP_STR,	    /**< "sip" string constant.	    */
-		      pjsip_SIPS_STR,	    /**< "sips" string constant.    */
-		      pjsip_TEL_STR,	    /**< "tel" string constant.	    */
-		      pjsip_BRANCH_STR,	    /**< "branch" string constant.  */
-		      pjsip_TTL_STR,	    /**< "ttl" string constant.	    */
-		      pjsip_RECEIVED_STR,   /**< "received" string const.   */
-		      pjsip_Q_STR,	    /**< "q" string constant.	    */
-		      pjsip_EXPIRES_STR,    /**< "expires" string constant. */
-		      pjsip_TAG_STR,	    /**< "tag" string constant.	    */
-		      pjsip_RPORT_STR;	    /**< "rport" string const.	    */
+PJ_DECL(const pjsip_parser_const_t*) pjsip_parser_const(void);
 
 
 /*
@@ -371,17 +384,18 @@
 };
 
 /* Parse parameter in header (matching the character as token) */
-void pjsip_parse_param_imp(  pj_scanner *scanner, pj_pool_t *pool,
-			     pj_str_t *pname, pj_str_t *pvalue,
-			     unsigned opt);
+PJ_DECL(void) pjsip_parse_param_imp(pj_scanner *scanner, pj_pool_t *pool,
+			     	    pj_str_t *pname, pj_str_t *pvalue,
+			     	    unsigned opt);
 /* Parse parameter in URL (matching the character as paramchar) */
-void pjsip_parse_uri_param_imp(  pj_scanner *scanner, pj_pool_t *pool,
-				 pj_str_t *pname, pj_str_t *pvalue,
-				 unsigned opt);
-void pjsip_concat_param_imp( pj_str_t *param, pj_pool_t *pool, 
-			     const pj_str_t *pname, const pj_str_t *pvalue, 
-			     int sepchar);
-void pjsip_parse_end_hdr_imp ( pj_scanner *scanner );
+PJ_DECL(void) pjsip_parse_uri_param_imp(pj_scanner *scanner, pj_pool_t *pool,
+				 	pj_str_t *pname, pj_str_t *pvalue,
+				 	unsigned opt);
+PJ_DECL(void) pjsip_concat_param_imp(pj_str_t *param, pj_pool_t *pool, 
+			     	     const pj_str_t *pname, 
+				     const pj_str_t *pvalue, 
+			     	     int sepchar);
+PJ_DECL(void) pjsip_parse_end_hdr_imp ( pj_scanner *scanner );
 
 PJ_END_DECL
 
diff --git a/pjsip/include/pjsip/sip_ua_layer.h b/pjsip/include/pjsip/sip_ua_layer.h
index e08d739..67d3e64 100644
--- a/pjsip/include/pjsip/sip_ua_layer.h
+++ b/pjsip/include/pjsip/sip_ua_layer.h
@@ -114,7 +114,7 @@
  *
  * @param detail	If non-zero, list of dialogs will be printed.
  */
-PJ_DEF(void) pjsip_ua_dump(pj_bool_t detail);
+PJ_DECL(void) pjsip_ua_dump(pj_bool_t detail);
 
 /**
  * Get the endpoint instance of a user agent module.
diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 78f8b1b..7379324 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -474,16 +474,8 @@
  logging_cfg = py_pjsua.logging_config_default()
  * \endcode
  */
-PJ_INLINE(void) pjsua_logging_config_default(pjsua_logging_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
+PJ_DECL(void) pjsua_logging_config_default(pjsua_logging_config *cfg);
 
-    cfg->msg_logging = PJ_TRUE;
-    cfg->level = 5;
-    cfg->console_level = 4;
-    cfg->decor = PJ_LOG_HAS_SENDER | PJ_LOG_HAS_TIME | 
-		 PJ_LOG_HAS_MICRO_SEC | PJ_LOG_HAS_NEWLINE;
-}
 
 /**
  * Use this function to duplicate logging config.
@@ -496,14 +488,9 @@
  * Not available (for now). Ideally we should be able to just assign
  * one config to another, but this has not been tested.
  */
-PJ_INLINE(void) pjsua_logging_config_dup(pj_pool_t *pool,
-					 pjsua_logging_config *dst,
-					 const pjsua_logging_config *src)
-{
-    pj_memcpy(dst, src, sizeof(*src));
-    pj_strdup_with_null(pool, &dst->log_filename, &src->log_filename);
-}
-
+PJ_DECL(void) pjsua_logging_config_dup(pj_pool_t *pool,
+				       pjsua_logging_config *dst,
+				       const pjsua_logging_config *src);
 
 
 /**
@@ -1015,13 +1002,7 @@
  * \endcode
 
  */
-PJ_INLINE(void) pjsua_config_default(pjsua_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
-
-    cfg->max_calls = 4;
-    cfg->thread_cnt = 1;
-}
+PJ_DECL(void) pjsua_config_default(pjsua_config *cfg);
 
 
 /**
@@ -1035,16 +1016,9 @@
  * Not applicable (for now). Probably we could just assign one credential
  * variable to another, but this has not been tested.
  */
-PJ_INLINE(void) pjsip_cred_dup( pj_pool_t *pool,
-				pjsip_cred_info *dst,
-				const pjsip_cred_info *src)
-{
-    pj_strdup_with_null(pool, &dst->realm, &src->realm);
-    pj_strdup_with_null(pool, &dst->scheme, &src->scheme);
-    pj_strdup_with_null(pool, &dst->username, &src->username);
-    pj_strdup_with_null(pool, &dst->data, &src->data);
-
-}
+PJ_DECL(void) pjsip_cred_dup( pj_pool_t *pool,
+			      pjsip_cred_info *dst,
+			      const pjsip_cred_info *src);
 
 
 /**
@@ -1054,29 +1028,9 @@
  * @param dst	    Destination config.
  * @param src	    Source config.
  */
-PJ_INLINE(void) pjsua_config_dup(pj_pool_t *pool,
-				 pjsua_config *dst,
-				 const pjsua_config *src)
-{
-    unsigned i;
-
-    pj_memcpy(dst, src, sizeof(*src));
-
-    for (i=0; i<src->outbound_proxy_cnt; ++i) {
-	pj_strdup_with_null(pool, &dst->outbound_proxy[i],
-			    &src->outbound_proxy[i]);
-    }
-
-    for (i=0; i<src->cred_count; ++i) {
-	pjsip_cred_dup(pool, &dst->cred_info[i], &src->cred_info[i]);
-    }
-
-    pj_strdup_with_null(pool, &dst->user_agent, &src->user_agent);
-    pj_strdup_with_null(pool, &dst->stun_domain, &src->stun_domain);
-    pj_strdup_with_null(pool, &dst->stun_host, &src->stun_host);
-    pj_strdup_with_null(pool, &dst->stun_relay_host, &src->stun_relay_host);
-}
-
+PJ_DECL(void) pjsua_config_dup(pj_pool_t *pool,
+			       pjsua_config *dst,
+			       const pjsua_config *src);
 
 
 /**
@@ -1137,12 +1091,7 @@
     msg_data = py_pjsua.msg_data_init()
  * \endcode
  */
-PJ_INLINE(void) pjsua_msg_data_init(pjsua_msg_data *msg_data)
-{
-    pj_bzero(msg_data, sizeof(*msg_data));
-    pj_list_init(&msg_data->hdr_list);
-}
-
+PJ_DECL(void) pjsua_msg_data_init(pjsua_msg_data *msg_data);
 
 
 /**
@@ -1485,11 +1434,7 @@
     transport_cfg = py_pjsua.transport_config_default()
  * \endcode
  */
-PJ_INLINE(void) pjsua_transport_config_default(pjsua_transport_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
-    pjsip_tls_setting_default(&cfg->tls_setting);
-}
+PJ_DECL(void) pjsua_transport_config_default(pjsua_transport_config *cfg);
 
 
 /**
@@ -1503,14 +1448,9 @@
  * Not applicable. One should be able to just copy one variable instance
  * to another in Python.
  */
-PJ_INLINE(void) pjsua_transport_config_dup(pj_pool_t *pool,
-					   pjsua_transport_config *dst,
-					   const pjsua_transport_config *src)
-{
-    PJ_UNUSED_ARG(pool);
-    pj_memcpy(dst, src, sizeof(*src));
-}
-
+PJ_DECL(void) pjsua_transport_config_dup(pj_pool_t *pool,
+					 pjsua_transport_config *dst,
+					 const pjsua_transport_config *src);
 
 
 /**
@@ -1916,14 +1856,7 @@
     acc_cfg = py_pjsua.acc_config_default()
  * \endcode
  */
-PJ_INLINE(void) pjsua_acc_config_default(pjsua_acc_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
-
-    cfg->reg_timeout = PJSUA_REG_INTERVAL;
-    cfg->transport_id = PJSUA_INVALID_ID;
-}
-
+PJ_DECL(void) pjsua_acc_config_default(pjsua_acc_config *cfg);
 
 
 /**
@@ -3064,10 +2997,7 @@
     buddy_cfg = py_pjsua.buddy_config_default()
  * \endcode
  */
-PJ_INLINE(void) pjsua_buddy_config_default(pjsua_buddy_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
-}
+PJ_DECL(void) pjsua_buddy_config_default(pjsua_buddy_config *cfg);
 
 
 /**
@@ -3555,20 +3485,7 @@
     media_cfg = py_pjsua.media_config_default()
  * \endcode
  */
-PJ_INLINE(void) pjsua_media_config_default(pjsua_media_config *cfg)
-{
-    pj_bzero(cfg, sizeof(*cfg));
-
-    cfg->clock_rate = PJSUA_DEFAULT_CLOCK_RATE;
-    cfg->max_media_ports = 32;
-    cfg->has_ioqueue = PJ_TRUE;
-    cfg->thread_cnt = 1;
-    cfg->quality = PJSUA_DEFAULT_CODEC_QUALITY;
-    cfg->ilbc_mode = PJSUA_DEFAULT_ILBC_MODE;
-    cfg->ec_tail_len = PJSUA_DEFAULT_EC_TAIL_LEN;
-    cfg->jb_init = cfg->jb_min_pre = cfg->jb_max_pre = cfg->jb_max = -1;
-}
-
+PJ_DECL(void) pjsua_media_config_default(pjsua_media_config *cfg);
 
 
 /**
diff --git a/pjsip/src/pjsip-simple/evsub.c b/pjsip/src/pjsip-simple/evsub.c
index 61a268d..b3ef031 100644
--- a/pjsip/src/pjsip-simple/evsub.c
+++ b/pjsip/src/pjsip-simple/evsub.c
@@ -49,18 +49,35 @@
     PJSIP_NOTIFY_METHOD = PJSIP_OTHER_METHOD
 };
 
-const pjsip_method pjsip_subscribe_method = 
+PJ_DEF_DATA(const pjsip_method) pjsip_subscribe_method = 
 {
     (pjsip_method_e) PJSIP_SUBSCRIBE_METHOD,
     { "SUBSCRIBE", 9 }
 };
 
-const pjsip_method pjsip_notify_method = 
+PJ_DEF_DATA(const pjsip_method) pjsip_notify_method = 
 {
     (pjsip_method_e) PJSIP_NOTIFY_METHOD,
     { "NOTIFY", 6 }
 };
 
+/**
+ * SUBSCRIBE method constant.
+ */
+PJ_DEF(const pjsip_method*) pjsip_get_subscribe_method()
+{
+    return &pjsip_subscribe_method;
+}
+
+/**
+ * NOTIFY method constant.
+ */
+PJ_DEF(const pjsip_method*) pjsip_get_notify_method()
+{
+    return &pjsip_notify_method;
+}
+
+
 /*
  * Static prototypes.
  */
@@ -1112,8 +1129,8 @@
     pjsip_dlg_inc_lock(sub->dlg);
 
     /* Create NOTIFY request */
-    status = pjsip_dlg_create_request( sub->dlg, &pjsip_notify_method, -1, 
-				       &tdata);
+    status = pjsip_dlg_create_request( sub->dlg, pjsip_get_notify_method(), 
+				       -1, &tdata);
     if (status != PJ_SUCCESS)
 	goto on_return;
 
diff --git a/pjsip/src/pjsip-simple/evsub_msg.c b/pjsip/src/pjsip-simple/evsub_msg.c
index 467345d..19058b1 100644
--- a/pjsip/src/pjsip-simple/evsub_msg.c
+++ b/pjsip/src/pjsip-simple/evsub_msg.c
@@ -61,6 +61,7 @@
     char *p = buf;
     char *endbuf = buf+size;
     int printed;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     copy_advance(p, hdr->name);
     *p++ = ':';
@@ -70,8 +71,8 @@
     copy_advance_pair(p, ";id=", 4, hdr->id_param);
     
     printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p,
-				   &pjsip_TOKEN_SPEC, 
-				   &pjsip_TOKEN_SPEC, ';');
+				   &pc->pjsip_TOKEN_SPEC, 
+				   &pc->pjsip_TOKEN_SPEC, ';');
     if (printed < 0)
 	return printed;
 
@@ -159,6 +160,7 @@
     char *p = buf;
     char *endbuf = buf+size;
     int printed;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     copy_advance(p, hdr->name);
     *p++ = ':';
@@ -180,8 +182,8 @@
     }
     
     printed = pjsip_param_print_on( &hdr->other_param, p, endbuf-p, 
-				    &pjsip_TOKEN_SPEC,
-				    &pjsip_TOKEN_SPEC,
+				    &pc->pjsip_TOKEN_SPEC,
+				    &pc->pjsip_TOKEN_SPEC,
 				    ';');
     if (printed < 0)
 	return printed;
@@ -222,8 +224,9 @@
 {
     pjsip_event_hdr *hdr = pjsip_event_hdr_create(ctx->pool);
     const pj_str_t id_param = { "id", 2 };
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
-    pj_scan_get(ctx->scanner, &pjsip_TOKEN_SPEC, &hdr->event_type);
+    pj_scan_get(ctx->scanner, &pc->pjsip_TOKEN_SPEC, &hdr->event_type);
 
     while (*ctx->scanner->curptr == ';') {
 	pj_str_t pname, pvalue;
@@ -253,7 +256,9 @@
     const pj_str_t reason = { "reason", 6 },
 		   expires = { "expires", 7 },
 		   retry_after = { "retry-after", 11 };
-    pj_scan_get(ctx->scanner, &pjsip_TOKEN_SPEC, &hdr->sub_state);
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
+
+    pj_scan_get(ctx->scanner, &pc->pjsip_TOKEN_SPEC, &hdr->sub_state);
 
     while (*ctx->scanner->curptr == ';') {
 	pj_str_t pname, pvalue;
diff --git a/pjsip/src/pjsip-ua/sip_inv.c b/pjsip/src/pjsip-ua/sip_inv.c
index 1ff497b..9f56176 100644
--- a/pjsip/src/pjsip-ua/sip_inv.c
+++ b/pjsip/src/pjsip-ua/sip_inv.c
@@ -113,9 +113,6 @@
     pj_bool_t		 sdp_done;
 };
 
-/* Config */
-extern pj_bool_t pjsip_include_allow_hdr_in_dlg;
-
 /*
  * Module load()
  */
@@ -223,7 +220,7 @@
     PJ_LOG(5,(inv->obj_name, "Received %s, sending ACK",
 	      pjsip_rx_data_get_info(rdata)));
 
-    status = pjsip_dlg_create_request(inv->dlg, &pjsip_ack_method, 
+    status = pjsip_dlg_create_request(inv->dlg, pjsip_get_ack_method(), 
 				      rdata->msg_info.cseq->cseq, &tdata);
     if (status != PJ_SUCCESS) {
 	/* Better luck next time */
@@ -1108,7 +1105,7 @@
     pjsip_dlg_inc_lock(inv->dlg);
 
     /* Create the INVITE request. */
-    status = pjsip_dlg_create_request(inv->dlg, &pjsip_invite_method, -1,
+    status = pjsip_dlg_create_request(inv->dlg, pjsip_get_invite_method(), -1,
 				      &tdata);
     if (status != PJ_SUCCESS)
 	goto on_return;
@@ -1155,7 +1152,7 @@
     }
 
     /* Add Allow header. */
-    if (pjsip_include_allow_hdr_in_dlg) {
+    if (inv->dlg->add_allow) {
 	hdr = pjsip_endpt_get_capability(inv->dlg->endpt, PJSIP_H_ALLOW, NULL);
 	if (hdr) {
 	    pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)
@@ -1597,8 +1594,8 @@
     case PJSIP_INV_STATE_CONNECTING:
     case PJSIP_INV_STATE_CONFIRMED:
 	/* For established dialog, send BYE */
-	status = pjsip_dlg_create_request(inv->dlg, &pjsip_bye_method, -1, 
-					  &tdata);
+	status = pjsip_dlg_create_request(inv->dlg, pjsip_get_bye_method(), 
+					  -1, &tdata);
 	break;
 
     case PJSIP_INV_STATE_DISCONNECTED:
@@ -1792,7 +1789,7 @@
     /* See if we have matching INVITE server transaction: */
 
     pjsip_tsx_create_key(rdata->tp_info.pool, &key, PJSIP_ROLE_UAS,
-			 &pjsip_invite_method, rdata);
+			 pjsip_get_invite_method(), rdata);
     invite_tsx = pjsip_tsx_layer_find_tsx(&key, PJ_TRUE);
 
     if (invite_tsx == NULL) {
diff --git a/pjsip/src/pjsip-ua/sip_reg.c b/pjsip/src/pjsip-ua/sip_reg.c
index 6a5c3c2..c04fe07 100644
--- a/pjsip/src/pjsip-ua/sip_reg.c
+++ b/pjsip/src/pjsip-ua/sip_reg.c
@@ -366,7 +366,7 @@
 
     /* Create the request. */
     status = pjsip_endpt_create_request_from_hdr( regc->endpt, 
-						  &pjsip_register_method,
+						  pjsip_get_register_method(),
 						  regc->srv_url,
 						  regc->from_hdr,
 						  regc->to_hdr,
diff --git a/pjsip/src/pjsip-ua/sip_replaces.c b/pjsip/src/pjsip-ua/sip_replaces.c
index 284c282..9b23394 100644
--- a/pjsip/src/pjsip-ua/sip_replaces.c
+++ b/pjsip/src/pjsip-ua/sip_replaces.c
@@ -68,6 +68,7 @@
     char *p = buf;
     char *endbuf = buf+size;
     int printed;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     copy_advance(p, hdr->name);
     *p++ = ':';
@@ -83,8 +84,8 @@
     }
     
     printed = pjsip_param_print_on(&hdr->other_param, p, endbuf-p,
-				   &pjsip_TOKEN_SPEC, 
-				   &pjsip_TOKEN_SPEC, ';');
+				   &pc->pjsip_TOKEN_SPEC, 
+				   &pc->pjsip_TOKEN_SPEC, ';');
     if (printed < 0)
 	return printed;
 
diff --git a/pjsip/src/pjsip-ua/sip_xfer.c b/pjsip/src/pjsip-ua/sip_xfer.c
index a4c4662..b9c41e8 100644
--- a/pjsip/src/pjsip-ua/sip_xfer.c
+++ b/pjsip/src/pjsip-ua/sip_xfer.c
@@ -57,11 +57,15 @@
     PJSIP_REFER_METHOD = PJSIP_OTHER_METHOD
 };
 
-const pjsip_method pjsip_refer_method = {
+PJ_DEF_DATA(const pjsip_method) pjsip_refer_method = {
     (pjsip_method_e) PJSIP_REFER_METHOD,
     { "REFER", 5}
 };
 
+PJ_DEF(const pjsip_method*) pjsip_get_refer_method()
+{
+    return &pjsip_refer_method;
+}
 
 /*
  * String constants
@@ -144,7 +148,8 @@
 	return status;
 
     status = pjsip_endpt_add_capability( endpt, &mod_xfer, PJSIP_H_ALLOW, 
-					 NULL, 1, &pjsip_refer_method.name);
+					 NULL, 1, 
+					 &pjsip_get_refer_method()->name);
     if (status != PJ_SUCCESS)
 	return status;
 
@@ -223,7 +228,7 @@
 
     /* Check that request is REFER */
     PJ_ASSERT_RETURN(pjsip_method_cmp(&rdata->msg_info.msg->line.req.method,
-				      &pjsip_refer_method)==0,
+				      pjsip_get_refer_method())==0,
 		     PJSIP_ENOTREFER);
 
     /* Lock dialog */
@@ -298,7 +303,7 @@
     pjsip_dlg_inc_lock(xfer->dlg);
 
     /* Create basic REFER request */
-    status = pjsip_evsub_initiate(sub, &pjsip_refer_method, -1, 
+    status = pjsip_evsub_initiate(sub, pjsip_get_refer_method(), -1, 
 				  &tdata);
     if (status != PJ_SUCCESS)
 	goto on_return;
diff --git a/pjsip/src/pjsip/sip_auth_msg.c b/pjsip/src/pjsip/sip_auth_msg.c
index 7b6cbc2..5cb7852 100644
--- a/pjsip/src/pjsip/sip_auth_msg.c
+++ b/pjsip/src/pjsip/sip_auth_msg.c
@@ -67,6 +67,7 @@
     int printed;
     char *startbuf = buf;
     char *endbuf = buf + size;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
     
     copy_advance_pair_quote_cond(buf, "username=", 9, cred->username, '"', '"');
     copy_advance_pair_quote_cond(buf, ", realm=", 8, cred->realm, '"', '"');
@@ -83,8 +84,8 @@
     copy_advance_pair(buf, ", nc=", 5, cred->nc);
     
     printed = pjsip_param_print_on(&cred->other_param, buf, endbuf-buf, 
-				   &pjsip_TOKEN_SPEC, 
-				   &pjsip_TOKEN_SPEC, ',');
+				   &pc->pjsip_TOKEN_SPEC, 
+				   &pc->pjsip_TOKEN_SPEC, ',');
     if (printed < 0)
 	return -1;
     buf += printed;
@@ -228,6 +229,7 @@
     int printed;
     char *startbuf = buf;
     char *endbuf = buf + size;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     copy_advance_pair_quote_cond(buf, " realm=", 7, chal->realm, '"', '"');
     copy_advance_pair_quote_cond(buf, ",domain=", 8, chal->domain, '"', '"');
@@ -241,8 +243,8 @@
     copy_advance_pair_quote_cond(buf, ",qop=", 5, chal->qop, '"', '"');
     
     printed = pjsip_param_print_on(&chal->other_param, buf, endbuf-buf, 
-				   &pjsip_TOKEN_SPEC, 
-				   &pjsip_TOKEN_SPEC, ',');
+				   &pc->pjsip_TOKEN_SPEC, 
+				   &pc->pjsip_TOKEN_SPEC, ',');
     if (printed < 0)
 	return -1;
     buf += printed;
diff --git a/pjsip/src/pjsip/sip_auth_parser.c b/pjsip/src/pjsip/sip_auth_parser.c
index fca1a41..a9ffea6 100644
--- a/pjsip/src/pjsip/sip_auth_parser.c
+++ b/pjsip/src/pjsip/sip_auth_parser.c
@@ -195,12 +195,14 @@
 static void int_parse_hdr_authorization( pj_scanner *scanner, pj_pool_t *pool,
 					 pjsip_authorization_hdr *hdr)
 {
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
+    
     if (*scanner->curptr == '"') {
 	pj_scan_get_quote(scanner, '"', '"', &hdr->scheme);
 	hdr->scheme.ptr++;
 	hdr->scheme.slen -= 2;
     } else {
-	pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &hdr->scheme);
+	pj_scan_get(scanner, &pc->pjsip_TOKEN_SPEC, &hdr->scheme);
     }
 
     if (!pj_stricmp(&hdr->scheme, &pjsip_DIGEST_STR)) {
@@ -221,12 +223,14 @@
 static void int_parse_hdr_authenticate( pj_scanner *scanner, pj_pool_t *pool, 
 					pjsip_www_authenticate_hdr *hdr)
 {
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
+
     if (*scanner->curptr == '"') {
 	pj_scan_get_quote(scanner, '"', '"', &hdr->scheme);
 	hdr->scheme.ptr++;
 	hdr->scheme.slen -= 2;
     } else {
-	pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &hdr->scheme);
+	pj_scan_get(scanner, &pc->pjsip_TOKEN_SPEC, &hdr->scheme);
     }
 
     if (!pj_stricmp(&hdr->scheme, &pjsip_DIGEST_STR)) {
diff --git a/pjsip/src/pjsip/sip_dialog.c b/pjsip/src/pjsip/sip_dialog.c
index 326696a..1295508 100644
--- a/pjsip/src/pjsip/sip_dialog.c
+++ b/pjsip/src/pjsip/sip_dialog.c
@@ -81,6 +81,7 @@
     dlg->ua = ua;
     dlg->endpt = endpt;
     dlg->state = PJSIP_DIALOG_STATE_NULL;
+    dlg->add_allow = pjsip_include_allow_hdr_in_dlg;
 
     pj_list_init(&dlg->inv_hdr);
 
@@ -1200,7 +1201,7 @@
 	}
 
 	/* Add Allow header in 2xx and 405 response. */
-	if (((st_class==2 && pjsip_include_allow_hdr_in_dlg)
+	if (((st_class==2 && dlg->add_allow)
 	     || st_code==405) &&
 	    pjsip_msg_find_hdr(tdata->msg, PJSIP_H_ALLOW, NULL)==NULL) 
 	{
diff --git a/pjsip/src/pjsip/sip_endpoint.c b/pjsip/src/pjsip/sip_endpoint.c
index 859c47d..ef279a8 100644
--- a/pjsip/src/pjsip/sip_endpoint.c
+++ b/pjsip/src/pjsip/sip_endpoint.c
@@ -34,7 +34,7 @@
 #include <pj/errno.h>
 #include <pj/lock.h>
 
-#define PJSIP_EX_NO_MEMORY  PJ_NO_MEMORY_EXCEPTION
+#define PJSIP_EX_NO_MEMORY  pj_NO_MEMORY_EXCEPTION()
 #define THIS_FILE	    "sip_endpoint.c"
 
 #define MAX_METHODS   32
@@ -117,24 +117,6 @@
 /* Specifies whether error subsystem has been registered to pjlib. */
 static int error_subsys_initialized;
 
-/**
- * Defined in sip_errno.c
- *
- * Get error message for the specified error code. This can only get
- * PJSIP specific error message. To get all types of error message,
- * use pj_strerror() instead.
- *
- * @param status    The error code.
- * @param buffer    The buffer where to put the error message.
- * @param bufsize   Size of the buffer.
- *
- * @return	    The error message as NULL terminated string,
- *                  wrapped with pj_str_t.
- */
-PJ_DECL(pj_str_t) pjsip_strerror( pj_status_t status, char *buffer,
-				  pj_size_t bufsize);
-
-
 /*
  * This is the global handler for memory allocation failure, for pools that
  * are created by the endpoint (by default, all pools ARE allocated by 
diff --git a/pjsip/src/pjsip/sip_msg.c b/pjsip/src/pjsip/sip_msg.c
index eb5348f..869cb59 100644
--- a/pjsip/src/pjsip/sip_msg.c
+++ b/pjsip/src/pjsip/sip_msg.c
@@ -24,13 +24,61 @@
 #include <pj/pool.h>
 #include <pj/assert.h>
 
-const pjsip_method 
-    pjsip_invite_method	    = { PJSIP_INVITE_METHOD,	{ "INVITE",6 }	},
-    pjsip_cancel_method	    = { PJSIP_CANCEL_METHOD,	{ "CANCEL",6 }	},
-    pjsip_ack_method	    = { PJSIP_ACK_METHOD,	{ "ACK",3}	},
-    pjsip_bye_method	    = { PJSIP_BYE_METHOD,	{ "BYE",3}	},
-    pjsip_register_method   = { PJSIP_REGISTER_METHOD,	{ "REGISTER",8}	},
-    pjsip_options_method    = { PJSIP_OPTIONS_METHOD,	{ "OPTIONS",7}	};
+PJ_DEF_DATA(const pjsip_method) pjsip_invite_method =
+	{ PJSIP_INVITE_METHOD, { "INVITE",6 }};
+
+PJ_DEF_DATA(const pjsip_method) pjsip_cancel_method =
+	{ PJSIP_CANCEL_METHOD, { "CANCEL",6 }};
+
+PJ_DEF_DATA(const pjsip_method) pjsip_ack_method =
+	{ PJSIP_ACK_METHOD, { "ACK",3}};
+
+PJ_DEF_DATA(const pjsip_method) pjsip_bye_method =
+	{ PJSIP_BYE_METHOD, { "BYE",3}};
+
+PJ_DEF_DATA(const pjsip_method) pjsip_register_method =
+	{ PJSIP_REGISTER_METHOD, { "REGISTER", 8}};
+
+PJ_DEF_DATA(const pjsip_method) pjsip_options_method =
+	{ PJSIP_OPTIONS_METHOD, { "OPTIONS",7}};
+
+
+/** INVITE method constant. */
+PJ_DEF(const pjsip_method*) pjsip_get_invite_method(void)
+{
+    return &pjsip_invite_method;
+}
+
+/** CANCEL method constant. */
+PJ_DEF(const pjsip_method*) pjsip_get_cancel_method(void)
+{
+    return &pjsip_cancel_method;
+}
+
+/** ACK method constant. */
+PJ_DEF(const pjsip_method*) pjsip_get_ack_method(void)
+{
+    return &pjsip_ack_method;
+}
+
+/** BYE method constant. */
+PJ_DEF(const pjsip_method*) pjsip_get_bye_method(void)
+{
+    return &pjsip_bye_method;
+}
+
+/** REGISTER method constant.*/
+PJ_DEF(const pjsip_method*) pjsip_get_register_method(void)
+{
+    return &pjsip_register_method;
+}
+
+/** OPTIONS method constant. */
+PJ_DEF(const pjsip_method*) pjsip_get_options_method(void)
+{
+    return &pjsip_options_method;
+}
+
 
 static const pj_str_t *method_names[] = 
 {
@@ -565,11 +613,10 @@
 }
 
 
-PJ_DEF(pjsip_generic_string_hdr*) 
-pjsip_generic_string_hdr_init( pj_pool_t *pool,
-			       void *mem,
-			       const pj_str_t *hnames,
-			       const pj_str_t *hvalue)
+PJ_DEF(pjsip_generic_string_hdr*) pjsip_generic_string_hdr_init(pj_pool_t *pool,
+					       void *mem,
+					       const pj_str_t *hnames,
+					       const pj_str_t *hvalue)
 {
     pjsip_generic_string_hdr *hdr = (pjsip_generic_string_hdr*) mem;
     pj_str_t dup_hname, dup_hval;
@@ -590,8 +637,7 @@
     return hdr;
 }
 
-PJ_DEF(pjsip_generic_string_hdr*) 
-pjsip_generic_string_hdr_create( pj_pool_t *pool,
+PJ_DEF(pjsip_generic_string_hdr*) pjsip_generic_string_hdr_create(pj_pool_t *pool,
 				 const pj_str_t *hnames,
 				 const pj_str_t *hvalue)
 {
@@ -1055,6 +1101,7 @@
 				    pj_size_t size)
 {
     const pj_str_t *hname = pjsip_use_compact_form? &hdr->sname : &hdr->name;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     if (hdr->star) {
 	char *p = buf;
@@ -1109,7 +1156,8 @@
 	}
 
 	printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf,
-				       &pjsip_TOKEN_SPEC, &pjsip_TOKEN_SPEC, 
+				       &pc->pjsip_TOKEN_SPEC,
+				       &pc->pjsip_TOKEN_SPEC, 
 				       ';');
 	if (printed < 0)
 	    return printed;
@@ -1346,6 +1394,7 @@
     char *startbuf = buf;
     char *endbuf = buf + size;
     const pj_str_t *hname = pjsip_use_compact_form? &hdr->sname : &hdr->name;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     copy_advance(buf, (*hname));
     *buf++ = ':';
@@ -1361,8 +1410,8 @@
     copy_advance_pair(buf, ";tag=", 5, hdr->tag);
 
     printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf, 
-				   &pjsip_TOKEN_SPEC,
-				   &pjsip_TOKEN_SPEC, ';');
+				   &pc->pjsip_TOKEN_SPEC,
+				   &pc->pjsip_TOKEN_SPEC, ';');
     if (printed < 0)
 	return -1;
     buf += printed;
@@ -1524,6 +1573,7 @@
     int printed;
     char *startbuf = buf;
     char *endbuf = buf + size;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
     /* Route and Record-Route don't compact forms */
 
     copy_advance(buf, hdr->name);
@@ -1537,8 +1587,8 @@
     buf += printed;
 
     printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf, 
-				   &pjsip_TOKEN_SPEC, 
-				   &pjsip_TOKEN_SPEC, ';');
+				   &pc->pjsip_TOKEN_SPEC, 
+				   &pc->pjsip_TOKEN_SPEC, ';');
     if (printed < 0)
 	return -1;
     buf += printed;
@@ -1704,6 +1754,7 @@
     char *endbuf = buf + size;
     pj_str_t sip_ver = { "SIP/2.0/", 8 };
     const pj_str_t *hname = pjsip_use_compact_form? &hdr->sname : &hdr->name;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     if ((pj_ssize_t)size < hname->slen + sip_ver.slen + 
 			   hdr->transport.slen + hdr->sent_by.host.slen + 12)
@@ -1757,8 +1808,8 @@
     copy_advance_pair(buf, ";branch=", 8, hdr->branch_param);
     
     printed = pjsip_param_print_on(&hdr->other_param, buf, endbuf-buf, 
-				   &pjsip_TOKEN_SPEC,
-				   &pjsip_TOKEN_SPEC, ';');
+				   &pc->pjsip_TOKEN_SPEC,
+				   &pc->pjsip_TOKEN_SPEC, ';');
     if (printed < 0)
 	return -1;
     buf += printed;
@@ -1813,10 +1864,9 @@
     return pjsip_generic_string_hdr_create(pool, &str_warning, &hvalue);
 }
 
-PJ_DEF(pjsip_warning_hdr*) 
-pjsip_warning_hdr_create_from_status( pj_pool_t *pool,
-				      const pj_str_t *host,
-				      pj_status_t status)
+PJ_DEF(pjsip_warning_hdr*) pjsip_warning_hdr_create_from_status(pj_pool_t *pool,
+						      const pj_str_t *host,
+						      pj_status_t status)
 {
     char errbuf[PJ_ERR_MSG_SIZE];
     pj_str_t text;
diff --git a/pjsip/src/pjsip/sip_parser.c b/pjsip/src/pjsip/sip_parser.c
index 6c32242..9a0edcf 100644
--- a/pjsip/src/pjsip/sip_parser.c
+++ b/pjsip/src/pjsip/sip_parser.c
@@ -87,50 +87,29 @@
  */
 int PJSIP_SYN_ERR_EXCEPTION;
 
-const pj_str_t  pjsip_USER_STR      = { "user", 4};
-const pj_str_t  pjsip_METHOD_STR    = { "method", 6};
-const pj_str_t  pjsip_TRANSPORT_STR = { "transport", 9};
-const pj_str_t  pjsip_MADDR_STR     = { "maddr", 5 };
-const pj_str_t  pjsip_LR_STR        = { "lr", 2 };
-const pj_str_t  pjsip_SIP_STR       = { "sip", 3 };
-const pj_str_t  pjsip_SIPS_STR      = { "sips", 4 };
-const pj_str_t  pjsip_TEL_STR       = { "tel", 3 };
-const pj_str_t  pjsip_BRANCH_STR    = { "branch", 6 };
-const pj_str_t  pjsip_TTL_STR       = { "ttl", 3 };
-const pj_str_t  pjsip_RECEIVED_STR  = { "received", 8 };
-const pj_str_t  pjsip_Q_STR         = { "q", 1 };
-const pj_str_t  pjsip_EXPIRES_STR   = { "expires", 7 };
-const pj_str_t  pjsip_TAG_STR       = { "tag", 3 };
-const pj_str_t  pjsip_RPORT_STR     = { "rport", 5};
+/* Parser constants */
+static pjsip_parser_const_t pconst =
+{
+    { "user", 4},	/* pjsip_USER_STR	*/
+    { "method", 6},	/* pjsip_METHOD_STR	*/
+    { "transport", 9},	/* pjsip_TRANSPORT_STR	*/
+    { "maddr", 5 },	/* pjsip_MADDR_STR	*/
+    { "lr", 2 },	/* pjsip_LR_STR		*/
+    { "sip", 3 },	/* pjsip_SIP_STR	*/
+    { "sips", 4 },	/* pjsip_SIPS_STR	*/
+    { "tel", 3 },	/* pjsip_TEL_STR	*/
+    { "branch", 6 },	/* pjsip_BRANCH_STR	*/
+    { "ttl", 3 },	/* pjsip_TTL_STR	*/
+    { "received", 8 },	/* pjsip_RECEIVED_STR	*/
+    { "q", 1 },		/* pjsip_Q_STR		*/
+    { "expires", 7 },	/* pjsip_EXPIRES_STR	*/
+    { "tag", 3 },	/* pjsip_TAG_STR	*/
+    { "rport", 5}	/* pjsip_RPORT_STR	*/
+};
 
 /* Character Input Specification buffer. */
 static pj_cis_buf_t cis_buf;
 
-/* Character Input Specifications. */
-pj_cis_t    pjsip_HOST_SPEC,	        /* For scanning host part. */
-	    pjsip_DIGIT_SPEC,	        /* Decimal digits */
-	    pjsip_ALPHA_SPEC,	        /* Alpha (A-Z, a-z) */
-	    pjsip_ALNUM_SPEC,	        /* Decimal + Alpha. */
-	    pjsip_TOKEN_SPEC,	        /* Token. */
-	    pjsip_TOKEN_SPEC_ESC,	/* Token without '%' character */
-	    pjsip_HEX_SPEC,	        /* Hexadecimal digits. */
-	    pjsip_PARAM_CHAR_SPEC,      /* For scanning pname (or pvalue when
-                                         * it's not quoted.) */
-	    pjsip_PARAM_CHAR_SPEC_ESC,	/* The variant without escaped char */
-	    pjsip_HDR_CHAR_SPEC,	/* Chars in hname or hvalue */
-	    pjsip_HDR_CHAR_SPEC_ESC,	/* Variant without escaped char */
-	    pjsip_PROBE_USER_HOST_SPEC, /* Hostname characters. */
-	    pjsip_PASSWD_SPEC,	        /* Password. */
-	    pjsip_PASSWD_SPEC_ESC,	/* Variant without escaped char */
-	    pjsip_USER_SPEC,	        /* User */
-	    pjsip_USER_SPEC_ESC,	/* Variant without escaped char */
-	    pjsip_USER_SPEC_LENIENT,	/* User, with additional '#' char */
-	    pjsip_USER_SPEC_LENIENT_ESC,
-	    pjsip_NOT_COMMA_OR_NEWLINE, /* Array separator. */
-	    pjsip_NOT_NEWLINE,		/* For eating up header.*/
-	    pjsip_DISPLAY_SPEC;         /* Used when searching for display name
-                                         * in URL. */
-
 
 /*
  * Forward decl.
@@ -243,10 +222,17 @@
     PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
 }
 
+/* Get parser constants. */
+PJ_DEF(const pjsip_parser_const_t*) pjsip_parser_const(void)
+{
+    return &pconst;
+}
+
 /* Concatenate unrecognized params into single string. */
-void pjsip_concat_param_imp( pj_str_t *param, pj_pool_t *pool, 
-			     const pj_str_t *pname, const pj_str_t *pvalue, 
-                             int sepchar)
+PJ_DEF(void) pjsip_concat_param_imp(pj_str_t *param, pj_pool_t *pool, 
+			     	    const pj_str_t *pname, 
+				    const pj_str_t *pvalue, 
+                             	    int sepchar)
 {
     char *new_param, *p;
     int len;
@@ -300,94 +286,94 @@
 
     pj_cis_buf_init(&cis_buf);
 
-    status = pj_cis_init(&cis_buf, &pjsip_DIGIT_SPEC);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_DIGIT_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_num(&pjsip_DIGIT_SPEC);
+    pj_cis_add_num(&pconst.pjsip_DIGIT_SPEC);
     
-    status = pj_cis_init(&cis_buf, &pjsip_ALPHA_SPEC);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_ALPHA_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_alpha( &pjsip_ALPHA_SPEC );
+    pj_cis_add_alpha( &pconst.pjsip_ALPHA_SPEC );
     
-    status = pj_cis_init(&cis_buf, &pjsip_ALNUM_SPEC);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_alpha( &pjsip_ALNUM_SPEC );
-    pj_cis_add_num( &pjsip_ALNUM_SPEC );
+    pj_cis_add_alpha( &pconst.pjsip_ALNUM_SPEC );
+    pj_cis_add_num( &pconst.pjsip_ALNUM_SPEC );
 
-    status = pj_cis_init(&cis_buf, &pjsip_NOT_NEWLINE);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_NOT_NEWLINE);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str(&pjsip_NOT_NEWLINE, "\r\n");
-    pj_cis_invert(&pjsip_NOT_NEWLINE);
+    pj_cis_add_str(&pconst.pjsip_NOT_NEWLINE, "\r\n");
+    pj_cis_invert(&pconst.pjsip_NOT_NEWLINE);
 
-    status = pj_cis_init(&cis_buf, &pjsip_NOT_COMMA_OR_NEWLINE);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_NOT_COMMA_OR_NEWLINE);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_NOT_COMMA_OR_NEWLINE, ",\r\n");
-    pj_cis_invert(&pjsip_NOT_COMMA_OR_NEWLINE);
+    pj_cis_add_str( &pconst.pjsip_NOT_COMMA_OR_NEWLINE, ",\r\n");
+    pj_cis_invert(&pconst.pjsip_NOT_COMMA_OR_NEWLINE);
 
-    status = pj_cis_dup(&pjsip_TOKEN_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_TOKEN_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_TOKEN_SPEC, TOKEN);
+    pj_cis_add_str( &pconst.pjsip_TOKEN_SPEC, TOKEN);
 
-    status = pj_cis_dup(&pjsip_TOKEN_SPEC_ESC, &pjsip_TOKEN_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_TOKEN_SPEC_ESC, &pconst.pjsip_TOKEN_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_del_str(&pjsip_TOKEN_SPEC_ESC, "%");
+    pj_cis_del_str(&pconst.pjsip_TOKEN_SPEC_ESC, "%");
 
-    status = pj_cis_dup(&pjsip_HOST_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_HOST_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_HOST_SPEC, HOST);
+    pj_cis_add_str( &pconst.pjsip_HOST_SPEC, HOST);
 
-    status = pj_cis_dup(&pjsip_HEX_SPEC, &pjsip_DIGIT_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_HEX_SPEC, &pconst.pjsip_DIGIT_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_HEX_SPEC, HEX_DIGIT);
+    pj_cis_add_str( &pconst.pjsip_HEX_SPEC, HEX_DIGIT);
 
-    status = pj_cis_dup(&pjsip_PARAM_CHAR_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_PARAM_CHAR_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str(&pjsip_PARAM_CHAR_SPEC, PARAM_CHAR);
+    pj_cis_add_str(&pconst.pjsip_PARAM_CHAR_SPEC, PARAM_CHAR);
 
-    status = pj_cis_dup(&pjsip_PARAM_CHAR_SPEC_ESC, &pjsip_PARAM_CHAR_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_PARAM_CHAR_SPEC_ESC, &pconst.pjsip_PARAM_CHAR_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_del_str(&pjsip_PARAM_CHAR_SPEC_ESC, ESCAPED);
+    pj_cis_del_str(&pconst.pjsip_PARAM_CHAR_SPEC_ESC, ESCAPED);
 
-    status = pj_cis_dup(&pjsip_HDR_CHAR_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_HDR_CHAR_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str(&pjsip_HDR_CHAR_SPEC, HDR_CHAR);
+    pj_cis_add_str(&pconst.pjsip_HDR_CHAR_SPEC, HDR_CHAR);
 
-    status = pj_cis_dup(&pjsip_HDR_CHAR_SPEC_ESC, &pjsip_HDR_CHAR_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_HDR_CHAR_SPEC_ESC, &pconst.pjsip_HDR_CHAR_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_del_str(&pjsip_HDR_CHAR_SPEC_ESC, ESCAPED);
+    pj_cis_del_str(&pconst.pjsip_HDR_CHAR_SPEC_ESC, ESCAPED);
 
-    status = pj_cis_dup(&pjsip_USER_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_USER_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_USER_SPEC, UNRESERVED ESCAPED USER_UNRESERVED );
+    pj_cis_add_str( &pconst.pjsip_USER_SPEC, UNRESERVED ESCAPED USER_UNRESERVED );
 
-    status = pj_cis_dup(&pjsip_USER_SPEC_ESC, &pjsip_USER_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_USER_SPEC_ESC, &pconst.pjsip_USER_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_del_str( &pjsip_USER_SPEC_ESC, ESCAPED);
+    pj_cis_del_str( &pconst.pjsip_USER_SPEC_ESC, ESCAPED);
 
-    status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT, &pjsip_USER_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_USER_SPEC_LENIENT, &pconst.pjsip_USER_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str(&pjsip_USER_SPEC_LENIENT, "#");
+    pj_cis_add_str(&pconst.pjsip_USER_SPEC_LENIENT, "#");
 
-    status = pj_cis_dup(&pjsip_USER_SPEC_LENIENT_ESC, &pjsip_USER_SPEC_ESC);
+    status = pj_cis_dup(&pconst.pjsip_USER_SPEC_LENIENT_ESC, &pconst.pjsip_USER_SPEC_ESC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str(&pjsip_USER_SPEC_LENIENT_ESC, "#");
+    pj_cis_add_str(&pconst.pjsip_USER_SPEC_LENIENT_ESC, "#");
 
-    status = pj_cis_dup(&pjsip_PASSWD_SPEC, &pjsip_ALNUM_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_PASSWD_SPEC, &pconst.pjsip_ALNUM_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_PASSWD_SPEC, UNRESERVED ESCAPED PASS);
+    pj_cis_add_str( &pconst.pjsip_PASSWD_SPEC, UNRESERVED ESCAPED PASS);
 
-    status = pj_cis_dup(&pjsip_PASSWD_SPEC_ESC, &pjsip_PASSWD_SPEC);
+    status = pj_cis_dup(&pconst.pjsip_PASSWD_SPEC_ESC, &pconst.pjsip_PASSWD_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_del_str( &pjsip_PASSWD_SPEC_ESC, ESCAPED);
+    pj_cis_del_str( &pconst.pjsip_PASSWD_SPEC_ESC, ESCAPED);
 
-    status = pj_cis_init(&cis_buf, &pjsip_PROBE_USER_HOST_SPEC);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_PROBE_USER_HOST_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_PROBE_USER_HOST_SPEC, "@ \n>");
-    pj_cis_invert( &pjsip_PROBE_USER_HOST_SPEC );
+    pj_cis_add_str( &pconst.pjsip_PROBE_USER_HOST_SPEC, "@ \n>");
+    pj_cis_invert( &pconst.pjsip_PROBE_USER_HOST_SPEC );
 
-    status = pj_cis_init(&cis_buf, &pjsip_DISPLAY_SPEC);
+    status = pj_cis_init(&cis_buf, &pconst.pjsip_DISPLAY_SPEC);
     PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
-    pj_cis_add_str( &pjsip_DISPLAY_SPEC, ":\r\n<");
-    pj_cis_invert(&pjsip_DISPLAY_SPEC);
+    pj_cis_add_str( &pconst.pjsip_DISPLAY_SPEC, ":\r\n<");
+    pj_cis_invert(&pconst.pjsip_DISPLAY_SPEC);
 
     /*
      * Register URI parsers.
@@ -817,7 +803,7 @@
 		}
 
 		/* Get number */
-		pj_scan_get(&scanner, &pjsip_DIGIT_SPEC, &str_clen);
+		pj_scan_get(&scanner, &pconst.pjsip_DIGIT_SPEC, &str_clen);
 
 		/* Get newline. */
 		pj_scan_get_newline(&scanner);
@@ -959,7 +945,7 @@
 	    hname.slen = 0;
 	    
 	    /* Get hname. */
-	    pj_scan_get( scanner, &pjsip_TOKEN_SPEC, &hname);
+	    pj_scan_get( scanner, &pconst.pjsip_TOKEN_SPEC, &hname);
 	    if (pj_scan_get_char( scanner ) != ':') {
 		PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
 	    }
@@ -1109,22 +1095,22 @@
 }
 
 /* Parse parameter (pname ["=" pvalue]) using token. */
-void pjsip_parse_param_imp(  pj_scanner *scanner, pj_pool_t *pool,
-			     pj_str_t *pname, pj_str_t *pvalue,
-			     unsigned option)
+PJ_DEF(void) pjsip_parse_param_imp(pj_scanner *scanner, pj_pool_t *pool,
+			     	   pj_str_t *pname, pj_str_t *pvalue,
+			     	   unsigned option)
 {
-    parse_param_imp(scanner, pool, pname, pvalue, &pjsip_TOKEN_SPEC,
-		    &pjsip_TOKEN_SPEC_ESC, option);
+    parse_param_imp(scanner, pool, pname, pvalue, &pconst.pjsip_TOKEN_SPEC,
+		    &pconst.pjsip_TOKEN_SPEC_ESC, option);
 }
 
 
 /* Parse parameter (pname ["=" pvalue]) using paramchar. */
-void pjsip_parse_uri_param_imp(pj_scanner *scanner, pj_pool_t *pool,
-			       pj_str_t *pname, pj_str_t *pvalue,
-			       unsigned option)
+PJ_DEF(void) pjsip_parse_uri_param_imp( pj_scanner *scanner, pj_pool_t *pool,
+			       		pj_str_t *pname, pj_str_t *pvalue,
+			       		unsigned option)
 {
-    parse_param_imp(scanner, pool, pname, pvalue, &pjsip_PARAM_CHAR_SPEC,
-		    &pjsip_PARAM_CHAR_SPEC_ESC, option);
+    parse_param_imp(scanner,pool, pname, pvalue, &pconst.pjsip_PARAM_CHAR_SPEC,
+		    &pconst.pjsip_PARAM_CHAR_SPEC_ESC, option);
 }
 
 
@@ -1162,8 +1148,8 @@
     pj_scan_get_char(scanner);
 
     /* hname */
-    parser_get_and_unescape(scanner, pool, &pjsip_HDR_CHAR_SPEC, 
-			    &pjsip_HDR_CHAR_SPEC_ESC, hname);
+    parser_get_and_unescape(scanner, pool, &pconst.pjsip_HDR_CHAR_SPEC, 
+			    &pconst.pjsip_HDR_CHAR_SPEC_ESC, hname);
 
     /* Init hvalue */
     hvalue->ptr = NULL;
@@ -1173,10 +1159,10 @@
     if (*scanner->curptr == '=') {
 	pj_scan_get_char(scanner);
 	if (!pj_scan_is_eof(scanner) && 
-	    pj_cis_match(&pjsip_HDR_CHAR_SPEC, *scanner->curptr))
+	    pj_cis_match(&pconst.pjsip_HDR_CHAR_SPEC, *scanner->curptr))
 	{
-	    parser_get_and_unescape(scanner, pool, &pjsip_HDR_CHAR_SPEC,
-				    &pjsip_HDR_CHAR_SPEC_ESC, hvalue);
+	    parser_get_and_unescape(scanner, pool, &pconst.pjsip_HDR_CHAR_SPEC,
+				    &pconst.pjsip_HDR_CHAR_SPEC_ESC, hvalue);
 	}
     }
 }
@@ -1185,12 +1171,12 @@
 static void int_parse_uri_host_port( pj_scanner *scanner, 
 				     pj_str_t *host, int *p_port)
 {
-    pj_scan_get( scanner, &pjsip_HOST_SPEC, host);
+    pj_scan_get( scanner, &pconst.pjsip_HOST_SPEC, host);
     /* RFC3261 section 19.1.2: host don't need to be unescaped */
     if (*scanner->curptr == ':') {
 	pj_str_t port;
 	pj_scan_get_char(scanner);
-	pj_scan_get(scanner, &pjsip_DIGIT_SPEC, &port);
+	pj_scan_get(scanner, &pconst.pjsip_DIGIT_SPEC, &port);
 	*p_port = pj_strtoul(&port);
     } else {
 	*p_port = 0;
@@ -1206,7 +1192,7 @@
     /* Find character '@'. If this character exist, then the token
      * must be a username.
      */
-    if (pj_scan_peek( scanner, &pjsip_PROBE_USER_HOST_SPEC, &dummy) == '@')
+    if (pj_scan_peek( scanner, &pconst.pjsip_PROBE_USER_HOST_SPEC, &dummy) == '@')
 	is_user = 1;
     else
 	is_user = 0;
@@ -1218,13 +1204,13 @@
 static void int_parse_user_pass( pj_scanner *scanner, pj_pool_t *pool,
 				 pj_str_t *user, pj_str_t *pass)
 {
-    parser_get_and_unescape(scanner, pool, &pjsip_USER_SPEC_LENIENT, 
-			    &pjsip_USER_SPEC_LENIENT_ESC, user);
+    parser_get_and_unescape(scanner, pool, &pconst.pjsip_USER_SPEC_LENIENT, 
+			    &pconst.pjsip_USER_SPEC_LENIENT_ESC, user);
 
     if ( *scanner->curptr == ':') {
 	pj_scan_get_char( scanner );
-	parser_get_and_unescape(scanner, pool, &pjsip_PASSWD_SPEC,
-				&pjsip_PASSWD_SPEC_ESC, pass);
+	parser_get_and_unescape(scanner, pool, &pconst.pjsip_PASSWD_SPEC,
+				&pconst.pjsip_PASSWD_SPEC_ESC, pass);
     } else {
 	pass->ptr = NULL;
 	pass->slen = 0;
@@ -1251,7 +1237,7 @@
 	pj_str_t scheme;
 	int next_ch;
 
-	next_ch = pj_scan_peek( scanner, &pjsip_DISPLAY_SPEC, &scheme);
+	next_ch = pj_scan_peek( scanner, &pconst.pjsip_DISPLAY_SPEC, &scheme);
 
 	if (next_ch==':') {
 	    pjsip_parse_uri_func *func = find_uri_handler(&scheme);
@@ -1304,7 +1290,7 @@
 	pjsip_parse_uri_func *func;
 
 	/* Get scheme. */
-	colon = pj_scan_peek(scanner, &pjsip_TOKEN_SPEC, &scheme);
+	colon = pj_scan_peek(scanner, &pconst.pjsip_TOKEN_SPEC, &scheme);
 	if (colon != ':') {
 	    PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
 	}
@@ -1337,16 +1323,16 @@
     int skip_ws = scanner->skip_ws;
     scanner->skip_ws = 0;
 
-    pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &scheme);
+    pj_scan_get(scanner, &pconst.pjsip_TOKEN_SPEC, &scheme);
     colon = pj_scan_get_char(scanner);
     if (colon != ':') {
 	PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
     }
 
-    if (parser_stricmp(scheme, pjsip_SIP_STR)==0) {
+    if (parser_stricmp(scheme, pconst.pjsip_SIP_STR)==0) {
 	url = pjsip_sip_uri_create(pool, 0);
 
-    } else if (parser_stricmp(scheme, pjsip_SIPS_STR)==0) {
+    } else if (parser_stricmp(scheme, pconst.pjsip_SIPS_STR)==0) {
 	url = pjsip_sip_uri_create(pool, 1);
 
     } else {
@@ -1372,22 +1358,22 @@
 
 	int_parse_uri_param( scanner, pool, &pname, &pvalue, 0);
 
-	if (!parser_stricmp(pname, pjsip_USER_STR) && pvalue.slen) {
+	if (!parser_stricmp(pname, pconst.pjsip_USER_STR) && pvalue.slen) {
 	    url->user_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_METHOD_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_METHOD_STR) && pvalue.slen) {
 	    url->method_param = pvalue;
 
-	} else if (!parser_stricmp(pname,pjsip_TRANSPORT_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_TRANSPORT_STR) && pvalue.slen) {
 	    url->transport_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_TTL_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_TTL_STR) && pvalue.slen) {
 	    url->ttl_param = pj_strtoul(&pvalue);
 
-	} else if (!parser_stricmp(pname, pjsip_MADDR_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_MADDR_STR) && pvalue.slen) {
 	    url->maddr_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_LR_STR)) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_LR_STR)) {
 	    url->lr_param = 1;
 
 	} else {
@@ -1438,7 +1424,7 @@
 	 * We're only interested in display name, because SIP URL
 	 * will be parser later.
 	 */
-	next = pj_scan_peek(scanner, &pjsip_DISPLAY_SPEC, &dummy);
+	next = pj_scan_peek(scanner, &pconst.pjsip_DISPLAY_SPEC, &dummy);
 	if (next == '<') {
 	    /* Ok, this is what we're looking for, a display name. */
 	    pj_scan_get_until_ch( scanner, '<', &name_addr->display);
@@ -1469,7 +1455,7 @@
 {
     pj_str_t token;
 
-    pj_scan_get( scanner, &pjsip_TOKEN_SPEC, &token);
+    pj_scan_get( scanner, &pconst.pjsip_TOKEN_SPEC, &token);
     pjsip_method_init_np( &req_line->method, &token);
 
     req_line->uri = int_parse_uri(scanner, pool, PJ_TRUE);
@@ -1489,9 +1475,9 @@
 	PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
     pj_scan_advance_n( scanner, 7, 1);
 
-    pj_scan_get( scanner, &pjsip_DIGIT_SPEC, &token);
+    pj_scan_get( scanner, &pconst.pjsip_DIGIT_SPEC, &token);
     status_line->code = pj_strtoul(&token);
-    pj_scan_get( scanner, &pjsip_NOT_NEWLINE, &status_line->reason);
+    pj_scan_get( scanner, &pconst.pjsip_NOT_NEWLINE, &status_line->reason);
     pj_scan_get_newline( scanner );
 }
 
@@ -1538,7 +1524,7 @@
 }
 
 /* Parse ending of header. */
-void pjsip_parse_end_hdr_imp( pj_scanner *scanner )
+PJ_DEF(void) pjsip_parse_end_hdr_imp( pj_scanner *scanner )
 {
     parse_hdr_end(scanner);
 }
@@ -1556,12 +1542,12 @@
 	goto end;
     }
 
-    pj_scan_get( scanner, &pjsip_NOT_COMMA_OR_NEWLINE, &hdr->values[0]);
+    pj_scan_get( scanner, &pconst.pjsip_NOT_COMMA_OR_NEWLINE, &hdr->values[0]);
     hdr->count++;
 
     while (*scanner->curptr == ',') {
 	pj_scan_get_char(scanner);
-	pj_scan_get( scanner, &pjsip_NOT_COMMA_OR_NEWLINE, 
+	pj_scan_get( scanner, &pconst.pjsip_NOT_COMMA_OR_NEWLINE, 
 		     &hdr->values[hdr->count]);
 	hdr->count++;
 
@@ -1577,8 +1563,8 @@
 static void parse_generic_string_hdr( pjsip_generic_string_hdr *hdr,
 				      pj_scanner *scanner )
 {
-    if (pj_cis_match(&pjsip_NOT_NEWLINE, *scanner->curptr))
-	pj_scan_get( scanner, &pjsip_NOT_NEWLINE, &hdr->hvalue);
+    if (pj_cis_match(&pconst.pjsip_NOT_NEWLINE, *scanner->curptr))
+	pj_scan_get( scanner, &pconst.pjsip_NOT_NEWLINE, &hdr->hvalue);
     else
 	hdr->hvalue.slen = 0;
 
@@ -1590,7 +1576,7 @@
 				   pj_scanner *scanner )
 {
     pj_str_t tmp;
-    pj_scan_get( scanner, &pjsip_DIGIT_SPEC, &tmp);
+    pj_scan_get( scanner, &pconst.pjsip_DIGIT_SPEC, &tmp);
     hdr->ivalue = pj_strtoul(&tmp);
     parse_hdr_end(scanner);
 }
@@ -1616,7 +1602,7 @@
 static pjsip_hdr* parse_hdr_call_id(pjsip_parse_ctx *ctx)
 {
     pjsip_cid_hdr *hdr = pjsip_cid_hdr_create(ctx->pool);
-    pj_scan_get( ctx->scanner, &pjsip_NOT_NEWLINE, &hdr->id);
+    pj_scan_get( ctx->scanner, &pconst.pjsip_NOT_NEWLINE, &hdr->id);
     parse_hdr_end(ctx->scanner);
 
     if (ctx->rdata)
@@ -1634,7 +1620,7 @@
 	pj_str_t pname, pvalue;
 
 	int_parse_param( scanner, pool, &pname, &pvalue, 0);
-	if (!parser_stricmp(pname, pjsip_Q_STR) && pvalue.slen) {
+	if (!parser_stricmp(pname, pconst.pjsip_Q_STR) && pvalue.slen) {
 	    char *dot_pos = (char*) pj_memchr(pvalue.ptr, '.', pvalue.slen);
 	    if (!dot_pos) {
 		hdr->q1000 = pj_strtoul(&pvalue);
@@ -1643,7 +1629,7 @@
 		pvalue.ptr = dot_pos + 1;
 		hdr->q1000 = pj_strtoul_mindigit(&pvalue, 3);
 	    }    
-	} else if (!parser_stricmp(pname, pjsip_EXPIRES_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_EXPIRES_STR) && pvalue.slen) {
 	    hdr->expires = pj_strtoul(&pvalue);
 
 	} else {
@@ -1700,7 +1686,7 @@
     pjsip_clen_hdr *hdr;
 
     hdr = pjsip_clen_hdr_create(ctx->pool);
-    pj_scan_get(ctx->scanner, &pjsip_DIGIT_SPEC, &digit);
+    pj_scan_get(ctx->scanner, &pconst.pjsip_DIGIT_SPEC, &digit);
     hdr->len = pj_strtoul(&digit);
     parse_hdr_end(ctx->scanner);
 
@@ -1719,9 +1705,9 @@
     hdr = pjsip_ctype_hdr_create(ctx->pool);
     
     /* Parse media type and subtype. */
-    pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &hdr->media.type);
+    pj_scan_get(scanner, &pconst.pjsip_TOKEN_SPEC, &hdr->media.type);
     pj_scan_get_char(scanner);
-    pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &hdr->media.subtype);
+    pj_scan_get(scanner, &pconst.pjsip_TOKEN_SPEC, &hdr->media.subtype);
 
     /* Parse media parameters */
     while (*scanner->curptr == ';') {
@@ -1745,10 +1731,10 @@
     pjsip_cseq_hdr *hdr;
 
     hdr = pjsip_cseq_hdr_create(ctx->pool);
-    pj_scan_get( ctx->scanner, &pjsip_DIGIT_SPEC, &cseq);
+    pj_scan_get( ctx->scanner, &pconst.pjsip_DIGIT_SPEC, &cseq);
     hdr->cseq = pj_strtoul(&cseq);
 
-    pj_scan_get( ctx->scanner, &pjsip_TOKEN_SPEC, &method);
+    pj_scan_get( ctx->scanner, &pconst.pjsip_TOKEN_SPEC, &method);
     pjsip_method_init_np(&hdr->method, &method);
 
     parse_hdr_end( ctx->scanner );
@@ -1781,7 +1767,7 @@
 
 	int_parse_param( scanner, pool, &pname, &pvalue, 0);
 
-	if (!parser_stricmp(pname, pjsip_TAG_STR)) {
+	if (!parser_stricmp(pname, pconst.pjsip_TAG_STR)) {
 	    hdr->tag = pvalue;
 	    
 	} else {
@@ -1865,19 +1851,19 @@
 
 	int_parse_param( scanner, pool, &pname, &pvalue, 0);
 
-	if (!parser_stricmp(pname, pjsip_BRANCH_STR) && pvalue.slen) {
+	if (!parser_stricmp(pname, pconst.pjsip_BRANCH_STR) && pvalue.slen) {
 	    hdr->branch_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_TTL_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_TTL_STR) && pvalue.slen) {
 	    hdr->ttl_param = pj_strtoul(&pvalue);
 	    
-	} else if (!parser_stricmp(pname, pjsip_MADDR_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_MADDR_STR) && pvalue.slen) {
 	    hdr->maddr_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_RECEIVED_STR) && pvalue.slen) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_RECEIVED_STR) && pvalue.slen) {
 	    hdr->recvd_param = pvalue;
 
-	} else if (!parser_stricmp(pname, pjsip_RPORT_STR)) {
+	} else if (!parser_stricmp(pname, pconst.pjsip_RPORT_STR)) {
 	    if (pvalue.slen)
 		hdr->rport_param = pj_strtoul(&pvalue);
 	    else
@@ -2003,13 +1989,13 @@
 
 	pj_scan_advance_n( scanner, 8, 1);
 
-	pj_scan_get( scanner, &pjsip_TOKEN_SPEC, &hdr->transport);
-	pj_scan_get( scanner, &pjsip_HOST_SPEC, &hdr->sent_by.host);
+	pj_scan_get( scanner, &pconst.pjsip_TOKEN_SPEC, &hdr->transport);
+	pj_scan_get( scanner, &pconst.pjsip_HOST_SPEC, &hdr->sent_by.host);
 
 	if (*scanner->curptr==':') {
 	    pj_str_t digit;
 	    pj_scan_get_char(scanner);
-	    pj_scan_get(scanner, &pjsip_DIGIT_SPEC, &digit);
+	    pj_scan_get(scanner, &pconst.pjsip_DIGIT_SPEC, &digit);
 	    hdr->sent_by.port = pj_strtoul(&digit);
 	}
 	
diff --git a/pjsip/src/pjsip/sip_tel_uri.c b/pjsip/src/pjsip/sip_tel_uri.c
index f55eba7..ea1435d 100644
--- a/pjsip/src/pjsip/sip_tel_uri.c
+++ b/pjsip/src/pjsip/sip_tel_uri.c
@@ -105,7 +105,7 @@
 static const pj_str_t *tel_uri_get_scheme( const pjsip_tel_uri *uri )
 {
     PJ_UNUSED_ARG(uri);
-    return &pjsip_TEL_STR;
+    return &pjsip_parser_const()->pjsip_TEL_STR;
 }
 
 static void *tel_uri_get_uri( pjsip_tel_uri *uri )
@@ -182,11 +182,12 @@
     int printed;
     char *startbuf = buf;
     char *endbuf = buf+size;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     PJ_UNUSED_ARG(context);
 
     /* Print scheme. */
-    copy_advance(buf, pjsip_TEL_STR);
+    copy_advance(buf, pc->pjsip_TEL_STR);
     *buf++ = ':';
 
     /* Print number. */
@@ -370,14 +371,15 @@
     pjsip_tel_uri *uri;
     pj_str_t token;
     int skip_ws = scanner->skip_ws;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     scanner->skip_ws = 0;
 
     /* Parse scheme. */
-    pj_scan_get(scanner, &pjsip_TOKEN_SPEC, &token);
+    pj_scan_get(scanner, &pc->pjsip_TOKEN_SPEC, &token);
     if (pj_scan_get_char(scanner) != ':')
 	PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
-    if (pj_stricmp_alnum(&token, &pjsip_TEL_STR) != 0)
+    if (pj_stricmp_alnum(&token, &pc->pjsip_TEL_STR) != 0)
 	PJ_THROW(PJSIP_SYN_ERR_EXCEPTION);
 
     /* Create URI */
@@ -394,21 +396,22 @@
     /* Get all parameters. */
     if (parse_params && *scanner->curptr==';') {
 	pj_str_t pname, pvalue;
+	const pjsip_parser_const_t *pc = pjsip_parser_const();
 
 	do {
 	    /* Eat the ';' separator. */
 	    pj_scan_get_char(scanner);
 
 	    /* Get pname. */
-	    pj_scan_get(scanner, &pjsip_PARAM_CHAR_SPEC, &pname);
+	    pj_scan_get(scanner, &pc->pjsip_PARAM_CHAR_SPEC, &pname);
 
 	    if (*scanner->curptr == '=') {
 		pj_scan_get_char(scanner);
 
 #		if defined(PJSIP_UNESCAPE_IN_PLACE) && PJSIP_UNESCAPE_IN_PLACE!=0
-		    pj_scan_get_unescape( scanner, 
-					  &pjsip_TEL_PARSING_PVALUE_SPEC_ESC,
-					  &pvalue);
+		    pj_scan_get_unescape(scanner, 
+					 &pjsip_TEL_PARSING_PVALUE_SPEC_ESC,
+					 &pvalue);
 #		else
 		    pj_scan_get(scanner, &pjsip_TEL_PARSING_PVALUE_SPEC, 
 				&pvalue);
diff --git a/pjsip/src/pjsip/sip_transport.c b/pjsip/src/pjsip/sip_transport.c
index 8f5dabb..5f6679a 100644
--- a/pjsip/src/pjsip/sip_transport.c
+++ b/pjsip/src/pjsip/sip_transport.c
@@ -113,7 +113,7 @@
 /*
  * Register new transport type to PJSIP.
  */
-PJ_DECL(pj_status_t) pjsip_transport_register_type(unsigned tp_flag,
+PJ_DEF(pj_status_t) pjsip_transport_register_type( unsigned tp_flag,
 						   const char *tp_name,
 						   int def_port,
 						   int *p_tp_type)
@@ -149,8 +149,7 @@
 /*
  * Get transport type from name.
  */
-PJ_DEF(pjsip_transport_type_e) 
-pjsip_transport_get_type_from_name(const pj_str_t *name)
+PJ_DEF(pjsip_transport_type_e) pjsip_transport_get_type_from_name(const pj_str_t *name)
 {
     unsigned i;
 
@@ -178,8 +177,7 @@
 /*
  * Get the transport type for the specified flags.
  */
-PJ_DEF(pjsip_transport_type_e) 
-pjsip_transport_get_type_from_flag(unsigned flag)
+PJ_DEF(pjsip_transport_type_e) pjsip_transport_get_type_from_flag(unsigned flag)
 {
     unsigned i;
 
@@ -200,8 +198,7 @@
     return PJSIP_TRANSPORT_UNSPECIFIED;
 }
 
-PJ_DEF(unsigned)
-pjsip_transport_get_flag_from_type( pjsip_transport_type_e type )
+PJ_DEF(unsigned) pjsip_transport_get_flag_from_type(pjsip_transport_type_e type)
 {
     /* Sanity check. 
      * Check that transport_names[] are indexed on transport type. 
@@ -219,8 +216,7 @@
 /*
  * Get the default SIP port number for the specified type.
  */
-PJ_DEF(int) 
-pjsip_transport_get_default_port_for_type(pjsip_transport_type_e type)
+PJ_DEF(int) pjsip_transport_get_default_port_for_type(pjsip_transport_type_e type)
 {
     /* Sanity check. 
      * Check that transport_names[] are indexed on transport type. 
diff --git a/pjsip/src/pjsip/sip_ua_layer.c b/pjsip/src/pjsip/sip_ua_layer.c
index cff5813..c345b01 100644
--- a/pjsip/src/pjsip/sip_ua_layer.c
+++ b/pjsip/src/pjsip/sip_ua_layer.c
@@ -236,6 +236,7 @@
 /*
  * Create key to identify dialog set.
  */
+/*
 PJ_DEF(void) pjsip_ua_create_dlg_set_key( pj_pool_t *pool,
 					  pj_str_t *set_key,
 					  const pj_str_t *call_id,
@@ -252,6 +253,7 @@
     pj_memcpy(set_key->ptr + call_id->slen + 1, 
 	      local_tag->ptr, local_tag->slen);
 }
+*/
 
 /*
  * Acquire one dlg_set node to be put in the hash table.
@@ -511,7 +513,7 @@
 	    role = PJSIP_ROLE_UAC;
 
 	pjsip_tsx_create_key(rdata->tp_info.pool, &key, role, 
-			     &pjsip_invite_method, rdata);
+			     pjsip_get_invite_method(), rdata);
 
 	/* Lookup the INVITE transaction */
 	tsx = pjsip_tsx_layer_find_tsx(&key, PJ_TRUE);
diff --git a/pjsip/src/pjsip/sip_uri.c b/pjsip/src/pjsip/sip_uri.c
index c224090..e22776a 100644
--- a/pjsip/src/pjsip/sip_uri.c
+++ b/pjsip/src/pjsip/sip_uri.c
@@ -243,6 +243,7 @@
     char *startbuf = buf;
     char *endbuf = buf+size;
     const pj_str_t *scheme;
+    const pjsip_parser_const_t *pc = pjsip_parser_const();
 
     *buf = '\0';
 
@@ -253,10 +254,10 @@
 
     /* Print "user:password@", if any. */
     if (url->user.slen) {
-	copy_advance_escape(buf, url->user, pjsip_USER_SPEC);
+	copy_advance_escape(buf, url->user, pc->pjsip_USER_SPEC);
 	if (url->passwd.slen) {
 	    *buf++ = ':';
-	    copy_advance_escape(buf, url->passwd, pjsip_PASSWD_SPEC);
+	    copy_advance_escape(buf, url->passwd, pc->pjsip_PASSWD_SPEC);
 	}
 
 	*buf++ = '@';
@@ -289,13 +290,13 @@
     /* Method param is only allowed in external/other context. */
     if (context == PJSIP_URI_IN_OTHER) {
 	copy_advance_pair_escape(buf, ";method=", 8, url->method_param, 
-				 pjsip_PARAM_CHAR_SPEC);
+				 pc->pjsip_PARAM_CHAR_SPEC);
     }
 
     /* Transport is not allowed in From/To header. */
     if (context != PJSIP_URI_IN_FROMTO_HDR) {
 	copy_advance_pair_escape(buf, ";transport=", 11, url->transport_param,
-				 pjsip_PARAM_CHAR_SPEC);
+				 pc->pjsip_PARAM_CHAR_SPEC);
     }
 
     /* TTL param is not allowed in From, To, Route, and Record-Route header. */
@@ -312,7 +313,7 @@
     /* maddr param is not allowed in From and To header. */
     if (context != PJSIP_URI_IN_FROMTO_HDR) {
 	copy_advance_pair_escape(buf, ";maddr=", 7, url->maddr_param,
-				 pjsip_PARAM_CHAR_SPEC);
+				 pc->pjsip_PARAM_CHAR_SPEC);
     }
 
     /* lr param is not allowed in From, To, and Contact header. */
@@ -327,8 +328,8 @@
 
     /* Other param. */
     printed = pjsip_param_print_on(&url->other_param, buf, endbuf-buf, 
-				   &pjsip_PARAM_CHAR_SPEC, 
-				   &pjsip_PARAM_CHAR_SPEC, ';');
+				   &pc->pjsip_PARAM_CHAR_SPEC, 
+				   &pc->pjsip_PARAM_CHAR_SPEC, ';');
     if (printed < 0)
 	return -1;
     buf += printed;
@@ -340,8 +341,8 @@
      */
     if (context == PJSIP_URI_IN_CONTACT_HDR || context == PJSIP_URI_IN_OTHER) {
 	printed = pjsip_param_print_on(&url->header_param, buf, endbuf-buf,
-				       &pjsip_HDR_CHAR_SPEC, 
-				       &pjsip_HDR_CHAR_SPEC, '?');
+				       &pc->pjsip_HDR_CHAR_SPEC, 
+				       &pc->pjsip_HDR_CHAR_SPEC, '?');
 	if (printed < 0)
 	    return -1;
 	buf += printed;
diff --git a/pjsip/src/pjsip/sip_util.c b/pjsip/src/pjsip/sip_util.c
index 6b74d0c..c48ff86 100644
--- a/pjsip/src/pjsip/sip_util.c
+++ b/pjsip/src/pjsip/sip_util.c
@@ -261,8 +261,7 @@
     return status;
 }
 
-PJ_DEF(pj_status_t)
-pjsip_endpt_create_request_from_hdr( pjsip_endpoint *endpt,
+PJ_DEF(pj_status_t) pjsip_endpt_create_request_from_hdr( pjsip_endpoint *endpt,
 				     const pjsip_method *method,
 				     const pjsip_uri *param_target,
 				     const pjsip_from_hdr *param_from,
@@ -484,7 +483,7 @@
 
     /* Create new request message from the headers. */
     status = pjsip_endpt_create_request_from_hdr(endpt, 
-						 &pjsip_ack_method,
+						 pjsip_get_ack_method(),
 						 tdata->msg->line.req.uri,
 						 from_hdr, to_hdr,
 						 NULL, cid_hdr,
@@ -575,7 +574,7 @@
 
     /* Create new request message from the headers. */
     status = pjsip_endpt_create_request_from_hdr(endpt, 
-						 &pjsip_cancel_method,
+						 pjsip_get_cancel_method(),
 						 req_tdata->msg->line.req.uri,
 						 from_hdr, to_hdr,
 						 NULL, cid_hdr,
@@ -992,8 +991,7 @@
  *  - establish transport (#pjsip_endpt_acquire_transport)
  *  - send the message (#pjsip_transport_send)
  */
-PJ_DEF(pj_status_t) 
-pjsip_endpt_send_request_stateless(pjsip_endpoint *endpt, 
+PJ_DEF(pj_status_t) pjsip_endpt_send_request_stateless(pjsip_endpoint *endpt, 
 				   pjsip_tx_data *tdata,
 				   void *token,
 				   pjsip_send_callback cb)
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index d1042da..935eaf5 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -2771,7 +2771,7 @@
 
     if (tsx->role==PJSIP_ROLE_UAS &&
 	tsx->state==PJSIP_TSX_STATE_TRYING &&
-	pjsip_method_cmp(&tsx->method, &pjsip_refer_method)==0)
+	pjsip_method_cmp(&tsx->method, pjsip_get_refer_method())==0)
     {
 	/*
 	 * Incoming REFER request.
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index f2d18dc..61d49c3 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -54,6 +54,113 @@
 }
 
 
+PJ_DEF(void) pjsua_logging_config_default(pjsua_logging_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+
+    cfg->msg_logging = PJ_TRUE;
+    cfg->level = 5;
+    cfg->console_level = 4;
+    cfg->decor = PJ_LOG_HAS_SENDER | PJ_LOG_HAS_TIME | 
+		 PJ_LOG_HAS_MICRO_SEC | PJ_LOG_HAS_NEWLINE;
+}
+
+PJ_DEF(void) pjsua_logging_config_dup(pj_pool_t *pool,
+				      pjsua_logging_config *dst,
+				      const pjsua_logging_config *src)
+{
+    pj_memcpy(dst, src, sizeof(*src));
+    pj_strdup_with_null(pool, &dst->log_filename, &src->log_filename);
+}
+
+PJ_DEF(void) pjsua_config_default(pjsua_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+
+    cfg->max_calls = 4;
+    cfg->thread_cnt = 1;
+}
+
+PJ_DEF(void) pjsip_cred_dup( pj_pool_t *pool,
+			     pjsip_cred_info *dst,
+			     const pjsip_cred_info *src)
+{
+    pj_strdup_with_null(pool, &dst->realm, &src->realm);
+    pj_strdup_with_null(pool, &dst->scheme, &src->scheme);
+    pj_strdup_with_null(pool, &dst->username, &src->username);
+    pj_strdup_with_null(pool, &dst->data, &src->data);
+}
+
+PJ_DEF(void) pjsua_config_dup(pj_pool_t *pool,
+			      pjsua_config *dst,
+			      const pjsua_config *src)
+{
+    unsigned i;
+
+    pj_memcpy(dst, src, sizeof(*src));
+
+    for (i=0; i<src->outbound_proxy_cnt; ++i) {
+	pj_strdup_with_null(pool, &dst->outbound_proxy[i],
+			    &src->outbound_proxy[i]);
+    }
+
+    for (i=0; i<src->cred_count; ++i) {
+	pjsip_cred_dup(pool, &dst->cred_info[i], &src->cred_info[i]);
+    }
+
+    pj_strdup_with_null(pool, &dst->user_agent, &src->user_agent);
+    pj_strdup_with_null(pool, &dst->stun_domain, &src->stun_domain);
+    pj_strdup_with_null(pool, &dst->stun_host, &src->stun_host);
+    pj_strdup_with_null(pool, &dst->stun_relay_host, &src->stun_relay_host);
+}
+
+PJ_DEF(void) pjsua_msg_data_init(pjsua_msg_data *msg_data)
+{
+    pj_bzero(msg_data, sizeof(*msg_data));
+    pj_list_init(&msg_data->hdr_list);
+}
+
+PJ_DEF(void) pjsua_transport_config_default(pjsua_transport_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+    pjsip_tls_setting_default(&cfg->tls_setting);
+}
+
+PJ_DEF(void) pjsua_transport_config_dup(pj_pool_t *pool,
+					pjsua_transport_config *dst,
+					const pjsua_transport_config *src)
+{
+    PJ_UNUSED_ARG(pool);
+    pj_memcpy(dst, src, sizeof(*src));
+}
+
+PJ_DEF(void) pjsua_acc_config_default(pjsua_acc_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+
+    cfg->reg_timeout = PJSUA_REG_INTERVAL;
+    cfg->transport_id = PJSUA_INVALID_ID;
+}
+
+PJ_DEF(void) pjsua_buddy_config_default(pjsua_buddy_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+}
+
+PJ_DEF(void) pjsua_media_config_default(pjsua_media_config *cfg)
+{
+    pj_bzero(cfg, sizeof(*cfg));
+
+    cfg->clock_rate = PJSUA_DEFAULT_CLOCK_RATE;
+    cfg->max_media_ports = 32;
+    cfg->has_ioqueue = PJ_TRUE;
+    cfg->thread_cnt = 1;
+    cfg->quality = PJSUA_DEFAULT_CODEC_QUALITY;
+    cfg->ilbc_mode = PJSUA_DEFAULT_ILBC_MODE;
+    cfg->ec_tail_len = PJSUA_DEFAULT_EC_TAIL_LEN;
+    cfg->jb_init = cfg->jb_min_pre = cfg->jb_max_pre = cfg->jb_max = -1;
+}
+
 
 /*****************************************************************************
  * This is a very simple PJSIP module, whose sole purpose is to display
@@ -148,7 +255,7 @@
 
     /* Only want to handle OPTIONS requests */
     if (pjsip_method_cmp(&rdata->msg_info.msg->line.req.method,
-			 &pjsip_options_method) != 0)
+			 pjsip_get_options_method()) != 0)
     {
 	return PJ_FALSE;
     }
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 6f646fb..8700bd5 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -625,8 +625,8 @@
  * Create UDP media transports for all the calls. This function creates
  * one UDP media transport for each call.
  */
-PJ_DEF(pj_status_t) 
-pjsua_media_transports_create(const pjsua_transport_config *app_cfg)
+PJ_DEF(pj_status_t) pjsua_media_transports_create(
+			const pjsua_transport_config *app_cfg)
 {
     pjsua_transport_config cfg;
     unsigned i;
@@ -1112,7 +1112,7 @@
     if (len==0)
 	return p;
 
-    for (--p; p!=path && *p!='/' && *p!='\\'; --p);
+    for (--p; p!=path && *p!='/' && *p!='\\'; ) --p;
 
     return (p==path) ? p : p+1;
 }
diff --git a/pjsip/src/pjsua-lib/pjsua_pres.c b/pjsip/src/pjsua-lib/pjsua_pres.c
index 5a90cb1..963db29 100644
--- a/pjsip/src/pjsua-lib/pjsua_pres.c
+++ b/pjsip/src/pjsua-lib/pjsua_pres.c
@@ -459,7 +459,7 @@
     pjsip_evsub_state ev_state;
     pj_status_t status;
 
-    if (pjsip_method_cmp(req_method, &pjsip_subscribe_method) != 0)
+    if (pjsip_method_cmp(req_method, pjsip_get_subscribe_method()) != 0)
 	return PJ_FALSE;
 
     /* Incoming SUBSCRIBE: */
@@ -926,7 +926,7 @@
     if (tsx->status_code/100 != 2 ||
 	tsx->role != PJSIP_UAC_ROLE ||
 	event->type != PJSIP_EVENT_RX_MSG || 
-	pjsip_method_cmp(&tsx->method, &pjsip_subscribe_method)!=0)
+	pjsip_method_cmp(&tsx->method, pjsip_get_subscribe_method())!=0)
     {
 	PJSUA_UNLOCK();
 	return;