diff --git a/wireshark/abis_oml.patch b/wireshark/abis_oml.patch
index f48b3e6..2de1610 100644
--- a/wireshark/abis_oml.patch
+++ b/wireshark/abis_oml.patch
@@ -1,20 +1,20 @@
 Index: wireshark/epan/dissectors/Makefile.common
 ===================================================================
---- wireshark.orig/epan/dissectors/Makefile.common	2009-07-12 14:07:53.000000000 +0200
-+++ wireshark/epan/dissectors/Makefile.common	2009-07-12 14:52:09.000000000 +0200
-@@ -472,6 +472,7 @@
+--- wireshark.orig/epan/dissectors/Makefile.common
++++ wireshark/epan/dissectors/Makefile.common
+@@ -473,6 +473,7 @@
+ 	packet-gsm_a_gm.c		\
  	packet-gsm_a_rp.c		\
  	packet-gsm_a_rr.c	\
- 	packet-gsm_abis_ip.c	\
 +	packet-gsm_abis_oml.c	\
+ 	packet-gsm_ipa.c	\
  	packet-gsm_bsslap.c		\
  	packet-gsm_bssmap_le.c	\
- 	packet-gsm_sms.c	\
 Index: wireshark/epan/dissectors/packet-gsm_abis_oml.c
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ wireshark/epan/dissectors/packet-gsm_abis_oml.c	2009-07-12 20:41:18.000000000 +0200
-@@ -0,0 +1,1363 @@
+--- /dev/null
++++ wireshark/epan/dissectors/packet-gsm_abis_oml.c
+@@ -0,0 +1,1365 @@
 +/* packet-abis_oml.c
 + * Routines for packet dissection of GSM A-bis over IP (3GPP TS 12.21)
 + * Copyright 2009 by Harald Welte <laforge@gnumonks.org>
@@ -49,6 +49,7 @@
 +
 +#include <epan/packet.h>
 +#include <epan/emem.h>
++#include <epan/lapd_sapi.h>
 +
 +#include "packet-gsm_abis_oml.h"
 +#include "packet-gsm_a_common.h"
@@ -1377,11 +1378,12 @@
 +	dissector_handle_t abis_oml_handle;
 +
 +	abis_oml_handle = find_dissector("abis_oml");
++	dissector_add("lapd.gsm.sapi", LAPD_GSM_SAPI_OM_PROC, abis_oml_handle);
 +}
 Index: wireshark/epan/dissectors/packet-gsm_abis_oml.h
 ===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ wireshark/epan/dissectors/packet-gsm_abis_oml.h	2009-07-12 17:18:20.000000000 +0200
+--- /dev/null
++++ wireshark/epan/dissectors/packet-gsm_abis_oml.h
 @@ -0,0 +1,786 @@
 +/* GSM Network Management messages on the A-bis interface
 + * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */
diff --git a/wireshark/rsl-ipaccess.patch b/wireshark/rsl-ipaccess.patch
index 8f922c4..365983b 100644
--- a/wireshark/rsl-ipaccess.patch
+++ b/wireshark/rsl-ipaccess.patch
@@ -1,14 +1,14 @@
 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 23:04:33.000000000 +0200
+--- wireshark.orig/epan/dissectors/packet-rsl.c
++++ wireshark/epan/dissectors/packet-rsl.c
 @@ -2,6 +2,7 @@
   * Routines for Radio Signalling Link (RSL) dissection.
   *
   * Copyright 2007, Anders Broman <anders.broman@ericsson.com>
 + * Copyright 2009, Harald Welte <laforge@gnumonks.org>
   *
-  * $Id: packet-rsl.c 29056 2009-07-10 20:00:54Z tuexen $
+  * $Id: packet-rsl.c 29344 2009-08-09 07:36:13Z krj $
   *
 @@ -44,6 +45,8 @@
  #include <epan/lapd_sapi.h>
@@ -19,32 +19,22 @@
  
  /* Initialize the protocol and registered fields */
  static int proto_rsl		= -1;
-@@ -116,6 +119,24 @@
+@@ -116,6 +119,14 @@
  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_s			= -1;
-+static int hf_rsl_speech_mode_m			= -1;
++static int hf_rsl_speech_mode			= -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 +194,15 @@
+@@ -173,6 +184,15 @@
  static int ett_ie_meas_res_no = -1;
  static int ett_ie_message_id = -1;
  static int ett_ie_sys_info_type = -1;
@@ -60,7 +50,7 @@
  
  proto_tree *top_tree;
  dissector_handle_t gsm_a_ccch_handle;
-@@ -208,8 +238,11 @@
+@@ -208,8 +228,11 @@
  	{  0x06,		"Common Channel Management messages" },
  	{  0x08,		"TRX Management messages" },
  	{  0x16,		"Location Services messages" },
@@ -72,7 +62,7 @@
  /*
   * 9.2 MESSAGE TYPE
   */
-@@ -276,6 +309,49 @@
+@@ -276,6 +299,49 @@
  	/* 	0 1 - - - - - - Location Services messages: */
  #define RSL_MSG_LOC_INF					65	/* 8.7.1 */
  
