diff --git a/wireshark/rsl-ipaccess.patch b/wireshark/rsl-ipaccess.patch
index 17d6441..8f922c4 100644
--- a/wireshark/rsl-ipaccess.patch
+++ b/wireshark/rsl-ipaccess.patch
@@ -1,7 +1,7 @@
 Index: wireshark/epan/dissectors/packet-rsl.c
 ===================================================================
 --- wireshark.orig/epan/dissectors/packet-rsl.c	2009-07-12 14:07:48.000000000 +0200
-+++ wireshark/epan/dissectors/packet-rsl.c	2009-07-12 21:58:21.000000000 +0200
++++ wireshark/epan/dissectors/packet-rsl.c	2009-07-12 23:04:33.000000000 +0200
 @@ -2,6 +2,7 @@
   * Routines for Radio Signalling Link (RSL) dissection.
   *
@@ -19,22 +19,32 @@
  
  /* Initialize the protocol and registered fields */
  static int proto_rsl		= -1;
-@@ -116,6 +119,14 @@
+@@ -116,6 +119,24 @@
  static int hf_rsl_rtd				= -1;
  static int hf_rsl_delay_ind			= -1;
  static int hf_rsl_tfo				= -1;
-+static int hf_rsl_speech_mode			= -1;
++static int hf_rsl_speech_mode_s			= -1;
++static int hf_rsl_speech_mode_m			= -1;
 +static int hf_rsl_conn_stat			= -1;
 +static int hf_rsl_conn_id			= -1;
 +static int hf_rsl_rtp_payload			= -1;
++static int hf_rsl_rtp_csd_fmt_d			= -1;
++static int hf_rsl_rtp_csd_fmt_ir		= -1;
 +static int hf_rsl_local_port			= -1;
 +static int hf_rsl_remote_port			= -1;
 +static int hf_rsl_local_ip			= -1;
 +static int hf_rsl_remote_ip			= -1;
++static int hf_rsl_cstat_tx_pkts			= -1;
++static int hf_rsl_cstat_tx_octs			= -1;
++static int hf_rsl_cstat_rx_pkts			= -1;
++static int hf_rsl_cstat_rx_octs			= -1;
++static int hf_rsl_cstat_lost_pkts		= -1;
++static int hf_rsl_cstat_ia_jitter		= -1;
++static int hf_rsl_cstat_avg_tx_dly		= -1;
  
  /* Initialize the subtree pointers */
  static int ett_rsl = -1;
-@@ -173,6 +184,15 @@
+@@ -173,6 +194,15 @@
  static int ett_ie_meas_res_no = -1;
  static int ett_ie_message_id = -1;
  static int ett_ie_sys_info_type = -1;
@@ -50,7 +60,7 @@
  
  proto_tree *top_tree;
  dissector_handle_t gsm_a_ccch_handle;
-@@ -208,8 +228,11 @@
+@@ -208,8 +238,11 @@
  	{  0x06,		"Common Channel Management messages" },
  	{  0x08,		"TRX Management messages" },
  	{  0x16,		"Location Services messages" },
@@ -62,7 +72,7 @@
  /*
   * 9.2 MESSAGE TYPE
   */
-@@ -276,6 +299,49 @@
+@@ -276,6 +309,49 @@
  	/* 	0 1 - - - - - - Location Services messages: */
  #define RSL_MSG_LOC_INF					65	/* 8.7.1 */
  
@@ -112,7 +122,7 @@
  
  static const value_string rsl_msg_type_vals[] = {
  	  /* 	0 0 0 0 - - - - Radio Link Layer Management messages: */
-@@ -338,6 +404,26 @@
+@@ -338,6 +414,26 @@
  	{  0x3f,	"TFO MODification REQuest" },					/* 8.4.31 */
  	/* 	0 1 - - - - - - Location Services messages: */
  	{  0x41,	"Location Information" },						/* 8.7.1 */
@@ -139,7 +149,7 @@
  	{ 0,		NULL }
  };
  
-@@ -371,10 +457,10 @@
+@@ -371,10 +467,10 @@
  #define RSL_IE_MESSAGE_ID		28
  
  #define RSL_IE_SYS_INFO_TYPE	30
