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/gsm_a_rr-rrlp.patch b/wireshark/gsm_a_rr-rrlp.patch
new file mode 100644
index 0000000..2e79d2b
--- /dev/null
+++ b/wireshark/gsm_a_rr-rrlp.patch
@@ -0,0 +1,195 @@
+Index: wireshark/epan/dissectors/packet-gsm_a_rr.c
+===================================================================
+--- wireshark.orig/epan/dissectors/packet-gsm_a_rr.c
++++ wireshark/epan/dissectors/packet-gsm_a_rr.c
+@@ -69,6 +69,7 @@
+ 
+ static dissector_handle_t rrc_irat_ho_info_handle;
+ static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle;
++static packet_info *rr_apdu_pinfo;
+ 
+ #define PADDING_BYTE 0x2B
+ 
+@@ -301,9 +302,9 @@
+     { 0x00, "Extended Measurement Results" },					/* [3] 10.5.2.45 Extended Measurement Results */
+     { 0x00, "Extended Measurement Frequency List" },				/* [3] 10.5.2.46 Extended Measurement Frequency List */
+     { 0x00, "Suspension Cause" },						/* [3] 10.5.2.47								*/
+-/* [3] 10.5.2.48 APDU ID
+- * [3] 10.5.2.49 APDU Flags
+- * [3] 10.5.2.50 APDU Data */
++    { 0x00, "APDU ID" },							/* [3] 10.5.2.48 APDU ID */
++    { 0x00, "APDU Flags" },							/* [3] 10.5.2.49 APDU Flags */
++    { 0x00, "APDU Data" },							/* [3] 10.5.2.50 APDU Data */
+     { 0x00, "Handover to UTRAN Command" },					/* [3] 10.5.2.51 Handover To UTRAN Command */
+ /* [3] 10.5.2.52 Handover To cdma2000 Command
+  * [3] 10.5.2.53 (void)
+@@ -497,6 +498,9 @@
+ static int hf_gsm_a_rr_chnl_needed_ch3 = -1;
+ static int hf_gsm_a_rr_chnl_needed_ch4 = -1;
+ static int hf_gsm_a_rr_suspension_cause = -1;
++static int hf_gsm_a_rr_apdu_id = -1;
++static int hf_gsm_a_rr_apdu_flags = -1;
++static int hf_gsm_a_rr_apdu_data = -1;
+ static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8 = -1;
+ static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b7 = -1;
+ static int hf_gsm_a_rr_set_of_amr_codec_modes_v1_b6 = -1;
+@@ -691,7 +695,7 @@
+ static char a_bigbuf[1024];
+ 
+ static dissector_handle_t data_handle;
+-
++static dissector_handle_t rrlp_dissector;
+ 
+ 
+ #define	NUM_GSM_RR_ELEM (sizeof(gsm_rr_elem_strings)/sizeof(value_string))
+@@ -6224,9 +6228,50 @@
+ }
+ /*
+  * [3] 10.5.2.48 APDU ID
++ */
++static const value_string gsm_a_rr_apdu_id_vals[] = {
++	{ 0, "RRLP (GSM 04.31) LCS" },
++	{ 0, NULL },
++};
++static guint16
++de_rr_apdu_id(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
++{
++    proto_tree_add_item(tree, hf_gsm_a_rr_apdu_id, tvb, offset, 1, FALSE);
++
++    return 0;
++}
++
++/*
+  * [3] 10.5.2.49 APDU Flags
++ */
++static const value_string gsm_a_rr_apdu_flags_vals[] = {
++	{ 1, "Last or only segment" },
++	{ 2, "First or only segment" },
++	{ 0, NULL },
++};
++static guint16
++de_rr_apdu_flags(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gchar *add_string _U_, int string_len _U_)
++{
++    proto_tree_add_item(tree, hf_gsm_a_rr_apdu_flags, tvb, offset, 1, FALSE);
++
++    return 1;
++}
++
++/*
+  * [3] 10.5.2.50 APDU Data
+  */
++static guint16
++de_rr_apdu_data(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len, gchar *add_string _U_, int string_len _U_)
++{
++    tvbuff_t *sub_tvb;
++    static packet_info p_info;
++
++    sub_tvb = tvb_new_subset(tvb, offset, len, len);
++
++    call_dissector(rrlp_dissector, sub_tvb, &p_info, tree);
++
++    return len;
++}
+ 
+ /*
+  * [3] 10.5.2.51 Handover To UTRAN Command
+@@ -6466,9 +6511,9 @@
+     de_rr_ext_meas_result,			/* [3] 10.5.2.45 Extended Measurement Results 		*/
+     de_rr_ext_meas_freq_list,			/* [3] 10.5.2.46 Extended Measurement Frequency List 	*/
+     de_rr_sus_cau,				/* [3] 10.5.2.47 Suspension Cause			*/
+-/* [3] 10.5.2.48 APDU ID
+- * [3] 10.5.2.49 APDU Flags
+- * [3] 10.5.2.50 APDU Data */
++    de_rr_apdu_id,				/* [3] 10.5.2.48 APDU ID				*/
++    de_rr_apdu_flags,				/* [3] 10.5.2.49 APDU Flags				*/
++    de_rr_apdu_data,				/* [3] 10.5.2.50 APDU Data */
+     de_rr_ho_to_utran_cmd,			/* [3] 10.5.2.51 Handover To UTRAN Command 		*/
+ /* [3] 10.5.2.52 Handover To cdma2000 Command
+  * [3] 10.5.2.53 (void)
+@@ -7864,6 +7909,24 @@
+ }
+ 
+ /*
++ * 9.1.53 Application Information
++ */
++static void
++dtap_rr_app_inf(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len)
++{
++    guint32	curr_offset;
++    guint32	consumed;
++    guint	curr_len;
++
++    curr_offset = offset;
++    curr_len = len;
++
++    ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_APDU_ID);
++    ELEM_MAND_V(GSM_A_PDU_TYPE_RR, DE_RR_APDU_FLAGS);
++    ELEM_MAND_LV(GSM_A_PDU_TYPE_RR, DE_RR_APDU_DATA, NULL);
++}
++
++/*
+  * [4] 9.1.54 Measurement Information
+  */
+ static const value_string gsm_a_rr_3g_wait_vals[] = {
+@@ -8386,7 +8449,7 @@
+ 
+     NULL,			/* UTRAN Classmark Change/Handover To UTRAN Command */	/* spec conflict */
+ 
+-    NULL,			/* Application Information */
++    dtap_rr_app_inf,		/* Application Information */
+ 
+     NULL,			/* NONE */
+ };
+@@ -8499,6 +8562,7 @@
+      */
+     switch (pd){
+     case 6:
++	rr_apdu_pinfo = pinfo;
+         get_rr_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn);
+         break;
+ 
+@@ -9155,6 +9219,21 @@
+ 		FT_UINT8,BASE_DEC,  VALS(gsm_a_rr_suspension_cause_vals), 0x0,
+ 		NULL, HFILL }
+             },
++            { &hf_gsm_a_rr_apdu_id,
++              { "APDU ID","gsm_a.rr.apdu_id",
++		FT_UINT8,BASE_HEX,  VALS(gsm_a_rr_apdu_id_vals), 0x0f,
++		NULL, HFILL }
++            },
++            { &hf_gsm_a_rr_apdu_flags,
++              { "APDU Flags","gsm_a.rr.apdu_flags",
++		FT_UINT8,BASE_HEX,  VALS(gsm_a_rr_apdu_flags_vals), 0xf0,
++		NULL, HFILL }
++            },
++            { &hf_gsm_a_rr_apdu_data,
++              { "APDU Data","gsm_a.rr.apdu_data",
++		FT_BYTES,BASE_HEX,  NULL, 0x00,
++		NULL, HFILL }
++            },
+             { &hf_gsm_a_rr_set_of_amr_codec_modes_v1_b8,
+               { "12,2 kbit/s codec rate", "gsm_a.rr.set_of_amr_codec_modes_v1b8",
+ 		FT_BOOLEAN,8,  TFS(&gsm_a_rr_set_of_amr_codec_modes), 0x80,
+@@ -10157,4 +10236,5 @@
+     data_handle = find_dissector("data");
+     rrc_irat_ho_info_handle = find_dissector("rrc.irat.irat_ho_info");
+     rrc_irat_ho_to_utran_cmd_handle = find_dissector("rrc.irat.ho_to_utran_cmd");
++    rrlp_dissector = find_dissector("rrlp");
+ }
+Index: wireshark/epan/dissectors/packet-gsm_a_common.h
+===================================================================
+--- wireshark.orig/epan/dissectors/packet-gsm_a_common.h
++++ wireshark/epan/dissectors/packet-gsm_a_common.h
+@@ -1101,9 +1101,9 @@
+ 	DE_RR_EXT_MEAS_RESULT,     	/* [3] 10.5.2.45 Extended Measurement Results */
+ 	DE_RR_EXT_MEAS_FREQ_LIST,		/* [3] 10.5.2.46 Extended Measurement Frequency List */
+ 	DE_RR_SUS_CAU,					/* [3] 10.5.2.47 Suspension Cause				*/
+-/* [3] 10.5.2.48 APDU ID
+- * [3] 10.5.2.49 APDU Flags
+- * [3] 10.5.2.50 APDU Data */
++	DE_RR_APDU_ID,					/* [3] 10.5.2.48 APDU ID */
++	DE_RR_APDU_FLAGS,				/* [3] 10.5.2.49 APDU Flags */
++	DE_RR_APDU_DATA,				/* [3] 10.5.2.50 APDU Data */
+ 	DE_RR_HO_TO_UTRAN_CMD,			/* [3] 10.5.2.51 Handover To UTRAN Command */
+ /* [3] 10.5.2.52 Handover To cdma2000 Command
+  * [3] 10.5.2.53 (void)
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,
