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);
 
 
 /**
