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)