@@ -154,7 +164,7 @@
  #define RSL_IE_FULL_IMM_ASS_INF			35
  #define RSL_IE_SMSCB_INF				36
  #define RSL_IE_FULL_MS_TIMING_OFFSET	37
-@@ -477,6 +563,24 @@
+@@ -477,6 +573,24 @@
  			Not used
  
  	*/
@@ -179,7 +189,7 @@
  	{ 0,			NULL }
  };
  
-@@ -513,6 +617,95 @@
+@@ -513,6 +627,96 @@
  	{ 0,			NULL }
  };
  
@@ -265,6 +275,7 @@
 +		[RSL_IE_IPAC_REMOTE_IP]		= { TLV_TYPE_FIXED, 4 },
 +		[RSL_IE_IPAC_REMOTE_PORT]	= { TLV_TYPE_FIXED, 2 },
 +		[RSL_IE_IPAC_LOCAL_IP]		= { TLV_TYPE_FIXED, 4 },
++		[RSL_IE_IPAC_CONN_STAT]		= { TLV_TYPE_TLV, 0 },
 +		[RSL_IE_IPAC_LOCAL_PORT]	= { TLV_TYPE_FIXED, 2 },
 +		[RSL_IE_IPAC_SPEECH_MODE]	= { TLV_TYPE_TV, 0 },
 +		[RSL_IE_IPAC_CONN_ID]		= { TLV_TYPE_FIXED, 2 },
@@ -275,7 +286,7 @@
  /* 9.3.1 Channel number			9.3.1	M TV 2 */
  static int
  dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-@@ -2043,7 +2236,6 @@
+@@ -2043,7 +2247,6 @@
  	proto_item_set_len(ti, length+2);
  
  	proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
@@ -283,244 +294,10 @@
  
  	/* Received Message */
  	offset = dissct_rsl_msg(tvb, pinfo, ie_tree, offset);
-@@ -2907,13 +3099,425 @@
- 	return ie_offset + length;
+@@ -2908,12 +3111,183 @@
  }
  
