diff --git a/wireshark/0005-rsl-hsl.patch b/wireshark/0005-rsl-hsl.patch
index c778af5..98221a1 100644
--- a/wireshark/0005-rsl-hsl.patch
+++ b/wireshark/0005-rsl-hsl.patch
@@ -1,17 +1,30 @@
 Index: wireshark/epan/dissectors/packet-rsl.c
 ===================================================================
 --- wireshark.orig/epan/dissectors/packet-rsl.c	2011-01-13 12:51:02.000000000 +0100
-+++ wireshark/epan/dissectors/packet-rsl.c	2011-01-13 20:26:51.000000000 +0100
-@@ -137,6 +137,8 @@
++++ wireshark/epan/dissectors/packet-rsl.c	2011-01-14 10:41:18.000000000 +0100
+@@ -2,7 +2,7 @@
+  * Routines for Radio Signalling Link (RSL) dissection.
+  *
+  * Copyright 2007, Anders Broman <anders.broman@ericsson.com>
+- * Copyright 2009, Harald Welte <laforge@gnumonks.org>
++ * Copyright 2009-2011, Harald Welte <laforge@gnumonks.org>
+  *
+  * $Id: packet-rsl.c 35224 2010-12-20 05:35:29Z guy $
+  *
+@@ -137,6 +137,12 @@
  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;
 +/* HSL */
 +static int hf_rsl_hsl_bts_serno			= -1;
++static int hf_rsl_hsl_bts_ver			= -1;
++static int hf_rsl_hsl_l1_prim			= -1;
++static int hf_rsl_hsl_trau_remote_port		= -1;
++static int hf_rsl_hsl_trau_remote_ip		= -1;
  
  /* Initialize the subtree pointers */
  static int ett_rsl = -1;
-@@ -207,6 +209,7 @@
+@@ -207,6 +213,7 @@
  static proto_tree *top_tree;
  static dissector_handle_t gsm_a_ccch_handle;
  static dissector_handle_t gsm_a_dtap_handle;
@@ -19,7 +32,7 @@
  
  static gboolean is_si2q = FALSE;
  
-@@ -239,9 +242,11 @@
+@@ -239,9 +246,11 @@
  	{  0x08,		"TRX Management messages" },
  	{  0x16,		"Location Services messages" },
  	{  0x3f,		"ip.access Vendor Specific messages" },
@@ -31,7 +44,7 @@
  
  /*
   * 9.2 MESSAGE TYPE
-@@ -353,6 +358,22 @@
+@@ -353,6 +362,22 @@
  #define RSL_IE_IPAC_RTP_MPLEX		0xfd
  #define RSL_IE_IPAC_RTP_MPLEX_ID	0xfe
  
@@ -54,7 +67,7 @@
  static const value_string rsl_msg_type_vals[] = {
  	  /* 	0 0 0 0 - - - - Radio Link Layer Management messages: */
  	{  0x01,	"DATA REQuest" },								/* 8.3.1 */
-@@ -434,6 +455,12 @@
+@@ -434,6 +459,12 @@
  	{  0x77,	"ip.access DLCX" },
  	{  0x78,	"ip.access DLCX ACK" },
  	{  0x79,	"ip.access DLCX NACK" },
@@ -67,7 +80,7 @@
  	{ 0,		NULL }
  };
  
-@@ -573,6 +600,7 @@
+@@ -573,6 +604,7 @@
  			Not used
  
  	*/
@@ -75,7 +88,7 @@
  	{ 0xe0,		"SRTP Configuration" },
  	{ 0xe1,		"BSC Proxy UDP Port" },
  	{ 0xe2,		"BSC Multiplex Timeout" },
-@@ -591,6 +619,13 @@
+@@ -591,6 +623,13 @@
  	{ 0xfc,		"RTP Payload Type 2" },
  	{ 0xfd,		"RTP Multiplex" },
  	{ 0xfe,		"RTP Multiplex Identifier" },
@@ -89,7 +102,7 @@
  	{ 0,			NULL }
  };
  
-@@ -714,6 +749,13 @@
+@@ -714,6 +753,13 @@
  		[RSL_IE_IPAC_SPEECH_MODE]	= { TLV_TYPE_TV, 0 },
  		[RSL_IE_IPAC_CONN_ID]		= { TLV_TYPE_FIXED, 2 },
  		[RSL_IE_IPAC_RTP_PAYLOAD2]	= { TLV_TYPE_TV, 0 },
@@ -103,7 +116,7 @@
  	},
  };
  
-@@ -3120,7 +3162,7 @@
+@@ -3120,7 +3166,7 @@
  	guint16 local_port = 0;
  	address src_addr;
  