@@ -122,7 +112,7 @@
  
  static const value_string rsl_msg_type_vals[] = {
  	  /* 	0 0 0 0 - - - - Radio Link Layer Management messages: */
-@@ -338,6 +414,26 @@
+@@ -338,6 +404,26 @@
  	{  0x3f,	"TFO MODification REQuest" },					/* 8.4.31 */
  	/* 	0 1 - - - - - - Location Services messages: */
  	{  0x41,	"Location Information" },						/* 8.7.1 */
@@ -149,7 +139,7 @@
  	{ 0,		NULL }
  };
  
-@@ -371,10 +467,10 @@
+@@ -371,10 +457,10 @@
  #define RSL_IE_MESSAGE_ID		28
  
  #define RSL_IE_SYS_INFO_TYPE	30
@@ -164,7 +154,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 +573,24 @@
+@@ -477,6 +563,24 @@
  			Not used
  
  	*/
@@ -189,7 +179,7 @@
  	{ 0,			NULL }
  };
  
-@@ -513,6 +627,96 @@
+@@ -513,6 +617,95 @@
  	{ 0,			NULL }
  };
  
@@ -275,7 +265,6 @@
 +		[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 },
@@ -286,7 +275,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 +2247,6 @@
+@@ -2043,7 +2236,6 @@
  	proto_item_set_len(ti, length+2);
  
  	proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
@@ -294,10 +283,244 @@
  
  	/* Received Message */
  	offset = dissct_rsl_msg(tvb, pinfo, ie_tree, offset);
-@@ -2908,12 +3111,183 @@
+@@ -2907,13 +3099,425 @@
+ 	return ie_offset + length;
  }
  
- static int
++#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
 +dissct_rsl_ipaccess_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,				    int offset)
 +{
 +	guint8 msg_type;
@@ -308,7 +531,6 @@
 +	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:
@@ -329,9 +551,41 @@
 +		/* 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 TLV attributes */
++	}
++	/* parse remaining TLV attributes */
 +	while (tvb_reported_length_remaining(tvb, offset) != 0) {
 +		guint8 tag;
 +		unsigned int len, hlen, len_len;
@@ -381,13 +635,13 @@
 +
 +		switch (tag) {
 +		case RSL_IE_CH_NO:
-+			dissect_rsl_ie_ch_no(tvb, pinfo, ie_tree, offset, FALSE);
++			dissect_rsl_ie_ch_no(tvb, pinfo, tree, offset, TRUE);
 +			break;
 +		case RSL_IE_FRAME_NO:
-+			dissect_rsl_ie_frame_no(tvb, pinfo, ie_tree, offset, FALSE);
++			dissect_rsl_ie_frame_no(tvb, pinfo, ie_tree, offset, TRUE);
 +			break;
 +		case RSL_IE_MS_POW:
-+			dissect_rsl_ie_ms_pow(tvb, pinfo, ie_tree, offset, FALSE);
++			dissect_rsl_ie_ms_pow(tvb, pinfo, ie_tree, offset, TRUE);
 +			break;
 +		case RSL_IE_IPAC_REMOTE_IP:
 +			proto_tree_add_item(ie_tree, hf_rsl_remote_ip, tvb,
@@ -408,9 +662,7 @@
 +			local_port = tvb_get_ntohs(tvb, offset);
 +			break;
 +		case RSL_IE_IPAC_SPEECH_MODE:
-+			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,
++			proto_tree_add_item(ie_tree, hf_rsl_speech_mode, tvb,
 +					    offset, len, FALSE);
 +			break;
 +		case RSL_IE_IPAC_RTP_PAYLOAD:
@@ -418,30 +670,9 @@
 +			proto_tree_add_item(ie_tree, hf_rsl_rtp_payload, tvb,
 +					    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, 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;
@@ -462,7 +693,7 @@
 +	return offset;
 +}
 +
-+static int
+ static int
  dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
  {
 -	guint8	msg_type;
@@ -479,7 +710,7 @@
  	offset++;
  
  	switch (msg_type){
-@@ -3481,6 +3855,18 @@
+@@ -3481,6 +4085,18 @@
  		/* LLP APDU 9.3.58 M LV 2-N */
  		offset = dissect_rsl_ie_llp_apdu(tvb, pinfo, tree, offset, TRUE);
  		break;
@@ -498,48 +729,7 @@
  	default:
  		break;
  	}
-@@ -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 @@
+@@ -3515,7 +4131,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);
@@ -547,19 +737,13 @@
  
  		offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset);
  
-@@ -3883,6 +4302,86 @@
+@@ -3881,6 +4496,42 @@
  			FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03,
  			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_speech_mode,
++			{ "ip.access Speech Mode", "rsl.ipacc.speech_mode",
++			  FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
 +		},
 +		{ &hf_rsl_conn_stat,
 +			{ "ip.access Connection Statistics","rsl.ipacc.conn_stat",
@@ -573,16 +757,6 @@
 +			{ "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,
@@ -603,38 +777,10 @@
 +			  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 +4440,14 @@
+@@ -3938,6 +4589,14 @@
  		&ett_ie_meas_res_no,
  		&ett_ie_message_id,
  		&ett_ie_sys_info_type,