-+#if 0
-+static int
-+dissect_rsl_ipac_ie_f8(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != 0xf8)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Unknown 0xf8 IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_f8);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 3);
-+
-+	proto_tree_add_item(ie_tree, hf_rsl_f8, tvb, offset, 2, FALSE);
-+	offset += 2;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_local_port(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != RSL_IE_IPAC_LOCAL_PORT)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Local RTP Port IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_local_port);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 3);
-+
-+	proto_tree_add_item(ie_tree, hf_rsl_local_port, tvb, offset, 2, FALSE);
-+	offset += 2;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_remote_port(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != RSL_IE_IPAC_REMOTE_PORT)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Remote RTP Port IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_remote_port);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 3);
-+
-+	proto_tree_add_uint(ie_tree, hf_rsl_remote_port, tvb, offset, 2, FALSE);
-+	offset += 2;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_local_ip(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+	guint32 ip;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != RSL_IE_IPAC_LOCAL_IP)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Local IP Address IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_local_ip);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 5);
-+
-+	ip = tvb_get_ipv4(tvb, offset);
-+	proto_tree_add_ipv4(ie_tree, hf_rsl_local_ip, tvb, offset, 4, ip);
-+	offset += 4;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_remote_ip(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+	guint32 ip;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != RSL_IE_IPAC_REMOTE_IP)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Remote IP Address IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_remote_ip);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 5);
-+
-+	ip = tvb_get_ipv4(tvb, offset);
-+	proto_tree_add_ipv4(ie_tree, hf_rsl_remote_ip, tvb, offset, 4, ip);
-+	offset += 4;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_f6(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 length;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != 0xf6)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Unknown 0xf6 IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_f6);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+
-+	/* Length */
-+	length = tvb_get_guint8(tvb, offset);
-+	offset++;
-+	proto_item_set_len(ti, length+2);
-+
-+	proto_tree_add_bytes(ie_tree, hf_rsl_f6, tvb, offset, length,
-+				tvb_get_ptr(tvb, offset, length));
-+	offset += length;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_f4(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != 0xf4)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Unknown 0xf4 IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_f4);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 2);
-+	proto_tree_add_item(ie_tree, hf_rsl_f4, tvb, offset, 1, FALSE);
-+	offset++;
-+
-+	return offset;
-+}
-+
-+static int
-+dissect_rsl_ipac_ie_fc(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-+{
-+	proto_item *ti;
-+	proto_tree *ie_tree;
-+	guint8 ie_id;
-+
-+	if (is_mandatory == FALSE) {
-+		ie_id = tvb_get_guint8(tvb, offset);
-+		if (ie_id != 0xfc)
-+			return offset;
-+	}
-+
-+	ti = proto_tree_add_text(tree, tvb, offset, 0, "Unknown 0xfc IE");
-+	ie_tree = proto_item_add_subtree(ti, ett_ie_fc);
-+
-+	/* Element identifier */
-+	proto_tree_add_item(ie_tree, hf_rsl_ie_id, tvb, offset, 1, FALSE);
-+	offset++;
-+	/* Fixed Length */
-+	proto_item_set_len(ti, 2);
-+	proto_tree_add_item(ie_tree, hf_rsl_fc, tvb, offset, 1, FALSE);
-+	offset++;
-+
-+	return offset;
-+}
-+#endif
-+
-+static int
+ static int
 +dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,				    int offset)
 +{
 +	guint8 msg_type;
@@ -531,6 +308,7 @@
 +	msg_type = tvb_get_guint8(tvb, offset)&0x7f;
 +	offset++;
 +
++#if 0
 +	switch (msg_type) {
 +	case RSL_MSG_TYPE_IPAC_BIND:
 +	case RSL_MSG_TYPE_IPAC_BIND_ACK:
@@ -551,41 +329,9 @@
 +		/* Channel number			9.3.1	M TV 2		*/
 +		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
 +		break;
-+#if 0
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_f8(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_local_port(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_local_ip(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_fc(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_remote_ip(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_remote_port(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_f4(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_fc(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_f8(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+		/* Channel number			9.3.1	M TV 2		*/
-+		offset = dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_f8(tvb, pinfo, tree, offset, TRUE);
-+		offset = dissect_rsl_ipac_ie_f6(tvb, pinfo, tree, offset, TRUE);
-+		/* Cause					9.3.26	M TLV >=3 */
-+		offset = dissect_rsl_ie_cause(tvb, pinfo, tree, offset, TRUE);
-+		break;
-+#endif
 +	}
-+	/* parse remaining TLV attributes */
++#endif
++	/* parse TLV attributes */
 +	while (tvb_reported_length_remaining(tvb, offset) != 0) {
 +		guint8 tag;
 +		unsigned int len, hlen, len_len;
@@ -635,44 +381,67 @@
 +
 +		switch (tag) {
 +		case RSL_IE_CH_NO:
-+			dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
++			dissect_rsl_ie_ch_no(tvb, pinfo, ie_tree, offset, FALSE);
 +			break;
 +		case RSL_IE_FRAME_NO:
-+			dissect_rsl_ie_frame_no(tvb, pinfo, ie_tree, offset, TRUE);
++			dissect_rsl_ie_frame_no(tvb, pinfo, ie_tree, offset, FALSE);
 +			break;
 +		case RSL_IE_MS_POW:
-+			dissect_rsl_ie_ms_pow(tvb, pinfo, ie_tree, offset, TRUE);
++			dissect_rsl_ie_ms_pow(tvb, pinfo, ie_tree, offset, FALSE);
 +			break;
 +		case RSL_IE_IPAC_REMOTE_IP:
 +			proto_tree_add_item(ie_tree, hf_rsl_remote_ip, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
 +			break;
 +		case RSL_IE_IPAC_REMOTE_PORT:
 +			proto_tree_add_item(ie_tree, hf_rsl_remote_port, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
 +			break;
 +		case RSL_IE_IPAC_LOCAL_IP:
 +			proto_tree_add_item(ie_tree, hf_rsl_local_ip, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
 +			local_addr = tvb_get_ipv4(tvb, offset);
 +			break;
 +		case RSL_IE_IPAC_LOCAL_PORT:
 +			proto_tree_add_item(ie_tree, hf_rsl_local_port, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
 +			local_port = tvb_get_ntohs(tvb, offset);
 +			break;
 +		case RSL_IE_IPAC_SPEECH_MODE:
-+			proto_tree_add_item(ie_tree, hf_rsl_speech_mode, tvb,
-+					    offset, len, TRUE);
++			proto_tree_add_item(ie_tree, hf_rsl_speech_mode_s, tvb,
++					    offset, len, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_speech_mode_m, tvb,
++					    offset, len, FALSE);
 +			break;
 +		case RSL_IE_IPAC_RTP_PAYLOAD:
 +		case RSL_IE_IPAC_RTP_PAYLOAD2:
 +			proto_tree_add_item(ie_tree, hf_rsl_rtp_payload, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
++			break;
++		case RSL_IE_IPAC_RTP_CSD_FMT:
++			proto_tree_add_item(ie_tree, hf_rsl_rtp_csd_fmt_d, tvb,
++					    offset, len, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_rtp_csd_fmt_ir, tvb,
++					    offset, len, FALSE);
 +			break;
 +		case RSL_IE_IPAC_CONN_ID:
 +			proto_tree_add_item(ie_tree, hf_rsl_conn_id, tvb,
-+					    offset, len, TRUE);
++					    offset, len, FALSE);
++		case RSL_IE_IPAC_CONN_STAT:
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_tx_pkts, tvb,
++					    offset, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_tx_octs, tvb,
++					    offset+4, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_rx_pkts, tvb,
++					    offset+8, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_rx_octs, tvb,
++					    offset+12, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_lost_pkts, tvb,
++					    offset+16, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_ia_jitter, tvb,
++					    offset+20, 4, FALSE);
++			proto_tree_add_item(ie_tree, hf_rsl_cstat_avg_tx_dly, tvb,
++					    offset+24, 4, FALSE);
 +			break;
 +		}
 +		offset += len;
@@ -693,7 +462,7 @@
 +	return offset;
 +}
 +
- static int
++static int
  dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
  {
 -	guint8	msg_type;
@@ -710,7 +479,7 @@
  	offset++;
  
  	switch (msg_type){
-@@ -3481,6 +4085,18 @@
+@@ -3481,6 +3855,18 @@
  		/* LLP APDU 9.3.58 M LV 2-N */
  		offset = dissect_rsl_ie_llp_apdu(tvb, pinfo, tree, offset, TRUE);
  		break;
@@ -729,7 +498,48 @@
  	default:
  		break;
  	}
-@@ -3517,7 +4133,6 @@
+@@ -3488,6 +3874,40 @@
+ 	return offset;
+ 
+ }
++
++static const value_string rsl_ipacc_spm_s_vals[] = {
++	{ 0,	"GSM FR codec (GSM type 1, FS)" },
++	{ 1,	"GSM EFR codec (GSM type 2, FS)" },
++	{ 2, 	"GSM AMR/FR codec (GSM type 3, FS)" },
++	{ 3,	"GSM HR codec (GSM type 1, HS)" },
++	{ 5,	"GSM AMR/HR codec (GSM type 3, HS)" },
++	{ 0xf,	"As specified by RTP Payload Type IE" },
++	{ 0,	NULL }
++};
++
++static const value_string rsl_ipacc_spm_m_vals[] = {
++	{ 0,	"Send and Receive" },
++	{ 1,	"Receive Only" },
++	{ 2,	"Send Only" },
++	{ 0, 	NULL }
++};
++
++static const value_string rsl_ipacc_rtp_csd_fmt_d_vals[] = {
++	{ 0,	"External TRAU format" },
++	{ 1,	"Non-TRAU Packed format" },
++	{ 2,	"TRAU within the BTS" },
++	{ 3,	"IWF-Free BTS-BTS Data" },
++	{ 0, 	NULL }
++};
++
++static const value_string rsl_ipacc_rtp_csd_fmt_ir_vals[] = {
++	{ 0,	"8kb/s" },
++	{ 1,	"16kb/s" },
++	{ 2,	"32kb/s" },
++	{ 3,	"64kb/s" },
++	{ 0,	NULL }
++};
++
+ static void
+ dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+ {
+@@ -3517,7 +3937,6 @@
  		/* 9.1 Message discriminator */
  		proto_tree_add_item(rsl_tree, hf_rsl_msg_dsc, tvb, offset, 1, FALSE);
  		proto_tree_add_item(rsl_tree, hf_rsl_T_bit, tvb, offset, 1, FALSE);
@@ -737,13 +547,19 @@
  
  		offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset);
  
-@@ -3883,6 +4498,42 @@
+@@ -3883,6 +4302,86 @@
  			FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03,
  			NULL, HFILL }
  		},
-+		{ &hf_rsl_speech_mode,
-+			{ "ip.access Speech Mode", "rsl.ipacc.speech_mode",
-+			  FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
++		{ &hf_rsl_speech_mode_s,
++			{ "ip.access Speech Mode S", "rsl.ipacc.speech_mode_s",
++			  FT_UINT8, BASE_HEX, VALS(rsl_ipacc_spm_s_vals),
++			  0xf, NULL, HFILL }
++		},
++		{ &hf_rsl_speech_mode_m,
++			{ "ip.access Speech Mode M", "rsl.ipacc.speech_mode_m",
++			  FT_UINT8, BASE_HEX, VALS(rsl_ipacc_spm_m_vals),
++			  0xf0, NULL, HFILL }
 +		},
 +		{ &hf_rsl_conn_stat,
 +			{ "ip.access Connection Statistics","rsl.ipacc.conn_stat",
@@ -757,6 +573,16 @@
 +			{ "ip.access RTP Payload Type",	"rsl.ipacc.rtp_payload",
 +			  FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
 +		},
++		{ &hf_rsl_rtp_csd_fmt_d,
++			{ "ip.access RTP CSD Format D", "rsl.ipacc.rtp_csd_fmt_d",
++			  FT_UINT8, BASE_HEX, VALS(rsl_ipacc_rtp_csd_fmt_d_vals),
++			  0x0f, NULL, HFILL },
++		},
++		{ &hf_rsl_rtp_csd_fmt_ir,
++			{ "ip.access RTP CSD Format IR", "rsl.ipacc.rtp_csd_fmt_ir",
++			  FT_UINT8, BASE_HEX, VALS(rsl_ipacc_rtp_csd_fmt_ir_vals),
++			  0xf0, NULL, HFILL },
++		},
 +		{ &hf_rsl_local_port,
 +			{ "ip.access Local RTP Port",	"rsl.ipacc.local_port",
 +			  FT_UINT16, BASE_DEC, NULL, 0x0,
@@ -777,10 +603,38 @@
 +			  FT_IPv4, BASE_NONE, NULL, 0x0,
 +			  "ip.access Remote IP Address", HFILL },
 +		},
++		{ &hf_rsl_cstat_tx_pkts,
++			{ "Packets Sent", "rsl.ipacc.cstat.tx_pkts",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_tx_octs,
++			{ "Octets Sent", "rsl.ipacc.cstat.tx_octets",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_rx_pkts,
++			{ "Packets Received", "rsl.ipacc.cstat.rx_pkts",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_rx_octs,
++			{ "Octets Received", "rsl.ipacc.cstat.rx_octets",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_lost_pkts,
++			{ "Packets Lost", "rsl.ipacc.cstat.lost_pkts",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_ia_jitter,
++			{ "Inter-arrival Jitter", "rsl.ipacc.cstat.ia_jitter",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_cstat_avg_tx_dly,
++			{ "Average Tx Delay", "rsl.ipacc.cstat.avg_tx_delay",
++			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
++		},
  	};
  	static gint *ett[] = {
  		&ett_rsl,
-@@ -3941,6 +4592,14 @@
+@@ -3941,6 +4440,14 @@
  		&ett_ie_meas_res_no,
  		&ett_ie_message_id,
  		&ett_ie_sys_info_type,