@@ -112,7 +125,7 @@
  	offset++;
  
  #if 0
-@@ -3259,6 +3301,25 @@
+@@ -3259,6 +3305,35 @@
  			proto_tree_add_item(ie_tree, hf_rsl_cstat_avg_tx_dly, tvb,
  					    offset+24, 4, FALSE);
  			break;
@@ -120,14 +133,24 @@
 +		case RSL_IE_HSL_BTS_SERNO:
 +			proto_tree_add_item(ie_tree, hf_rsl_hsl_bts_serno, tvb,
 +					    offset, len, FALSE);
++			col_append_fstr(pinfo->cinfo, COL_INFO, "SerNo %s ",
++					tvb_get_string(tvb, offset, len));
 +			break;
 +		case RSL_IE_HSL_TRAU_PARAMS:
-+			proto_tree_add_item(tree, hf_rsl_remote_port, tvb,
-+					    offset+2, 2, FALSE);
-+			proto_tree_add_item(tree, hf_rsl_remote_ip, tvb,
++			proto_tree_add_item(tree, hf_rsl_hsl_trau_remote_port, tvb,
++					    offset+2, 2, TRUE);
++			proto_tree_add_item(tree, hf_rsl_hsl_trau_remote_ip, tvb,
 +					    offset+4, 4, FALSE);
 +			/* FIXME: other fields !! */
 +			break;
++		case RSL_IE_HSL_L1_PRIM:
++			proto_tree_add_item(ie_tree, hf_rsl_hsl_l1_prim, tvb,
++					    offset, len, FALSE);
++			break;
++		case RSL_IE_HSL_BTS_VERSION:
++			proto_tree_add_item(ie_tree, hf_rsl_hsl_bts_ver, tvb,
++					    offset, len, FALSE);
++			break;
 +		case RSL_IE_L3_INF:
 +			if (msg_type == RSL_MSG_TYPE_HSL_BSSGP) {
 +				tvbuff_t *next_tvb;
@@ -138,7 +161,7 @@
  		}
  		offset += len;
  	}
-@@ -3284,10 +3345,12 @@
+@@ -3284,10 +3359,12 @@
  	guint8	msg_disc, msg_type;
  
  	msg_disc = tvb_get_guint8(tvb, offset++) >> 1;
@@ -153,7 +176,7 @@
  		offset = dissct_rsl_ipaccess_msg(tvb, pinfo, tree, offset);
  		return offset;
  	}
-@@ -3924,7 +3987,7 @@
+@@ -3924,7 +4001,7 @@
  	col_set_str(pinfo->cinfo, COL_PROTOCOL, "RSL");
  	col_clear(pinfo->cinfo, COL_INFO);
  
@@ -162,7 +185,7 @@
  
  	if (check_col(pinfo->cinfo, COL_INFO)){
  		col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",val_to_str(msg_type, rsl_msg_type_vals,"unknown %u"));
-@@ -3955,6 +4018,7 @@
+@@ -3955,6 +4032,7 @@
  
  	gsm_a_ccch_handle = find_dissector("gsm_a_ccch");
  	gsm_a_dtap_handle = find_dissector("gsm_a_dtap");
@@ -170,7 +193,7 @@
  }
  
  /* Register the protocol with Wireshark */
-@@ -3975,7 +4039,7 @@
+@@ -3975,7 +4053,7 @@
  		},
  		{ &hf_rsl_msg_type,
  			{ "Message type",           "rsl.msg_type",
@@ -179,7 +202,7 @@
  			NULL, HFILL }
  		},
  		{ &hf_rsl_ie_id,
-@@ -4392,6 +4456,11 @@
+@@ -4392,6 +4470,28 @@
  			{ "Average Tx Delay", "rsl.ipacc.cstat.avg_tx_delay",
  			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
  		},
@@ -188,6 +211,23 @@
 +			{ "BTS Serial Number", "rsl.hsl.bts_serno",
 +			  FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
 +		},
++		{ &hf_rsl_hsl_l1_prim,
++			{ "Layer 1 Primitive?", "rsl.hsl.l1_prim",
++			  FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_hsl_bts_ver,
++			{ "BTS Version Number", "rsl.hsl.bts_ver",
++			  FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
++		},
++		{ &hf_rsl_hsl_trau_remote_port,
++			{ "HSL TRAU Remote RTP Port",	"rsl.hsl.trau.remote_port",
++			  FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL },
++		},
++		{ &hf_rsl_hsl_trau_remote_ip,
++			{ "HSL TRAU Remote IP Address", "rsl.hsl.trau.remote_ip",
++			  FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL },
++		},
++
  	};
  	static gint *ett[] = {
  		&ett_rsl,
