Bill Meier:
[metze/wireshark/wip.git] / epan / dissectors / packet-gsm_map.c
index 01578a0a4be06f5dbfe6e0cd9e55a7c37450ace8..4bac6a9e80fcf97025ef8e89009becbc7f30497e 100644 (file)
@@ -5,6 +5,7 @@
 
 /* Input file: packet-gsm_map-template.c */
 
+#line 1 "packet-gsm_map-template.c"
 /* packet-gsm_map-template.c
  * Routines for GSM MobileApplication packet dissection
  * Copyright 2004 - 2005 , Anders Broman <anders.broman [AT] ericsson.com>
@@ -44,6 +45,7 @@
 #include <epan/prefs.h>
 #include <epan/conversation.h>
 #include <epan/tap.h>
+#include <epan/emem.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -52,6 +54,7 @@
 #include "packet-q931.h"
 #include "packet-gsm_map.h"
 #include "packet-gsm_a.h"
+#include "packet-tcap.h"
 
 #define PNAME  "GSM Mobile Application"
 #define PSNAME "GSM_MAP"
 
 /* Initialize the protocol and registered fields */
 int proto_gsm_map = -1;
-static int hf_gsm_map_invokeCmd = -1;             /* Opcode */
-static int hf_gsm_map_invokeid = -1;              /* INTEGER */
-static int hf_gsm_map_absent = -1;                /* NULL */
-static int hf_gsm_map_invokeId = -1;              /* InvokeId */
-static int hf_gsm_map_invoke = -1;                /* InvokePDU */
-static int hf_gsm_map_returnResult = -1;          /* InvokePDU */
+/*
+static int hf_gsm_map_invokeCmd = -1;             / Opcode /
+static int hf_gsm_map_invokeid = -1;              / INTEGER /
+static int hf_gsm_map_absent = -1;                / NULL /
+static int hf_gsm_map_invokeId = -1;              / InvokeId /
+static int hf_gsm_map_invoke = -1;                / InvokePDU /
+static int hf_gsm_map_returnResult = -1;          / InvokePDU /
 static int hf_gsm_map_returnResult_result = -1;
 static int hf_gsm_map_returnError_result = -1;
 static int hf_gsm_map_returnError = -1;
 static int hf_gsm_map_local_errorCode = -1;
 static int hf_gsm_map_global_errorCode_oid = -1;
 static int hf_gsm_map_global_errorCode = -1;
+*/
 static int hf_gsm_map_SendAuthenticationInfoArg = -1;
 static int hf_gsm_map_SendAuthenticationInfoRes = -1;
 static int hf_gsm_mapSendEndSignal = -1;
@@ -98,7 +103,31 @@ static int hf_gsm_map_ietf_pdp_type_number = -1;
 
 
 /*--- Included file: packet-gsm_map-hf.c ---*/
-
+#line 1 "packet-gsm_map-hf.c"
+static int hf_gsm_map_Component_PDU = -1;         /* Component */
+static int hf_gsm_map_invoke = -1;                /* Invoke */
+static int hf_gsm_map_returnResultLast = -1;      /* ReturnResult */
+static int hf_gsm_map_returnError = -1;           /* ReturnError */
+static int hf_gsm_map_reject = -1;                /* Reject */
+static int hf_gsm_map_invokeID = -1;              /* InvokeIdType */
+static int hf_gsm_map_linkedID = -1;              /* InvokeIdType */
+static int hf_gsm_map_opCode = -1;                /* OPERATION */
+static int hf_gsm_map_invokeparameter = -1;       /* InvokeParameter */
+static int hf_gsm_map_resultretres = -1;          /* T_resultretres */
+static int hf_gsm_map_returnparameter = -1;       /* ReturnResultParameter */
+static int hf_gsm_map_errorCode = -1;             /* ERROR */
+static int hf_gsm_map_parameter = -1;             /* ReturnErrorParameter */
+static int hf_gsm_map_invokeIDRej = -1;           /* T_invokeIDRej */
+static int hf_gsm_map_derivable = -1;             /* InvokeIdType */
+static int hf_gsm_map_not_derivable = -1;         /* NULL */
+static int hf_gsm_map_problem = -1;               /* T_problem */
+static int hf_gsm_map_generalProblem = -1;        /* GeneralProblem */
+static int hf_gsm_map_invokeProblem = -1;         /* InvokeProblem */
+static int hf_gsm_map_returnResultProblem = -1;   /* ReturnResultProblem */
+static int hf_gsm_map_returnErrorProblem = -1;    /* ReturnErrorProblem */
+static int hf_gsm_map_localValue = -1;            /* OperationLocalvalue */
+static int hf_gsm_map_globalValue = -1;           /* OBJECT_IDENTIFIER */
+static int hf_gsm_map_localValue1 = -1;           /* LocalErrorcode */
 static int hf_gsm_map_protocolId = -1;            /* ProtocolId */
 static int hf_gsm_map_signalInfo = -1;            /* SignalInfo */
 static int hf_gsm_map_extensionContainer = -1;    /* ExtensionContainer */
@@ -132,6 +161,7 @@ static int hf_gsm_map_slr_Arg_PCS_Extensions = -1;  /* SLR_Arg_PCS_Extensions */
 static int hf_gsm_map_na_ESRK_Request = -1;       /* NULL */
 static int hf_gsm_map_identity = -1;              /* Identity */
 static int hf_gsm_map_cancellationType = -1;      /* CancellationType */
+static int hf_gsm_map_imsi_WithLMSI = -1;         /* IMSI_WithLMSI */
 static int hf_gsm_map_sgsn_Number = -1;           /* ISDN_AddressString */
 static int hf_gsm_map_freezeTMSI = -1;            /* NULL */
 static int hf_gsm_map_freezeP_TMSI = -1;          /* NULL */
@@ -455,7 +485,6 @@ static int hf_gsm_map_ext_ProtocolId = -1;        /* Ext_ProtocolId */
 static int hf_gsm_map_accessNetworkProtocolId = -1;  /* AccessNetworkProtocolId */
 static int hf_gsm_map_longsignalInfo = -1;        /* LongSignalInfo */
 static int hf_gsm_map_suppress_T_CSI = -1;        /* NULL */
-static int hf_gsm_map_imsi_WithLMSI = -1;         /* IMSI_WithLMSI */
 static int hf_gsm_map_HLR_List_item = -1;         /* HLR_Id */
 static int hf_gsm_map_SS_List_item = -1;          /* SS_Code */
 static int hf_gsm_map_naea_PreferredCIC = -1;     /* NAEA_CIC */
@@ -768,25 +797,25 @@ static int hf_gsm_map_securityParametersIndex = -1;  /* SecurityParametersIndex
 static int hf_gsm_map_originalComponentIdentifier = -1;  /* OriginalComponentIdentifier */
 static int hf_gsm_map_initialisationVector = -1;  /* InitialisationVector */
 static int hf_gsm_map_operationCode = -1;         /* OperationCode */
-static int hf_gsm_map_errorCode = -1;             /* ErrorCode */
+static int hf_gsm_map_errorCode1 = -1;            /* ErrorCode */
 static int hf_gsm_map_userInfo = -1;              /* NULL */
-static int hf_gsm_map_localValue = -1;            /* INTEGER */
-static int hf_gsm_map_globalValue = -1;           /* OBJECT_IDENTIFIER */
+static int hf_gsm_map_localValue2 = -1;           /* INTEGER */
 static int hf_gsm_map_networkResource = -1;       /* NetworkResource */
 static int hf_gsm_map_extensibleSystemFailureParam = -1;  /* T_extensibleSystemFailureParam */
 static int hf_gsm_map_unknownSubscriberDiagnostic = -1;  /* T_unknownSubscriberDiagnostic */
 static int hf_gsm_map_roamingNotAllowedCause = -1;  /* T_roamingNotAllowedCause */
-static int hf_gsm_map_absentSubscriberReason = -1;  /* T_absentSubscriberReason */
+static int hf_gsm_map_absentSubscriberReason = -1;  /* AbsentSubscriberReason */
 static int hf_gsm_map_ccbs_Busy = -1;             /* NULL */
+static int hf_gsm_map_gprsConnectionSuspended = -1;  /* NULL */
 static int hf_gsm_map_callBarringCause = -1;      /* CallBarringCause */
-static int hf_gsm_map_extensibleCallBarredParam = -1;  /* T_extensibleCallBarredParam */
+static int hf_gsm_map_extensibleCallBarredParam = -1;  /* ExtensibleCallBarredParam */
 static int hf_gsm_map_unauthorisedMessageOriginator = -1;  /* NULL */
-static int hf_gsm_map_cug_RejectCause = -1;       /* T_cug_RejectCause */
-static int hf_gsm_map_gprsConnectionSuspended = -1;  /* NULL */
-static int hf_gsm_map_sm_EnumeratedDeliveryFailureCause = -1;  /* T_sm_EnumeratedDeliveryFailureCause */
-static int hf_gsm_map_diagnosticInfo = -1;        /* OCTET_STRING_SIZE_1_200 */
+static int hf_gsm_map_cug_RejectCause = -1;       /* CUG_RejectCause */
+static int hf_gsm_map_cug_RejectCause1 = -1;      /* T_cug_RejectCause */
+static int hf_gsm_map_sm_EnumeratedDeliveryFailureCause = -1;  /* SM_EnumeratedDeliveryFailureCause */
+static int hf_gsm_map_diagnosticInfo = -1;        /* SignalInfo */
 static int hf_gsm_map_unauthorizedLCSClient_Diagnostic = -1;  /* T_unauthorizedLCSClient_Diagnostic */
-static int hf_gsm_map_positionMethodFailure_Diagnostic = -1;  /* T_positionMethodFailure_Diagnostic */
+static int hf_gsm_map_positionMethodFailure_Diagnostic = -1;  /* PositionMethodFailure_Diagnostic */
 static int hf_gsm_map_pcsExtensions = -1;         /* PcsExtensions */
 /* named bits */
 static int hf_gsm_map_SupportedCamelPhases_phase1 = -1;
@@ -895,7 +924,7 @@ static int hf_gsm_map_SupportedGADShapes_ellipsoidPointWithAltitudeAndUncertaint
 static int hf_gsm_map_SupportedGADShapes_ellipsoidArc = -1;
 
 /*--- End of included file: packet-gsm_map-hf.c ---*/
-
+#line 97 "packet-gsm_map-template.c"
 
 /* Initialize the subtree pointers */
 static gint ett_gsm_map = -1;
@@ -909,7 +938,17 @@ static gint ett_gsm_map_GSMMAPPDU = -1;
 
 
 /*--- Included file: packet-gsm_map-ett.c ---*/
-
+#line 1 "packet-gsm_map-ett.c"
+static gint ett_gsm_map_Component = -1;
+static gint ett_gsm_map_Invoke = -1;
+static gint ett_gsm_map_ReturnResult = -1;
+static gint ett_gsm_map_T_resultretres = -1;
+static gint ett_gsm_map_ReturnError = -1;
+static gint ett_gsm_map_Reject = -1;
+static gint ett_gsm_map_T_invokeIDRej = -1;
+static gint ett_gsm_map_T_problem = -1;
+static gint ett_gsm_map_OPERATION = -1;
+static gint ett_gsm_map_ERROR = -1;
 static gint ett_gsm_map_Bss_APDU = -1;
 static gint ett_gsm_map_SupportedCamelPhases = -1;
 static gint ett_gsm_map_UpdateLocationArg = -1;
@@ -924,6 +963,7 @@ static gint ett_gsm_map_SLR_ArgExtensionContainer = -1;
 static gint ett_gsm_map_PcsExtensions = -1;
 static gint ett_gsm_map_SLR_Arg_PCS_Extensions = -1;
 static gint ett_gsm_map_CancelLocationArg = -1;
+static gint ett_gsm_map_CancelLocationArgV2 = -1;
 static gint ett_gsm_map_CancelLocationRes = -1;
 static gint ett_gsm_map_PurgeMSArg = -1;
 static gint ett_gsm_map_PurgeMSRes = -1;
@@ -1249,6 +1289,7 @@ static gint ett_gsm_map_T_extensibleSystemFailureParam = -1;
 static gint ett_gsm_map_DataMissingParam = -1;
 static gint ett_gsm_map_UnexpectedDataParam = -1;
 static gint ett_gsm_map_FacilityNotSupParam = -1;
+static gint ett_gsm_map_OR_NotAllowedParam = -1;
 static gint ett_gsm_map_IncompatibleTerminalParam = -1;
 static gint ett_gsm_map_ResourceLimitationParam = -1;
 static gint ett_gsm_map_UnknownSubscriberParam = -1;
@@ -1264,29 +1305,39 @@ static gint ett_gsm_map_NoRoamingNbParam = -1;
 static gint ett_gsm_map_AbsentSubscriberParam = -1;
 static gint ett_gsm_map_BusySubscriberParam = -1;
 static gint ett_gsm_map_NoSubscriberReplyParam = -1;
-static gint ett_gsm_map_CallBarredParam = -1;
-static gint ett_gsm_map_T_extensibleCallBarredParam = -1;
+static gint ett_gsm_map_ForwardingViolationParam = -1;
 static gint ett_gsm_map_ForwardingFailedParam = -1;
+static gint ett_gsm_map_ATI_NotAllowedParam = -1;
+static gint ett_gsm_map_ATSI_NotAllowedParam = -1;
+static gint ett_gsm_map_ATM_NotAllowedParam = -1;
+static gint ett_gsm_map_IllegalSS_OperationParam = -1;
+static gint ett_gsm_map_SS_NotAvailableParam = -1;
+static gint ett_gsm_map_SS_SubscriptionViolationParam = -1;
+static gint ett_gsm_map_InformationNotAvailableParam = -1;
+static gint ett_gsm_map_SubBusyForMT_SMS_Param = -1;
+static gint ett_gsm_map_CallBarredParam = -1;
+static gint ett_gsm_map_ExtensibleCallBarredParam = -1;
+static gint ett_gsm_map_CUG_RejectParam = -1;
 static gint ett_gsm_map_Or_NotAllowedParam = -1;
-static gint ett_gsm_map_ForwardingViolationParam = -1;
 static gint ett_gsm_map_Cug_RejectParam = -1;
-static gint ett_gsm_map_Ati_NotAllowedParam = -1;
 static gint ett_gsm_map_NoGroupCallNbParam = -1;
 static gint ett_gsm_map_SS_IncompatibilityCause = -1;
 static gint ett_gsm_map_ShortTermDenialParam = -1;
 static gint ett_gsm_map_LongTermDenialParam = -1;
-static gint ett_gsm_map_SubBusyForMT_SMS_Param = -1;
-static gint ett_gsm_map_Sm_DeliveryFailureCause = -1;
+static gint ett_gsm_map_SM_DeliveryFailureCause = -1;
 static gint ett_gsm_map_MessageWaitListFullParam = -1;
 static gint ett_gsm_map_AbsentSubscriberSM_Param = -1;
 static gint ett_gsm_map_UnauthorizedRequestingNetwork_Param = -1;
 static gint ett_gsm_map_UnauthorizedLCSClient_Param = -1;
 static gint ett_gsm_map_PositionMethodFailure_Param = -1;
 static gint ett_gsm_map_UnknownOrUnreachableLCSClient_Param = -1;
+static gint ett_gsm_map_MM_EventNotSupported_Param = -1;
+static gint ett_gsm_map_TargetCellOutsideGCA_Param = -1;
+static gint ett_gsm_map_SecureTransportErrorParam = -1;
 static gint ett_gsm_map_ExtensionContainer = -1;
 
 /*--- End of included file: packet-gsm_map-ett.c ---*/
-
+#line 109 "packet-gsm_map-template.c"
 
 static dissector_table_t       sms_dissector_table;    /* SMS TPDU */
 static dissector_handle_t data_handle;
@@ -1298,13 +1349,19 @@ static range_t *ssn_range;
 dissector_handle_t     map_handle;
 
 /* Global variables */
-
+static guint32 opcode=0;
+static guint32 errorCode;
 static proto_tree *top_tree;
 static int application_context_version;
 gint protocolId;
 gint AccessNetworkProtocolId;
 static int gsm_map_tap = -1;
 
+/* Forward declarations */
+static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+static int dissect_returnErrorData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset);
+
 
 char*
 unpack_digits(tvbuff_t *tvb, int offset){
@@ -1316,14 +1373,13 @@ unpack_digits(tvbuff_t *tvb, int offset){
 
        length = tvb_length(tvb);
        if (length < offset)
-               return NULL;
-       length = length - offset;
-       digit_str = g_malloc(length*2+1);
+               return "";
+       digit_str = ep_alloc((length - offset)*2+1);
 
        while ( offset < length ){
 
                octet = tvb_get_guint8(tvb,offset);
-               digit_str[i] = ((octet & 0x0f) + 0x30);
+               digit_str[i] = ((octet & 0x0f) + '0');
                i++;
 
                /*
@@ -1334,7 +1390,7 @@ unpack_digits(tvbuff_t *tvb, int offset){
                if (octet == 0x0f)      /* odd number bytes - hit filler */
                        break;
 
-               digit_str[i] = ((octet & 0x0f) + 0x30);
+               digit_str[i] = ((octet & 0x0f) + '0');
                i++;
                offset++;
 
@@ -1346,438 +1402,391 @@ unpack_digits(tvbuff_t *tvb, int offset){
 
 
 /*--- Included file: packet-gsm_map-fn.c ---*/
-
+#line 1 "packet-gsm_map-fn.c"
 /*--- Fields for imported types ---*/
 
 
 
-static const value_string gsm_map_ProtocolId_vals[] = {
-  {   1, "gsm-0408" },
-  {   2, "gsm-0806" },
-  {   3, "gsm-BSSMAP" },
-  {   4, "ets-300102-1" },
-  { 0, NULL }
-};
-
 
 static int
-dissect_gsm_map_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_InvokeIdType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                  &protocolId);
+                                  NULL);
 
   return offset;
 }
-static int dissect_protocolId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ProtocolId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_protocolId);
+static int dissect_invokeID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_InvokeIdType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeID);
+}
+static int dissect_linkedID_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_InvokeIdType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_linkedID);
 }
+static int dissect_derivable(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_InvokeIdType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_derivable);
+}
+
 
+static const value_string gsm_map_OperationLocalvalue_vals[] = {
+  {   2, "updateLocation" },
+  {   3, "cancelLocation" },
+  {   4, "provideRoamingNumber" },
+  {   5, "noteSubscriberDataModified" },
+  {   6, "resumeCallHandling" },
+  {   7, "insertSubscriberData" },
+  {   8, "deleteSubscriberData" },
+  {   9, "sendParameters" },
+  {  10, "registerSS" },
+  {  11, "eraseSS" },
+  {  12, "activateSS" },
+  {  13, "deactivateSS" },
+  {  14, "interrogateSS" },
+  {  15, "authenticationFailureReport" },
+  {  17, "registerPassword" },
+  {  18, "getPassword" },
+  {  19, "processUnstructuredSS-Data" },
+  {  20, "releaseResources" },
+  {  22, "sendRoutingInfo" },
+  {  23, "updateGprsLocation" },
+  {  24, "sendRoutingInfoForGprs" },
+  {  25, "failureReport" },
+  {  26, "noteMsPresentForGprs" },
+  {  28, "performHandover" },
+  {  29, "sendEndSignal" },
+  {  30, "performSubsequentHandover" },
+  {  31, "provideSIWFSNumber" },
+  {  32, "sIWFSSignallingModify" },
+  {  33, "processAccessSignalling" },
+  {  34, "forwardAccessSignalling" },
+  {  35, "noteInternalHandover" },
+  {  37, "reset" },
+  {  38, "forwardCheckSS" },
+  {  39, "prepareGroupCall" },
+  {  40, "sendGroupCallEndSignal" },
+  {  41, "processGroupCallSignalling" },
+  {  42, "forwardGroupCallSignalling" },
+  {  43, "checkIMEI" },
+  {  44, "mt-forwardSM" },
+  {  45, "sendRoutingInfoForSM" },
+  {  46, "mo-forwardSM" },
+  {  47, "reportSM-DeliveryStatus" },
+  {  48, "noteSubscriberPresent" },
+  {  49, "alertServiceCentreWithoutResult" },
+  {  50, "activateTraceMode" },
+  {  51, "deactivateTraceMode" },
+  {  52, "traceSubscriberActivity" },
+  {  54, "beginSubscriberActivity" },
+  {  55, "sendIdentification" },
+  {  56, "sendAuthenticationInfo" },
+  {  57, "restoreData" },
+  {  58, "sendIMSI" },
+  {  59, "processUnstructuredSS-Request" },
+  {  60, "unstructuredSS-Request" },
+  {  61, "unstructuredSS-Notify" },
+  {  62, "anyTimeSubscriptionInterrogation" },
+  {  63, "informServiceCentre" },
+  {  64, "alertServiceCentre" },
+  {  65, "anyTimeModification" },
+  {  66, "readyForSM" },
+  {  67, "purgeMS" },
+  {  68, "prepareHandover" },
+  {  69, "prepareSubsequentHandover" },
+  {  70, "provideSubscriberInfo" },
+  {  71, "anyTimeInterrogation" },
+  {  72, "ss-InvocationNotification" },
+  {  73, "setReportingState" },
+  {  74, "statusReport" },
+  {  75, "remoteUserFree" },
+  {  76, "registerCC-Entry" },
+  {  77, "eraseCC-Entry" },
+  {  78, "secureTransportClass1" },
+  {  79, "secureTransportClass2" },
+  {  80, "secureTransportClass3" },
+  {  81, "secureTransportClass4" },
+  {  83, "provideSubscriberLocation" },
+  {  85, "sendRoutingInfoForLCS" },
+  {  86, "subscriberLocationReport" },
+  {  87, "ist-Alert" },
+  {  88, "ist-Command" },
+  {  89, "noteMM-Event" },
+  { 0, NULL }
+};
 
 
 static int
-dissect_gsm_map_SignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_OperationLocalvalue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 137 "gsmmap.cnf"
 
- tvbuff_t      *parameter_tvb;
- guint8                octet;
- guint8                length;
- tvbuff_t      *next_tvb;
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  &opcode);
+  if (check_col(pinfo->cinfo, COL_INFO)){
+    col_append_fstr(pinfo->cinfo, COL_INFO, val_to_str(opcode, gsm_map_opr_code_strings, "Unknown GSM-MAP (%u)"));
+  }
 
-  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                       &parameter_tvb);
 
- if (!parameter_tvb)
-       return offset;
- switch (protocolId){
-       /* gsm-0408 */
-       case 1:
-               break;
-       /* gsm-0806 */
-       case 2:
-               break;
-       /* gsm-BSSMAP TODO Is it correct to stripp off tw first octets here?*/
-       case 3:
-               octet = tvb_get_guint8(parameter_tvb,0);
-               length = tvb_get_guint8(parameter_tvb,1);
-               if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
-                       next_tvb = tvb_new_subset(parameter_tvb, 2, -1, -1);
-                       dissect_bssmap(next_tvb, pinfo, tree);
-               }
-               break;
-       /* ets-300102-1 (~Q.931 ) */
-       case 4:
-               octet = tvb_get_guint8(parameter_tvb,0);
-               length = tvb_get_guint8(parameter_tvb,1);
-               if ( octet == 4 )
-                       dissect_q931_bearer_capability_ie(parameter_tvb, 2, length, tree);
-               break;
-       default:
-               break;
-}
 
   return offset;
 }
-static int dissect_signalInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_signalInfo);
+static int dissect_localValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_OperationLocalvalue(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_localValue);
 }
 
 
 
 static int
 dissect_gsm_map_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                            NULL);
+  offset = dissect_ber_object_identifier(implicit_tag, pinfo, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
+static int dissect_globalValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_globalValue);
+}
 static int dissect_extId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extId);
 }
-static int dissect_globalValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_globalValue);
+
+
+static const value_string gsm_map_OPERATION_vals[] = {
+  {   0, "localValue" },
+  {   1, "globalValue" },
+  { 0, NULL }
+};
+
+static const ber_choice_t OPERATION_choice[] = {
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_globalValue },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_OPERATION(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 OPERATION_choice, hf_index, ett_gsm_map_OPERATION,
+                                 NULL);
+
+  return offset;
+}
+static int dissect_opCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_OPERATION(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_opCode);
 }
 
 
 
 static int
-dissect_gsm_map_T_extType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_InvokeParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 124 "gsmmap.cnf"
+       offset = dissect_invokeData(pinfo, tree, tvb, offset);
 
-  proto_tree_add_text(tree, tvb, offset, -1, "Extension Data");
-  call_dissector(data_handle, tvb, pinfo, tree);       
-  offset = tvb_length_remaining(tvb,offset);           
 
 
   return offset;
 }
-static int dissect_extType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_extType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extType);
+static int dissect_invokeparameter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_InvokeParameter(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeparameter);
 }
 
-static const ber_sequence_t PrivateExtension_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extId },
-  { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extType },
+
+static const ber_sequence_t Invoke_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeID },
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_linkedID_impl },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_opCode },
+  { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_invokeparameter },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_PrivateExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_Invoke(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrivateExtension_sequence, hf_index, ett_gsm_map_PrivateExtension);
+                                   Invoke_sequence, hf_index, ett_gsm_map_Invoke);
 
   return offset;
 }
-static int dissect_PrivateExtensionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_PrivateExtension(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_PrivateExtensionList_item);
+static int dissect_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_Invoke(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_invoke);
 }
 
 
-static const ber_sequence_t PrivateExtensionList_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PrivateExtensionList_item },
-};
 
 static int
-dissect_gsm_map_PrivateExtensionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
-                                      PrivateExtensionList_sequence_of, hf_index, ett_gsm_map_PrivateExtensionList);
+dissect_gsm_map_ReturnResultParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 127 "gsmmap.cnf"
+       offset = dissect_returnResultData(pinfo, tree, tvb, offset);
+
+
 
   return offset;
 }
-static int dissect_privateExtensionList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_PrivateExtensionList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privateExtensionList);
+static int dissect_returnparameter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnResultParameter(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_returnparameter);
 }
 
-static const ber_sequence_t PcsExtensions_sequence[] = {
+
+static const ber_sequence_t T_resultretres_sequence[] = {
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_opCode },
+  { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_returnparameter },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_PcsExtensions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_T_resultretres(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PcsExtensions_sequence, hf_index, ett_gsm_map_PcsExtensions);
+                                   T_resultretres_sequence, hf_index, ett_gsm_map_T_resultretres);
 
   return offset;
 }
-static int dissect_pcsExtensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_PcsExtensions(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pcsExtensions);
+static int dissect_resultretres(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_T_resultretres(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_resultretres);
 }
 
-static const ber_sequence_t ExtensionContainer_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateExtensionList_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pcsExtensions_impl },
+
+static const ber_sequence_t ReturnResult_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeID },
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_resultretres },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_ExtensionContainer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_ReturnResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ExtensionContainer_sequence, hf_index, ett_gsm_map_ExtensionContainer);
+                                   ReturnResult_sequence, hf_index, ett_gsm_map_ReturnResult);
 
   return offset;
 }
-static int dissect_extensionContainer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ExtensionContainer(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer);
-}
-static int dissect_extensionContainer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ExtensionContainer(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer);
+static int dissect_returnResultLast_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnResult(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnResultLast);
 }
 
-static const ber_sequence_t Bss_APDU_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_protocolId },
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { 0, 0, 0, NULL }
+
+static const value_string gsm_map_LocalErrorcode_vals[] = {
+  {  34, "systemFailure" },
+  {  35, "dataMissing" },
+  {  36, "unexpectedDataValue" },
+  {  21, "facilityNotSupported" },
+  {  28, "incompatibleTerminal" },
+  {  51, "resourceLimitation" },
+  {   1, "unknownSubscriber" },
+  {  44, "numberChanged" },
+  {   3, "unknownMSC" },
+  {   5, "unidentifiedSubscriber" },
+  {   7, "unknownEquipment" },
+  {   8, "roamingNotAllowed" },
+  {   9, "illegalSubscriber" },
+  {  12, "illegalEquipment" },
+  {  10, "bearerServiceNotProvisioned" },
+  {  11, "teleserviceNotProvisioned" },
+  {  25, "noHandoverNumberAvailable" },
+  {  26, "subsequentHandoverFailure" },
+  {  42, "targetCellOutsideGroupCallArea" },
+  {  40, "tracingBufferFull" },
+  {  39, "noRoamingNumberAvailable" },
+  {  27, "absentSubscriber" },
+  {  45, "busySubscriber" },
+  {  46, "noSubscriberReply" },
+  {  13, "callBarred" },
+  {  14, "forwardingViolation" },
+  {  47, "forwardingFailed" },
+  {  15, "cug-Reject" },
+  {  48, "or-NotAllowed" },
+  {  49, "ati-NotAllowed" },
+  {  60, "atsi-NotAllowed" },
+  {  61, "atm-NotAllowed" },
+  {  62, "informationNotAvailabl" },
+  {  16, "illegalSS-Operation" },
+  {  17, "ss-ErrorStatus" },
+  {  18, "ss-NotAvailable" },
+  {  19, "ss-SubscriptionViolatio" },
+  {  20, "ss-Incompatibility" },
+  {  71, "unknownAlphabe" },
+  {  72, "ussd-Busy" },
+  {  37, "pw-RegistrationFailur" },
+  {  38, "negativePW-Check" },
+  {  43, "numberOfPW-AttemptsViolation" },
+  {  29, "shortTermDenial" },
+  {  30, "longTermDenial" },
+  {  31, "subscriberBusyForMT-SMS" },
+  {  32, "sm-DeliveryFailure" },
+  {  33, "messageWaitingListFull" },
+  {   6, "absentSubscriberSM" },
+  {  50, "noGroupCallNumberAvailable" },
+  {  52, "unauthorizedRequestingNetwork" },
+  {  53, "unauthorizedLCSClient" },
+  {  54, "positionMethodFailure" },
+  {  58, "unknownOrUnreachableLCSClient" },
+  {  59, "mm-EventNotSupported" },
+  {   4, "secureTransportError" },
+  { 0, NULL }
 };
 
+
 static int
-dissect_gsm_map_Bss_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Bss_APDU_sequence, hf_index, ett_gsm_map_Bss_APDU);
+dissect_gsm_map_LocalErrorcode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  &errorCode);
 
   return offset;
 }
-static int dissect_bss_APDU(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bss_APDU);
+static int dissect_localValue1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_LocalErrorcode(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_localValue1);
 }
 
 
+static const value_string gsm_map_ERROR_vals[] = {
+  {   0, "localValue" },
+  {   1, "globalValue" },
+  { 0, NULL }
+};
+
+static const ber_choice_t ERROR_choice[] = {
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue1 },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_globalValue },
+  { 0, 0, 0, 0, NULL }
+};
 
 static int
-dissect_gsm_map_SignalInfo2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                       NULL);
+dissect_gsm_map_ERROR(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 ERROR_choice, hf_index, ett_gsm_map_ERROR,
+                                 NULL);
 
   return offset;
 }
+static int dissect_errorCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ERROR(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_errorCode);
+}
+
 
-static const asn_namedbit SupportedCamelPhases_bits[] = {
-  {  0, &hf_gsm_map_SupportedCamelPhases_phase1, -1, -1, "phase1", NULL },
-  {  1, &hf_gsm_map_SupportedCamelPhases_phase2, -1, -1, "phase2", NULL },
-  {  2, &hf_gsm_map_SupportedCamelPhases_phase3, -1, -1, "phase3", NULL },
-  {  3, &hf_gsm_map_SupportedCamelPhases_phase4, -1, -1, "phase4", NULL },
-  { 0, NULL, 0, 0, NULL, NULL }
-};
 
 static int
-dissect_gsm_map_SupportedCamelPhases(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 SupportedCamelPhases_bits, hf_index, ett_gsm_map_SupportedCamelPhases,
-                                 NULL);
+dissect_gsm_map_ReturnErrorParameter(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 130 "gsmmap.cnf"
+       offset = dissect_returnErrorData(pinfo, tree, tvb, offset);
+
+
 
   return offset;
 }
-static int dissect_supportedCamelPhases(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases);
-}
-static int dissect_supportedCamelPhases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases);
-}
-static int dissect_supportedCamelPhasesInVMSC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhasesInVMSC);
-}
-static int dissect_supportedCamelPhasesInInterrogatingNode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhasesInInterrogatingNode);
-}
-static int dissect_supportedVLR_CAMEL_Phases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedVLR_CAMEL_Phases);
-}
-static int dissect_supportedSGSN_CAMEL_Phases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedSGSN_CAMEL_Phases);
-}
-static int dissect_supportedCAMELPhases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCAMELPhases);
-}
-
-
-
-static int
-dissect_gsm_map_IMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-
- tvbuff_t      *parameter_tvb;
- char          *digit_str;
-
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
- if (!parameter_tvb)
-       return offset;
-
- digit_str = unpack_digits(parameter_tvb, 0);
-
- proto_tree_add_string(tree, hf_gsm_map_imsi_digits, parameter_tvb, 0, -1, digit_str);
- if (digit_str)
-       g_free(digit_str);
-
-
-
-  return offset;
-}
-static int dissect_imsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_IMSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_imsi);
-}
-static int dissect_imsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_IMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_imsi);
-}
-
-
-
-static int
-dissect_gsm_map_ISDN_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-
- tvbuff_t      *parameter_tvb;
- char          *digit_str;
-
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
-
- if (!parameter_tvb)
-       return offset;
-
- proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE);
- proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE);
- proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE);
-
- digit_str = unpack_digits(parameter_tvb, 1);
-
- proto_tree_add_string(tree, hf_gsm_map_isdn_address_digits, parameter_tvb, 1, -1, digit_str);
- if (digit_str)
-       g_free(digit_str);
-
- pinfo->p2p_dir = P2P_DIR_RECV;
-
-
-
-  return offset;
-}
-static int dissect_msc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number);
-}
-static int dissect_msc_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number);
-}
-static int dissect_vlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number);
-}
-static int dissect_vlr_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number);
-}
-static int dissect_hlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_Number);
-}
-static int dissect_sgsn_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number);
-}
-static int dissect_sgsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number);
-}
-static int dissect_handoverNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_handoverNumber);
-}
-static int dissect_handoverNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_handoverNumber);
-}
-static int dissect_targetMSC_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_targetMSC_Number);
-}
-static int dissect_targetMSC_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_targetMSC_Number);
-}
-static int dissect_gsmSCF_Address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address);
-}
-static int dissect_gsmSCF_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address);
-}
-static int dissect_msisdn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn);
-}
-static int dissect_msisdn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn);
-}
-static int dissect_GMLC_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_GMLC_List_item);
-}
-static int dissect_dialledNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_dialledNumber);
-}
-static int dissect_forwardedToNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardedToNumber);
-}
-static int dissect_DestinationNumberList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_DestinationNumberList_item);
-}
-static int dissect_gmsc_OrGsmSCF_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmsc_OrGsmSCF_Address);
-}
-static int dissect_vmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vmsc_Address);
-}
-static int dissect_externalAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_externalAddress);
-}
-static int dissect_roamingNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_roamingNumber);
-}
-static int dissect_vlr_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_number);
-}
-static int dissect_gmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmsc_Address);
-}
-static int dissect_b_Subscriber_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_Subscriber_Address);
-}
-static int dissect_sIWFSNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sIWFSNumber);
-}
-static int dissect_msrn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msrn);
-}
-static int dissect_translatedB_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_translatedB_Number);
-}
-static int dissect_translatedB_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_translatedB_Number);
-}
-static int dissect_networkNode_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_networkNode_Number);
-}
-static int dissect_networkNode_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_networkNode_Number);
-}
-static int dissect_b_subscriberNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_subscriberNumber);
-}
-static int dissect_groupCallNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupCallNumber);
-}
-static int dissect_ggsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ggsn_Number);
-}
-static int dissect_mlc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mlc_Number);
-}
-static int dissect_mlcNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mlcNumber);
-}
-static int dissect_na_ESRD_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRD);
-}
-static int dissect_na_ESRK_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRK);
+static int dissect_parameter(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnErrorParameter(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_parameter);
 }
 
 
+static const ber_sequence_t ReturnError_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeID },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_errorCode },
+  { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_parameter },
+  { 0, 0, 0, NULL }
+};
 
 static int
-dissect_gsm_map_LMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                       NULL);
+dissect_gsm_map_ReturnError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ReturnError_sequence, hf_index, ett_gsm_map_ReturnError);
 
   return offset;
 }
-static int dissect_lmsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_LMSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi);
-}
-static int dissect_lmsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_LMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi);
+static int dissect_returnError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnError(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnError);
 }
 
 
@@ -1788,6 +1797,9 @@ dissect_gsm_map_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packe
 
   return offset;
 }
+static int dissect_not_derivable(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_not_derivable);
+}
 static int dissect_informPreviousNetworkEntity_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_informPreviousNetworkEntity);
 }
@@ -2055,65 +2067,682 @@ static int dissect_supportedVLR_CAMEL_Phases_flg_impl(packet_info *pinfo, proto_
 static int dissect_supportedSGSN_CAMEL_Phases_flg_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedSGSN_CAMEL_Phases_flg);
 }
-static int dissect_tif_CSI_NotificationToCSE_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_tif_CSI_NotificationToCSE);
+static int dissect_tif_CSI_NotificationToCSE_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_tif_CSI_NotificationToCSE);
+}
+static int dissect_uplinkFree_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkFree);
+}
+static int dissect_uplinkRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequest);
+}
+static int dissect_uplinkReleaseIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseIndication);
+}
+static int dissect_releaseGroupCall_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_releaseGroupCall);
+}
+static int dissect_uplinkRequestAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequestAck);
+}
+static int dissect_uplinkRejectCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRejectCommand);
+}
+static int dissect_uplinkSeizedCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkSeizedCommand);
+}
+static int dissect_uplinkReleaseCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseCommand);
+}
+static int dissect_ps_LCS_NotSupportedByUE_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ps_LCS_NotSupportedByUE);
+}
+static int dissect_gprsEnhancementsSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsEnhancementsSupportIndicator);
+}
+static int dissect_smsCallBarringSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_smsCallBarringSupportIndicator);
+}
+static int dissect_privacyOverride_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privacyOverride);
+}
+static int dissect_verticalCoordinateRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_verticalCoordinateRequest);
+}
+static int dissect_deferredmt_lrResponseIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_deferredmt_lrResponseIndicator);
+}
+static int dissect_pseudonymIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pseudonymIndicator);
+}
+static int dissect_userInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_userInfo);
+}
+static int dissect_ccbs_Busy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Busy);
+}
+static int dissect_gprsConnectionSuspended(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gprsConnectionSuspended);
+}
+static int dissect_unauthorisedMessageOriginator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_unauthorisedMessageOriginator);
+}
+
+
+static const value_string gsm_map_T_invokeIDRej_vals[] = {
+  {   0, "derivable" },
+  {   1, "not-derivable" },
+  { 0, NULL }
+};
+
+static const ber_choice_t T_invokeIDRej_choice[] = {
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_derivable },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_not_derivable },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_T_invokeIDRej(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 T_invokeIDRej_choice, hf_index, ett_gsm_map_T_invokeIDRej,
+                                 NULL);
+
+  return offset;
+}
+static int dissect_invokeIDRej(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_T_invokeIDRej(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeIDRej);
+}
+
+
+static const value_string gsm_map_GeneralProblem_vals[] = {
+  {   0, "unrecognizedComponent" },
+  {   1, "mistypedComponent" },
+  {   2, "badlyStructuredComponent" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_gsm_map_GeneralProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  NULL);
+
+  return offset;
+}
+static int dissect_generalProblem_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_GeneralProblem(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_generalProblem);
+}
+
+
+static const value_string gsm_map_InvokeProblem_vals[] = {
+  {   0, "duplicateInvokeID" },
+  {   1, "unrecognizedOperation" },
+  {   2, "mistypedParameter" },
+  {   3, "resourceLimitation" },
+  {   4, "initiatingRelease" },
+  {   5, "unrecognizedLinkedID" },
+  {   6, "linkedResponseUnexpected" },
+  {   7, "unexpectedLinkedOperation" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_gsm_map_InvokeProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  NULL);
+
+  return offset;
+}
+static int dissect_invokeProblem_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_InvokeProblem(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_invokeProblem);
+}
+
+
+static const value_string gsm_map_ReturnResultProblem_vals[] = {
+  {   0, "unrecognizedInvokeID" },
+  {   1, "returnResultUnexpected" },
+  {   2, "mistypedParameter" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_gsm_map_ReturnResultProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  NULL);
+
+  return offset;
+}
+static int dissect_returnResultProblem_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnResultProblem(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnResultProblem);
+}
+
+
+static const value_string gsm_map_ReturnErrorProblem_vals[] = {
+  {   0, "unrecognizedInvokeID" },
+  {   1, "returnErrorUnexpected" },
+  {   2, "unrecognizedError" },
+  {   3, "unexpectedError" },
+  {   4, "mistypedParameter" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_gsm_map_ReturnErrorProblem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  NULL);
+
+  return offset;
+}
+static int dissect_returnErrorProblem_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ReturnErrorProblem(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnErrorProblem);
+}
+
+
+static const value_string gsm_map_T_problem_vals[] = {
+  {   0, "generalProblem" },
+  {   1, "invokeProblem" },
+  {   2, "returnResultProblem" },
+  {   3, "returnErrorProblem" },
+  { 0, NULL }
+};
+
+static const ber_choice_t T_problem_choice[] = {
+  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_generalProblem_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_invokeProblem_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_returnResultProblem_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_returnErrorProblem_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_T_problem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 T_problem_choice, hf_index, ett_gsm_map_T_problem,
+                                 NULL);
+
+  return offset;
+}
+static int dissect_problem(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_T_problem(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_problem);
+}
+
+
+static const ber_sequence_t Reject_sequence[] = {
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeIDRej },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_problem },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_Reject(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   Reject_sequence, hf_index, ett_gsm_map_Reject);
+
+  return offset;
+}
+static int dissect_reject_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_Reject(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_reject);
+}
+
+
+static const value_string gsm_map_Component_vals[] = {
+  {   1, "invoke" },
+  {   2, "returnResultLast" },
+  {   3, "returnError" },
+  {   4, "reject" },
+  { 0, NULL }
+};
+
+static const ber_choice_t Component_choice[] = {
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_invoke_impl },
+  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_returnResultLast_impl },
+  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_returnError_impl },
+  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_reject_impl },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_Component(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Component_choice, hf_index, ett_gsm_map_Component,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const value_string gsm_map_ProtocolId_vals[] = {
+  {   1, "gsm-0408" },
+  {   2, "gsm-0806" },
+  {   3, "gsm-BSSMAP" },
+  {   4, "ets-300102-1" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_gsm_map_ProtocolId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  &protocolId);
+
+  return offset;
+}
+static int dissect_protocolId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ProtocolId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_protocolId);
+}
+
+
+
+static int
+dissect_gsm_map_SignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 333 "gsmmap.cnf"
+
+ tvbuff_t      *parameter_tvb;
+ guint8                octet;
+ guint8                length;
+ tvbuff_t      *next_tvb;
+
+
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
+ if (!parameter_tvb)
+       return offset;
+ switch (protocolId){
+       /* gsm-0408 */
+       case 1:
+               break;
+       /* gsm-0806 */
+       case 2:
+               break;
+       /* gsm-BSSMAP TODO Is it correct to stripp off two first octets here?*/
+       case 3:
+               octet = tvb_get_guint8(parameter_tvb,0);
+               length = tvb_get_guint8(parameter_tvb,1);
+               if ( octet == 0) {/* DISCRIMINATION TS 48 006 */
+                       next_tvb = tvb_new_subset(parameter_tvb, 2, -1, -1);
+                       dissect_bssmap(next_tvb, pinfo, tree);
+               }
+               break;
+       /* ets-300102-1 (~Q.931 ) */
+       case 4:
+               octet = tvb_get_guint8(parameter_tvb,0);
+               length = tvb_get_guint8(parameter_tvb,1);
+               if ( octet == 4 )
+                       dissect_q931_bearer_capability_ie(parameter_tvb, 2, length, tree);
+               break;
+       default:
+               break;
+}
+
+
+
+  return offset;
+}
+static int dissect_signalInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_signalInfo);
+}
+static int dissect_diagnosticInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_diagnosticInfo);
+}
+
+
+
+static int
+dissect_gsm_map_T_extType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 408 "gsmmap.cnf"
+
+  proto_tree_add_text(tree, tvb, offset, -1, "Extension Data");
+  call_dissector(data_handle, tvb, pinfo, tree);       
+  offset = tvb_length_remaining(tvb,offset);           
+
+
+
+  return offset;
+}
+static int dissect_extType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_T_extType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extType);
+}
+
+
+static const ber_sequence_t PrivateExtension_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extId },
+  { BER_CLASS_ANY, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extType },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_PrivateExtension(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   PrivateExtension_sequence, hf_index, ett_gsm_map_PrivateExtension);
+
+  return offset;
+}
+static int dissect_PrivateExtensionList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_PrivateExtension(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_PrivateExtensionList_item);
+}
+
+
+static const ber_sequence_t PrivateExtensionList_sequence_of[1] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_PrivateExtensionList_item },
+};
+
+static int
+dissect_gsm_map_PrivateExtensionList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+                                      PrivateExtensionList_sequence_of, hf_index, ett_gsm_map_PrivateExtensionList);
+
+  return offset;
+}
+static int dissect_privateExtensionList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_PrivateExtensionList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privateExtensionList);
+}
+
+
+static const ber_sequence_t PcsExtensions_sequence[] = {
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_PcsExtensions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   PcsExtensions_sequence, hf_index, ett_gsm_map_PcsExtensions);
+
+  return offset;
+}
+static int dissect_pcsExtensions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_PcsExtensions(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pcsExtensions);
+}
+
+
+static const ber_sequence_t ExtensionContainer_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateExtensionList_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pcsExtensions_impl },
+  { 0, 0, 0, NULL }
+};
+
+int
+dissect_gsm_map_ExtensionContainer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ExtensionContainer_sequence, hf_index, ett_gsm_map_ExtensionContainer);
+
+  return offset;
+}
+static int dissect_extensionContainer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ExtensionContainer(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer);
+}
+static int dissect_extensionContainer_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ExtensionContainer(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_extensionContainer);
+}
+
+
+static const ber_sequence_t Bss_APDU_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_protocolId },
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo },
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_Bss_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   Bss_APDU_sequence, hf_index, ett_gsm_map_Bss_APDU);
+
+  return offset;
+}
+static int dissect_bss_APDU(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_Bss_APDU(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bss_APDU);
+}
+
+
+
+static int
+dissect_gsm_map_SignalInfo2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       NULL);
+
+  return offset;
+}
+
+
+static const asn_namedbit SupportedCamelPhases_bits[] = {
+  {  0, &hf_gsm_map_SupportedCamelPhases_phase1, -1, -1, "phase1", NULL },
+  {  1, &hf_gsm_map_SupportedCamelPhases_phase2, -1, -1, "phase2", NULL },
+  {  2, &hf_gsm_map_SupportedCamelPhases_phase3, -1, -1, "phase3", NULL },
+  {  3, &hf_gsm_map_SupportedCamelPhases_phase4, -1, -1, "phase4", NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
+};
+
+int
+dissect_gsm_map_SupportedCamelPhases(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+                                    SupportedCamelPhases_bits, hf_index, ett_gsm_map_SupportedCamelPhases,
+                                    NULL);
+
+  return offset;
+}
+static int dissect_supportedCamelPhases(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases);
+}
+static int dissect_supportedCamelPhases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhases);
+}
+static int dissect_supportedCamelPhasesInVMSC_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhasesInVMSC);
+}
+static int dissect_supportedCamelPhasesInInterrogatingNode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCamelPhasesInInterrogatingNode);
+}
+static int dissect_supportedVLR_CAMEL_Phases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedVLR_CAMEL_Phases);
+}
+static int dissect_supportedSGSN_CAMEL_Phases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedSGSN_CAMEL_Phases);
+}
+static int dissect_supportedCAMELPhases_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_SupportedCamelPhases(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_supportedCAMELPhases);
+}
+
+
+
+int
+dissect_gsm_map_IMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 171 "gsmmap.cnf"
+
+ tvbuff_t      *parameter_tvb;
+ char          *digit_str;
+
+   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
+ if (!parameter_tvb)
+       return offset;
+
+ digit_str = unpack_digits(parameter_tvb, 0);
+
+ proto_tree_add_string(tree, hf_gsm_map_imsi_digits, parameter_tvb, 0, -1, digit_str);
+
+
+
+
+  return offset;
+}
+static int dissect_imsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_IMSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_imsi);
+}
+static int dissect_imsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_IMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_imsi);
+}
+
+
+
+int
+dissect_gsm_map_ISDN_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 218 "gsmmap.cnf"
+
+ tvbuff_t      *parameter_tvb;
+ char          *digit_str;
+
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
+ if (!parameter_tvb)
+       return offset;
+
+ proto_tree_add_item(tree, hf_gsm_map_extension, parameter_tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_nature_of_number, parameter_tvb, 0,1,FALSE);
+ proto_tree_add_item(tree, hf_gsm_map_number_plan, parameter_tvb, 0,1,FALSE);
+
+ digit_str = unpack_digits(parameter_tvb, 1);
+
+ proto_tree_add_string(tree, hf_gsm_map_isdn_address_digits, parameter_tvb, 1, -1, digit_str);
+
+ pinfo->p2p_dir = P2P_DIR_RECV;
+
+
+
+
+  return offset;
+}
+static int dissect_msc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number);
+}
+static int dissect_msc_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msc_Number);
+}
+static int dissect_vlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number);
+}
+static int dissect_vlr_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_Number);
+}
+static int dissect_hlr_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_Number);
+}
+static int dissect_sgsn_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number);
+}
+static int dissect_sgsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Number);
+}
+static int dissect_handoverNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_handoverNumber);
+}
+static int dissect_handoverNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_handoverNumber);
+}
+static int dissect_targetMSC_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_targetMSC_Number);
+}
+static int dissect_targetMSC_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_targetMSC_Number);
+}
+static int dissect_gsmSCF_Address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address);
+}
+static int dissect_gsmSCF_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gsmSCF_Address);
+}
+static int dissect_msisdn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn);
+}
+static int dissect_msisdn_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_msisdn);
+}
+static int dissect_GMLC_List_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_GMLC_List_item);
+}
+static int dissect_dialledNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_dialledNumber);
+}
+static int dissect_forwardedToNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardedToNumber);
+}
+static int dissect_DestinationNumberList_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_DestinationNumberList_item);
+}
+static int dissect_gmsc_OrGsmSCF_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmsc_OrGsmSCF_Address);
+}
+static int dissect_vmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vmsc_Address);
+}
+static int dissect_externalAddress_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_externalAddress);
 }
-static int dissect_uplinkFree_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkFree);
+static int dissect_roamingNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_roamingNumber);
 }
-static int dissect_uplinkRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequest);
+static int dissect_vlr_number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vlr_number);
 }
-static int dissect_uplinkReleaseIndication_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseIndication);
+static int dissect_gmsc_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmsc_Address);
 }
-static int dissect_releaseGroupCall_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_releaseGroupCall);
+static int dissect_b_Subscriber_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_Subscriber_Address);
 }
-static int dissect_uplinkRequestAck_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRequestAck);
+static int dissect_sIWFSNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sIWFSNumber);
 }
-static int dissect_uplinkRejectCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkRejectCommand);
+static int dissect_msrn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_msrn);
 }
-static int dissect_uplinkSeizedCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkSeizedCommand);
+static int dissect_translatedB_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_translatedB_Number);
 }
-static int dissect_uplinkReleaseCommand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uplinkReleaseCommand);
+static int dissect_translatedB_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_translatedB_Number);
 }
-static int dissect_ps_LCS_NotSupportedByUE_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ps_LCS_NotSupportedByUE);
+static int dissect_networkNode_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_networkNode_Number);
 }
-static int dissect_gprsEnhancementsSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsEnhancementsSupportIndicator);
+static int dissect_networkNode_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_networkNode_Number);
 }
-static int dissect_smsCallBarringSupportIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_smsCallBarringSupportIndicator);
+static int dissect_b_subscriberNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_b_subscriberNumber);
 }
-static int dissect_privacyOverride_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_privacyOverride);
+static int dissect_groupCallNumber(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupCallNumber);
 }
-static int dissect_verticalCoordinateRequest_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_verticalCoordinateRequest);
+static int dissect_ggsn_Number_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ggsn_Number);
 }
-static int dissect_deferredmt_lrResponseIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_deferredmt_lrResponseIndicator);
+static int dissect_mlc_Number(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mlc_Number);
 }
-static int dissect_pseudonymIndicator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_pseudonymIndicator);
+static int dissect_mlcNumber_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mlcNumber);
 }
-static int dissect_userInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_userInfo);
+static int dissect_na_ESRD_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRD);
 }
-static int dissect_ccbs_Busy_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Busy);
+static int dissect_na_ESRK_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ISDN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_na_ESRK);
+}
+
+
+
+static int
+dissect_gsm_map_LMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       NULL);
+
+  return offset;
 }
-static int dissect_unauthorisedMessageOriginator_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_unauthorisedMessageOriginator);
+static int dissect_lmsi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_LMSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi);
 }
-static int dissect_gprsConnectionSuspended(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_gprsConnectionSuspended);
+static int dissect_lmsi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_LMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lmsi);
 }
 
 
@@ -2166,8 +2795,9 @@ static const ber_choice_t SuperChargerInfo_choice[] = {
 
 static int
 dissect_gsm_map_SuperChargerInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SuperChargerInfo_choice, hf_index, ett_gsm_map_SuperChargerInfo, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SuperChargerInfo_choice, hf_index, ett_gsm_map_SuperChargerInfo,
+                                 NULL);
 
   return offset;
 }
@@ -2178,6 +2808,7 @@ static int dissect_superChargerSupportedInServingNetworkEntity_impl(packet_info
   return dissect_gsm_map_SuperChargerInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_superChargerSupportedInServingNetworkEntity);
 }
 
+
 static const asn_namedbit SupportedLCS_CapabilitySets_bits[] = {
   {  0, &hf_gsm_map_SupportedLCS_CapabilitySets_lcsCapabilitySet1, -1, -1, "lcsCapabilitySet1", NULL },
   {  1, &hf_gsm_map_SupportedLCS_CapabilitySets_lcsCapabilitySet2, -1, -1, "lcsCapabilitySet2", NULL },
@@ -2189,8 +2820,8 @@ static const asn_namedbit SupportedLCS_CapabilitySets_bits[] = {
 static int
 dissect_gsm_map_SupportedLCS_CapabilitySets(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 SupportedLCS_CapabilitySets_bits, hf_index, ett_gsm_map_SupportedLCS_CapabilitySets,
-                                 NULL);
+                                    SupportedLCS_CapabilitySets_bits, hf_index, ett_gsm_map_SupportedLCS_CapabilitySets,
+                                    NULL);
 
   return offset;
 }
@@ -2201,6 +2832,7 @@ static int dissect_additional_LCS_CapabilitySets_impl(packet_info *pinfo, proto_
   return dissect_gsm_map_SupportedLCS_CapabilitySets(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_additional_LCS_CapabilitySets);
 }
 
+
 static const asn_namedbit OfferedCamel4CSIs_bits[] = {
   {  0, &hf_gsm_map_OfferedCamel4CSIs_o_csi, -1, -1, "o-csi", NULL },
   {  1, &hf_gsm_map_OfferedCamel4CSIs_d_csi, -1, -1, "d-csi", NULL },
@@ -2215,8 +2847,8 @@ static const asn_namedbit OfferedCamel4CSIs_bits[] = {
 static int
 dissect_gsm_map_OfferedCamel4CSIs(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 OfferedCamel4CSIs_bits, hf_index, ett_gsm_map_OfferedCamel4CSIs,
-                                 NULL);
+                                    OfferedCamel4CSIs_bits, hf_index, ett_gsm_map_OfferedCamel4CSIs,
+                                    NULL);
 
   return offset;
 }
@@ -2236,6 +2868,7 @@ static int dissect_offeredCamel4CSIsInSGSN_impl(packet_info *pinfo, proto_tree *
   return dissect_gsm_map_OfferedCamel4CSIs(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_offeredCamel4CSIsInSGSN);
 }
 
+
 static const ber_sequence_t VLR_Capability_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supportedCamelPhases_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -2251,7 +2884,7 @@ static const ber_sequence_t VLR_Capability_sequence[] = {
 static int
 dissect_gsm_map_VLR_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                VLR_Capability_sequence, hf_index, ett_gsm_map_VLR_Capability);
+                                   VLR_Capability_sequence, hf_index, ett_gsm_map_VLR_Capability);
 
   return offset;
 }
@@ -2261,7 +2894,7 @@ static int dissect_vlr_Capability_impl(packet_info *pinfo, proto_tree *tree, tvb
 
 
 
-static int
+int
 dissect_gsm_map_GSN_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -2310,7 +2943,8 @@ dissect_gsm_map_TBCD_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset
 }
 
 
-static int
+
+int
 dissect_gsm_map_IMEI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_TBCD_STRING(implicit_tag, tvb, offset, pinfo, tree, hf_index);
 
@@ -2326,6 +2960,7 @@ static int dissect_imei_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb
   return dissect_gsm_map_IMEI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_imei);
 }
 
+
 static const ber_sequence_t ADD_Info_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imeisv_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_skipSubscriberDataUpdate_impl },
@@ -2335,7 +2970,7 @@ static const ber_sequence_t ADD_Info_sequence[] = {
 static int
 dissect_gsm_map_ADD_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ADD_Info_sequence, hf_index, ett_gsm_map_ADD_Info);
+                                   ADD_Info_sequence, hf_index, ett_gsm_map_ADD_Info);
 
   return offset;
 }
@@ -2343,6 +2978,7 @@ static int dissect_add_info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_ADD_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_add_info);
 }
 
+
 static const ber_sequence_t UpdateLocationArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msc_Number_impl },
@@ -2360,11 +2996,12 @@ static const ber_sequence_t UpdateLocationArg_sequence[] = {
 static int
 dissect_gsm_map_UpdateLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UpdateLocationArg_sequence, hf_index, ett_gsm_map_UpdateLocationArg);
+                                   UpdateLocationArg_sequence, hf_index, ett_gsm_map_UpdateLocationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t UpdateLocationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -2375,11 +3012,12 @@ static const ber_sequence_t UpdateLocationRes_sequence[] = {
 static int
 dissect_gsm_map_UpdateLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UpdateLocationRes_sequence, hf_index, ett_gsm_map_UpdateLocationRes);
+                                   UpdateLocationRes_sequence, hf_index, ett_gsm_map_UpdateLocationRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t SLR_Arg_PCS_Extensions_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_na_ESRK_Request_impl },
   { 0, 0, 0, NULL }
@@ -2388,7 +3026,7 @@ static const ber_sequence_t SLR_Arg_PCS_Extensions_sequence[] = {
 static int
 dissect_gsm_map_SLR_Arg_PCS_Extensions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SLR_Arg_PCS_Extensions_sequence, hf_index, ett_gsm_map_SLR_Arg_PCS_Extensions);
+                                   SLR_Arg_PCS_Extensions_sequence, hf_index, ett_gsm_map_SLR_Arg_PCS_Extensions);
 
   return offset;
 }
@@ -2396,6 +3034,7 @@ static int dissect_slr_Arg_PCS_Extensions_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_SLR_Arg_PCS_Extensions(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_slr_Arg_PCS_Extensions);
 }
 
+
 static const ber_sequence_t SLR_ArgExtensionContainer_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_privateExtensionList_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_slr_Arg_PCS_Extensions_impl },
@@ -2405,7 +3044,7 @@ static const ber_sequence_t SLR_ArgExtensionContainer_sequence[] = {
 static int
 dissect_gsm_map_SLR_ArgExtensionContainer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SLR_ArgExtensionContainer_sequence, hf_index, ett_gsm_map_SLR_ArgExtensionContainer);
+                                   SLR_ArgExtensionContainer_sequence, hf_index, ett_gsm_map_SLR_ArgExtensionContainer);
 
   return offset;
 }
@@ -2449,6 +3088,7 @@ dissect_gsm_map_Msc_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
   return offset;
 }
 
+
 static const ber_sequence_t IMSI_WithLMSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_lmsi },
@@ -2458,7 +3098,7 @@ static const ber_sequence_t IMSI_WithLMSI_sequence[] = {
 static int
 dissect_gsm_map_IMSI_WithLMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IMSI_WithLMSI_sequence, hf_index, ett_gsm_map_IMSI_WithLMSI);
+                                   IMSI_WithLMSI_sequence, hf_index, ett_gsm_map_IMSI_WithLMSI);
 
   return offset;
 }
@@ -2481,8 +3121,9 @@ static const ber_choice_t Identity_choice[] = {
 
 static int
 dissect_gsm_map_Identity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Identity_choice, hf_index, ett_gsm_map_Identity, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Identity_choice, hf_index, ett_gsm_map_Identity,
+                                 NULL);
 
   return offset;
 }
@@ -2509,8 +3150,9 @@ static int dissect_cancellationType(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_CancellationType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cancellationType);
 }
 
+
 static const ber_sequence_t CancelLocationArg_sequence[] = {
-  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_identity },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_identity },
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cancellationType },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -2519,11 +3161,34 @@ static const ber_sequence_t CancelLocationArg_sequence[] = {
 static int
 dissect_gsm_map_CancelLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CancelLocationArg_sequence, hf_index, ett_gsm_map_CancelLocationArg);
+                                   CancelLocationArg_sequence, hf_index, ett_gsm_map_CancelLocationArg);
+
+  return offset;
+}
+
+
+static const value_string gsm_map_CancelLocationArgV2_vals[] = {
+  {   0, "imsi" },
+  {   1, "imsi-WithLMSI" },
+  { 0, NULL }
+};
+
+static const ber_choice_t CancelLocationArgV2_choice[] = {
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
+  {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_imsi_WithLMSI },
+  { 0, 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_CancelLocationArgV2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 CancelLocationArgV2_choice, hf_index, ett_gsm_map_CancelLocationArgV2,
+                                 NULL);
 
   return offset;
 }
 
+
 static const ber_sequence_t CancelLocationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -2532,11 +3197,12 @@ static const ber_sequence_t CancelLocationRes_sequence[] = {
 static int
 dissect_gsm_map_CancelLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CancelLocationRes_sequence, hf_index, ett_gsm_map_CancelLocationRes);
+                                   CancelLocationRes_sequence, hf_index, ett_gsm_map_CancelLocationRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t PurgeMSArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_vlr_Number_impl },
@@ -2548,11 +3214,12 @@ static const ber_sequence_t PurgeMSArg_sequence[] = {
 static int
 dissect_gsm_map_PurgeMSArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PurgeMSArg_sequence, hf_index, ett_gsm_map_PurgeMSArg);
+                                   PurgeMSArg_sequence, hf_index, ett_gsm_map_PurgeMSArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t PurgeMSRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_freezeTMSI_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_freezeP_TMSI_impl },
@@ -2563,7 +3230,7 @@ static const ber_sequence_t PurgeMSRes_sequence[] = {
 static int
 dissect_gsm_map_PurgeMSRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PurgeMSRes_sequence, hf_index, ett_gsm_map_PurgeMSRes);
+                                   PurgeMSRes_sequence, hf_index, ett_gsm_map_PurgeMSRes);
 
   return offset;
 }
@@ -2623,6 +3290,7 @@ static int dissect_hopCounter_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_HopCounter(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_hopCounter);
 }
 
+
 static const ber_sequence_t SendIdentificationArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_tmsi },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_numberOfRequestedVectors },
@@ -2637,7 +3305,7 @@ static const ber_sequence_t SendIdentificationArg_sequence[] = {
 static int
 dissect_gsm_map_SendIdentificationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendIdentificationArg_sequence, hf_index, ett_gsm_map_SendIdentificationArg);
+                                   SendIdentificationArg_sequence, hf_index, ett_gsm_map_SendIdentificationArg);
 
   return offset;
 }
@@ -2684,6 +3352,7 @@ static int dissect_groupKey_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_Kc(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_groupKey);
 }
 
+
 static const ber_sequence_t AuthenticationTriplet_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sres },
@@ -2694,7 +3363,7 @@ static const ber_sequence_t AuthenticationTriplet_sequence[] = {
 static int
 dissect_gsm_map_AuthenticationTriplet(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AuthenticationTriplet_sequence, hf_index, ett_gsm_map_AuthenticationTriplet);
+                                   AuthenticationTriplet_sequence, hf_index, ett_gsm_map_AuthenticationTriplet);
 
   return offset;
 }
@@ -2770,6 +3439,7 @@ static int dissect_autn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int
   return dissect_gsm_map_AUTN(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_autn);
 }
 
+
 static const ber_sequence_t AuthenticationQuintuplet_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_xres },
@@ -2782,7 +3452,7 @@ static const ber_sequence_t AuthenticationQuintuplet_sequence[] = {
 static int
 dissect_gsm_map_AuthenticationQuintuplet(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AuthenticationQuintuplet_sequence, hf_index, ett_gsm_map_AuthenticationQuintuplet);
+                                   AuthenticationQuintuplet_sequence, hf_index, ett_gsm_map_AuthenticationQuintuplet);
 
   return offset;
 }
@@ -2821,8 +3491,9 @@ static const ber_choice_t AuthenticationSetList_choice[] = {
 
 static int
 dissect_gsm_map_AuthenticationSetList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              AuthenticationSetList_choice, hf_index, ett_gsm_map_AuthenticationSetList, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 AuthenticationSetList_choice, hf_index, ett_gsm_map_AuthenticationSetList,
+                                 NULL);
 
   return offset;
 }
@@ -2843,6 +3514,7 @@ static int dissect_cksn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int
   return dissect_gsm_map_Cksn(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cksn);
 }
 
+
 static const ber_sequence_t GSM_SecurityContextData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_kc },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cksn },
@@ -2852,7 +3524,7 @@ static const ber_sequence_t GSM_SecurityContextData_sequence[] = {
 static int
 dissect_gsm_map_GSM_SecurityContextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GSM_SecurityContextData_sequence, hf_index, ett_gsm_map_GSM_SecurityContextData);
+                                   GSM_SecurityContextData_sequence, hf_index, ett_gsm_map_GSM_SecurityContextData);
 
   return offset;
 }
@@ -2873,6 +3545,7 @@ static int dissect_ksi(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int
   return dissect_gsm_map_KSI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ksi);
 }
 
+
 static const ber_sequence_t UMTS_SecurityContextData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ck },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ik },
@@ -2883,7 +3556,7 @@ static const ber_sequence_t UMTS_SecurityContextData_sequence[] = {
 static int
 dissect_gsm_map_UMTS_SecurityContextData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UMTS_SecurityContextData_sequence, hf_index, ett_gsm_map_UMTS_SecurityContextData);
+                                   UMTS_SecurityContextData_sequence, hf_index, ett_gsm_map_UMTS_SecurityContextData);
 
   return offset;
 }
@@ -2906,8 +3579,9 @@ static const ber_choice_t CurrentSecurityContext_choice[] = {
 
 static int
 dissect_gsm_map_CurrentSecurityContext(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              CurrentSecurityContext_choice, hf_index, ett_gsm_map_CurrentSecurityContext, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 CurrentSecurityContext_choice, hf_index, ett_gsm_map_CurrentSecurityContext,
+                                 NULL);
 
   return offset;
 }
@@ -2915,9 +3589,10 @@ static int dissect_currentSecurityContext_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_CurrentSecurityContext(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_currentSecurityContext);
 }
 
+
 static const ber_sequence_t SendIdentificationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_authenticationSetList },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_authenticationSetList },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_currentSecurityContext_impl },
   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -2926,7 +3601,7 @@ static const ber_sequence_t SendIdentificationRes_sequence[] = {
 static int
 dissect_gsm_map_SendIdentificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendIdentificationRes_sequence, hf_index, ett_gsm_map_SendIdentificationRes);
+                                   SendIdentificationRes_sequence, hf_index, ett_gsm_map_SendIdentificationRes);
 
   return offset;
 }
@@ -2960,6 +3635,7 @@ static int dissect_targetCellId_impl(packet_info *pinfo, proto_tree *tree, tvbuf
   return dissect_gsm_map_GlobalCellId(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_targetCellId);
 }
 
+
 static const ber_sequence_t PrepareHO_Arg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_targetCellId },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ho_NumberNotRequired },
@@ -2970,7 +3646,7 @@ static const ber_sequence_t PrepareHO_Arg_sequence[] = {
 static int
 dissect_gsm_map_PrepareHO_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareHO_Arg_sequence, hf_index, ett_gsm_map_PrepareHO_Arg);
+                                   PrepareHO_Arg_sequence, hf_index, ett_gsm_map_PrepareHO_Arg);
 
   return offset;
 }
@@ -3011,15 +3687,18 @@ static int dissect_accessNetworkProtocolId(packet_info *pinfo, proto_tree *tree,
 
 static int
 dissect_gsm_map_LongSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 377 "gsmmap.cnf"
 
  tvbuff_t      *parameter_tvb;
  guint8                octet;
  guint8                length;
  tvbuff_t      *next_tvb;
 
+
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        &parameter_tvb);
 
+
  if (!parameter_tvb)
        return offset;
  switch (AccessNetworkProtocolId){
@@ -3040,12 +3719,15 @@ dissect_gsm_map_LongSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
                break;
 
  }
+
+
   return offset;
 }
 static int dissect_longsignalInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_LongSignalInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_longsignalInfo);
 }
 
+
 static const ber_sequence_t AccessNetworkSignalInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_accessNetworkProtocolId },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_longsignalInfo },
@@ -3056,7 +3738,7 @@ static const ber_sequence_t AccessNetworkSignalInfo_sequence[] = {
 static int
 dissect_gsm_map_AccessNetworkSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AccessNetworkSignalInfo_sequence, hf_index, ett_gsm_map_AccessNetworkSignalInfo);
+                                   AccessNetworkSignalInfo_sequence, hf_index, ett_gsm_map_AccessNetworkSignalInfo);
 
   return offset;
 }
@@ -3157,6 +3839,7 @@ static int dissect_encryptionAlgorithms_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_PermittedEncryptionAlgorithms(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_encryptionAlgorithms);
 }
 
+
 static const ber_sequence_t AllowedUMTS_Algorithms_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_integrityProtectionAlgorithms_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryptionAlgorithms_impl },
@@ -3167,7 +3850,7 @@ static const ber_sequence_t AllowedUMTS_Algorithms_sequence[] = {
 static int
 dissect_gsm_map_AllowedUMTS_Algorithms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AllowedUMTS_Algorithms_sequence, hf_index, ett_gsm_map_AllowedUMTS_Algorithms);
+                                   AllowedUMTS_Algorithms_sequence, hf_index, ett_gsm_map_AllowedUMTS_Algorithms);
 
   return offset;
 }
@@ -3197,6 +3880,7 @@ static int dissect_selectedRab_Id_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_RAB_Id(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_selectedRab_Id);
 }
 
+
 static const ber_sequence_t RadioResource_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_radioResourceInformation },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_rab_Id },
@@ -3206,7 +3890,7 @@ static const ber_sequence_t RadioResource_sequence[] = {
 static int
 dissect_gsm_map_RadioResource(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RadioResource_sequence, hf_index, ett_gsm_map_RadioResource);
+                                   RadioResource_sequence, hf_index, ett_gsm_map_RadioResource);
 
   return offset;
 }
@@ -3265,6 +3949,7 @@ static int dissect_ranap_ServiceHandover_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_RANAP_ServiceHandover(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ranap_ServiceHandover);
 }
 
+
 static const ber_sequence_t BSSMAP_ServiceHandoverInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_bssmap_ServiceHandover },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_rab_Id },
@@ -3274,7 +3959,7 @@ static const ber_sequence_t BSSMAP_ServiceHandoverInfo_sequence[] = {
 static int
 dissect_gsm_map_BSSMAP_ServiceHandoverInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                BSSMAP_ServiceHandoverInfo_sequence, hf_index, ett_gsm_map_BSSMAP_ServiceHandoverInfo);
+                                   BSSMAP_ServiceHandoverInfo_sequence, hf_index, ett_gsm_map_BSSMAP_ServiceHandoverInfo);
 
   return offset;
 }
@@ -3302,6 +3987,7 @@ static int dissect_bssmap_ServiceHandoverList_impl(packet_info *pinfo, proto_tre
 }
 
 
+
 static int
 dissect_gsm_map_ASCI_CallReference(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_TBCD_STRING(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -3374,6 +4060,7 @@ static int dissect_currentlyUsedCodec(packet_info *pinfo, proto_tree *tree, tvbu
   return dissect_gsm_map_Codec(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_currentlyUsedCodec);
 }
 
+
 static const ber_sequence_t CodecList_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_codec1_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_codec2_impl },
@@ -3390,7 +4077,7 @@ static const ber_sequence_t CodecList_sequence[] = {
 static int
 dissect_gsm_map_CodecList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CodecList_sequence, hf_index, ett_gsm_map_CodecList);
+                                   CodecList_sequence, hf_index, ett_gsm_map_CodecList);
 
   return offset;
 }
@@ -3407,6 +4094,7 @@ static int dissect_geranCodecList_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_CodecList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_geranCodecList);
 }
 
+
 static const ber_sequence_t SupportedCodecsList_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_utranCodecList_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_geranCodecList_impl },
@@ -3417,7 +4105,7 @@ static const ber_sequence_t SupportedCodecsList_sequence[] = {
 static int
 dissect_gsm_map_SupportedCodecsList(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SupportedCodecsList_sequence, hf_index, ett_gsm_map_SupportedCodecsList);
+                                   SupportedCodecsList_sequence, hf_index, ett_gsm_map_SupportedCodecsList);
 
   return offset;
 }
@@ -3429,11 +4117,12 @@ static int dissect_iuSupportedCodecsList_impl(packet_info *pinfo, proto_tree *tr
 }
 
 
+
 static int
 dissect_gsm_map_UESBI_IuA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 NULL, hf_index, -1,
-                                 NULL);
+                                    NULL, hf_index, -1,
+                                    NULL);
 
   return offset;
 }
@@ -3442,11 +4131,12 @@ static int dissect_uesbi_IuA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
 }
 
 
+
 static int
 dissect_gsm_map_UESBI_IuB(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 NULL, hf_index, -1,
-                                 NULL);
+                                    NULL, hf_index, -1,
+                                    NULL);
 
   return offset;
 }
@@ -3454,6 +4144,7 @@ static int dissect_uesbi_IuB_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_UESBI_IuB(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uesbi_IuB);
 }
 
+
 static const ber_sequence_t UESBI_Iu_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uesbi_IuA_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uesbi_IuB_impl },
@@ -3463,7 +4154,7 @@ static const ber_sequence_t UESBI_Iu_sequence[] = {
 static int
 dissect_gsm_map_UESBI_Iu(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UESBI_Iu_sequence, hf_index, ett_gsm_map_UESBI_Iu);
+                                   UESBI_Iu_sequence, hf_index, ett_gsm_map_UESBI_Iu);
 
   return offset;
 }
@@ -3474,6 +4165,7 @@ static int dissect_bmuef(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, in
   return dissect_gsm_map_UESBI_Iu(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_bmuef);
 }
 
+
 static const ber_sequence_t PrepareHO_ArgV3_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellId_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ho_NumberNotRequired },
@@ -3505,11 +4197,12 @@ static const ber_sequence_t PrepareHO_ArgV3_sequence[] = {
 static int
 dissect_gsm_map_PrepareHO_ArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareHO_ArgV3_sequence, hf_index, ett_gsm_map_PrepareHO_ArgV3);
+                                   PrepareHO_ArgV3_sequence, hf_index, ett_gsm_map_PrepareHO_ArgV3);
 
   return offset;
 }
 
+
 static const ber_sequence_t PrepareHO_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_handoverNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_bss_APDU },
@@ -3519,7 +4212,7 @@ static const ber_sequence_t PrepareHO_Res_sequence[] = {
 static int
 dissect_gsm_map_PrepareHO_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareHO_Res_sequence, hf_index, ett_gsm_map_PrepareHO_Res);
+                                   PrepareHO_Res_sequence, hf_index, ett_gsm_map_PrepareHO_Res);
 
   return offset;
 }
@@ -3534,6 +4227,7 @@ dissect_gsm_map_HandoverNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
   return offset;
 }
 
+
 static const ber_sequence_t RelocationNumber_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_handoverNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_rab_Id },
@@ -3543,7 +4237,7 @@ static const ber_sequence_t RelocationNumber_sequence[] = {
 static int
 dissect_gsm_map_RelocationNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RelocationNumber_sequence, hf_index, ett_gsm_map_RelocationNumber);
+                                   RelocationNumber_sequence, hf_index, ett_gsm_map_RelocationNumber);
 
   return offset;
 }
@@ -3606,6 +4300,7 @@ static int dissect_encryptionAlgorithm_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_ChosenEncryptionAlgorithm(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_encryptionAlgorithm);
 }
 
+
 static const ber_sequence_t SelectedUMTS_Algorithms_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_integrityProtectionAlgorithm_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryptionAlgorithm_impl },
@@ -3616,7 +4311,7 @@ static const ber_sequence_t SelectedUMTS_Algorithms_sequence[] = {
 static int
 dissect_gsm_map_SelectedUMTS_Algorithms(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SelectedUMTS_Algorithms_sequence, hf_index, ett_gsm_map_SelectedUMTS_Algorithms);
+                                   SelectedUMTS_Algorithms_sequence, hf_index, ett_gsm_map_SelectedUMTS_Algorithms);
 
   return offset;
 }
@@ -3650,6 +4345,7 @@ static int dissect_chosenSpeechVersion_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_ChosenSpeechVersion(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_chosenSpeechVersion);
 }
 
+
 static const ber_sequence_t ChosenRadioResourceInformation_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_chosenChannelInfo_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_chosenSpeechVersion_impl },
@@ -3659,7 +4355,7 @@ static const ber_sequence_t ChosenRadioResourceInformation_sequence[] = {
 static int
 dissect_gsm_map_ChosenRadioResourceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ChosenRadioResourceInformation_sequence, hf_index, ett_gsm_map_ChosenRadioResourceInformation);
+                                   ChosenRadioResourceInformation_sequence, hf_index, ett_gsm_map_ChosenRadioResourceInformation);
 
   return offset;
 }
@@ -3667,6 +4363,7 @@ static int dissect_chosenRadioResourceInformation_impl(packet_info *pinfo, proto
   return dissect_gsm_map_ChosenRadioResourceInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_chosenRadioResourceInformation);
 }
 
+
 static const ber_sequence_t PrepareHO_ResV3_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_handoverNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_relocationNumberList_impl },
@@ -3684,7 +4381,7 @@ static const ber_sequence_t PrepareHO_ResV3_sequence[] = {
 static int
 dissect_gsm_map_PrepareHO_ResV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareHO_ResV3_sequence, hf_index, ett_gsm_map_PrepareHO_ResV3);
+                                   PrepareHO_ResV3_sequence, hf_index, ett_gsm_map_PrepareHO_ResV3);
 
   return offset;
 }
@@ -3709,6 +4406,7 @@ dissect_gsm_map_Vlr_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
   return offset;
 }
 
+
 static const ber_sequence_t SendEndSignalArgV3_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_an_APDU },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -3718,11 +4416,12 @@ static const ber_sequence_t SendEndSignalArgV3_sequence[] = {
 static int
 dissect_gsm_map_SendEndSignalArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendEndSignalArgV3_sequence, hf_index, ett_gsm_map_SendEndSignalArgV3);
+                                   SendEndSignalArgV3_sequence, hf_index, ett_gsm_map_SendEndSignalArgV3);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendEndSignalRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -3731,7 +4430,7 @@ static const ber_sequence_t SendEndSignalRes_sequence[] = {
 static int
 dissect_gsm_map_SendEndSignalRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendEndSignalRes_sequence, hf_index, ett_gsm_map_SendEndSignalRes);
+                                   SendEndSignalRes_sequence, hf_index, ett_gsm_map_SendEndSignalRes);
 
   return offset;
 }
@@ -3749,6 +4448,7 @@ static int dissect_selectedGSM_Algorithm_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_SelectedGSM_Algorithm(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_selectedGSM_Algorithm);
 }
 
+
 static const ber_sequence_t ProcessAccessSignallingArgV3_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_an_APDU },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_selectedUMTS_Algorithms_impl },
@@ -3764,7 +4464,7 @@ static const ber_sequence_t ProcessAccessSignallingArgV3_sequence[] = {
 static int
 dissect_gsm_map_ProcessAccessSignallingArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProcessAccessSignallingArgV3_sequence, hf_index, ett_gsm_map_ProcessAccessSignallingArgV3);
+                                   ProcessAccessSignallingArgV3_sequence, hf_index, ett_gsm_map_ProcessAccessSignallingArgV3);
 
   return offset;
 }
@@ -3788,6 +4488,7 @@ static int dissect_keyStatus(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb
   return dissect_gsm_map_KeyStatus(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_keyStatus);
 }
 
+
 static const ber_sequence_t ForwardAccessSignallingArgV3_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_an_APDU },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_integrityProtectionInfo },
@@ -3811,11 +4512,12 @@ static const ber_sequence_t ForwardAccessSignallingArgV3_sequence[] = {
 static int
 dissect_gsm_map_ForwardAccessSignallingArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardAccessSignallingArgV3_sequence, hf_index, ett_gsm_map_ForwardAccessSignallingArgV3);
+                                   ForwardAccessSignallingArgV3_sequence, hf_index, ett_gsm_map_ForwardAccessSignallingArgV3);
 
   return offset;
 }
 
+
 static const ber_sequence_t PrepareSubsequentHOArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_targetCellId },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_targetMSC_Number },
@@ -3826,11 +4528,12 @@ static const ber_sequence_t PrepareSubsequentHOArg_sequence[] = {
 static int
 dissect_gsm_map_PrepareSubsequentHOArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareSubsequentHOArg_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOArg);
+                                   PrepareSubsequentHOArg_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t PrepareSubsequentHOArgV3_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_targetCellId_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_targetMSC_Number_impl },
@@ -3846,11 +4549,12 @@ static const ber_sequence_t PrepareSubsequentHOArgV3_sequence[] = {
 static int
 dissect_gsm_map_PrepareSubsequentHOArgV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareSubsequentHOArgV3_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOArgV3);
+                                   PrepareSubsequentHOArgV3_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOArgV3);
 
   return offset;
 }
 
+
 static const ber_sequence_t PrepareSubsequentHOResV3_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_an_APDU },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -3860,12 +4564,13 @@ static const ber_sequence_t PrepareSubsequentHOResV3_sequence[] = {
 static int
 dissect_gsm_map_PrepareSubsequentHOResV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareSubsequentHOResV3_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOResV3);
+                                   PrepareSubsequentHOResV3_sequence, hf_index, ett_gsm_map_PrepareSubsequentHOResV3);
 
   return offset;
 }
 
 
+
 static int
 dissect_gsm_map_SendAuthenticationInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -3873,6 +4578,7 @@ dissect_gsm_map_SendAuthenticationInfoArg(gboolean implicit_tag _U_, tvbuff_t *t
   return offset;
 }
 
+
 static const ber_sequence_t Re_synchronisationInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_auts },
@@ -3882,7 +4588,7 @@ static const ber_sequence_t Re_synchronisationInfo_sequence[] = {
 static int
 dissect_gsm_map_Re_synchronisationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Re_synchronisationInfo_sequence, hf_index, ett_gsm_map_Re_synchronisationInfo);
+                                   Re_synchronisationInfo_sequence, hf_index, ett_gsm_map_Re_synchronisationInfo);
 
   return offset;
 }
@@ -3922,6 +4628,7 @@ static int dissect_requestingPLMN_Id_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_PLMN_Id(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestingPLMN_Id);
 }
 
+
 static const ber_sequence_t SendAuthenticationInfoArgV2_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_numberOfRequestedVectors },
@@ -3937,11 +4644,12 @@ static const ber_sequence_t SendAuthenticationInfoArgV2_sequence[] = {
 static int
 dissect_gsm_map_SendAuthenticationInfoArgV2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendAuthenticationInfoArgV2_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoArgV2);
+                                   SendAuthenticationInfoArgV2_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoArgV2);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendAuthenticationInfoRes_item_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_rand },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sres },
@@ -3952,7 +4660,7 @@ static const ber_sequence_t SendAuthenticationInfoRes_item_sequence[] = {
 static int
 dissect_gsm_map_SendAuthenticationInfoRes_item(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendAuthenticationInfoRes_item_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoRes_item);
+                                   SendAuthenticationInfoRes_item_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoRes_item);
 
   return offset;
 }
@@ -3973,8 +4681,9 @@ dissect_gsm_map_SendAuthenticationInfoRes(gboolean implicit_tag _U_, tvbuff_t *t
   return offset;
 }
 
+
 static const ber_sequence_t SendAuthenticationInfoResV3_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_authenticationSetList },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_authenticationSetList },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
@@ -3982,12 +4691,13 @@ static const ber_sequence_t SendAuthenticationInfoResV3_sequence[] = {
 static int
 dissect_gsm_map_SendAuthenticationInfoResV3(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendAuthenticationInfoResV3_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoResV3);
+                                   SendAuthenticationInfoResV3_sequence, hf_index, ett_gsm_map_SendAuthenticationInfoResV3);
 
   return offset;
 }
 
 
+
 static int
 dissect_gsm_map_CheckIMEIArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_IMEI(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -3995,6 +4705,7 @@ dissect_gsm_map_CheckIMEIArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offse
   return offset;
 }
 
+
 static const asn_namedbit RequestedEquipmentInfo_bits[] = {
   {  0, &hf_gsm_map_RequestedEquipmentInfo_equipmentStatus, -1, -1, "equipmentStatus", NULL },
   {  1, &hf_gsm_map_RequestedEquipmentInfo_bmuef, -1, -1, "bmuef", NULL },
@@ -4004,8 +4715,8 @@ static const asn_namedbit RequestedEquipmentInfo_bits[] = {
 static int
 dissect_gsm_map_RequestedEquipmentInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 RequestedEquipmentInfo_bits, hf_index, ett_gsm_map_RequestedEquipmentInfo,
-                                 NULL);
+                                    RequestedEquipmentInfo_bits, hf_index, ett_gsm_map_RequestedEquipmentInfo,
+                                    NULL);
 
   return offset;
 }
@@ -4013,6 +4724,7 @@ static int dissect_requestedEquipmentInfo(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_RequestedEquipmentInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_requestedEquipmentInfo);
 }
 
+
 static const ber_sequence_t CheckIMEIArgV2_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imei },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_requestedEquipmentInfo },
@@ -4023,7 +4735,7 @@ static const ber_sequence_t CheckIMEIArgV2_sequence[] = {
 static int
 dissect_gsm_map_CheckIMEIArgV2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CheckIMEIArgV2_sequence, hf_index, ett_gsm_map_CheckIMEIArgV2);
+                                   CheckIMEIArgV2_sequence, hf_index, ett_gsm_map_CheckIMEIArgV2);
 
   return offset;
 }
@@ -4048,6 +4760,7 @@ static int dissect_equipmentStatus(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_EquipmentStatus(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_equipmentStatus);
 }
 
+
 static const ber_sequence_t CheckIMEIRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_equipmentStatus },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_bmuef },
@@ -4058,7 +4771,7 @@ static const ber_sequence_t CheckIMEIRes_sequence[] = {
 static int
 dissect_gsm_map_CheckIMEIRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CheckIMEIRes_sequence, hf_index, ett_gsm_map_CheckIMEIRes);
+                                   CheckIMEIRes_sequence, hf_index, ett_gsm_map_CheckIMEIRes);
 
   return offset;
 }
@@ -4097,8 +4810,9 @@ static const ber_choice_t BasicService_choice[] = {
 
 static int
 dissect_gsm_map_BasicService(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              BasicService_choice, hf_index, ett_gsm_map_BasicService, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 BasicService_choice, hf_index, ett_gsm_map_BasicService,
+                                 NULL);
 
   return offset;
 }
@@ -4108,7 +4822,7 @@ static int dissect_BasicServiceGroupList_item(packet_info *pinfo, proto_tree *tr
 
 
 static const ber_sequence_t BasicServiceGroupList_sequence_of[1] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceGroupList_item },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceGroupList_item },
 };
 
 static int
@@ -4125,6 +4839,7 @@ static int dissect_ext_basicServiceGroupList_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_BasicServiceGroupList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ext_basicServiceGroupList);
 }
 
+
 static const asn_namedbit ODB_GeneralData_bits[] = {
   {  0, &hf_gsm_map_ODB_GeneralData_allOG_CallsBarred, -1, -1, "allOG-CallsBarred", NULL },
   {  1, &hf_gsm_map_ODB_GeneralData_internationalOGCallsBarred, -1, -1, "internationalOGCallsBarred", NULL },
@@ -4161,8 +4876,8 @@ static const asn_namedbit ODB_GeneralData_bits[] = {
 static int
 dissect_gsm_map_ODB_GeneralData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 ODB_GeneralData_bits, hf_index, ett_gsm_map_ODB_GeneralData,
-                                 NULL);
+                                    ODB_GeneralData_bits, hf_index, ett_gsm_map_ODB_GeneralData,
+                                    NULL);
 
   return offset;
 }
@@ -4173,6 +4888,7 @@ static int dissect_odb_GeneralData_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_ODB_GeneralData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_odb_GeneralData);
 }
 
+
 static const asn_namedbit ODB_HPLMN_Data_bits[] = {
   {  0, &hf_gsm_map_ODB_HPLMN_Data_plmn_SpecificBarringType1, -1, -1, "plmn-SpecificBarringType1", NULL },
   {  1, &hf_gsm_map_ODB_HPLMN_Data_plmn_SpecificBarringType2, -1, -1, "plmn-SpecificBarringType2", NULL },
@@ -4184,8 +4900,8 @@ static const asn_namedbit ODB_HPLMN_Data_bits[] = {
 static int
 dissect_gsm_map_ODB_HPLMN_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 ODB_HPLMN_Data_bits, hf_index, ett_gsm_map_ODB_HPLMN_Data,
-                                 NULL);
+                                    ODB_HPLMN_Data_bits, hf_index, ett_gsm_map_ODB_HPLMN_Data,
+                                    NULL);
 
   return offset;
 }
@@ -4285,6 +5001,7 @@ static int dissect_defaultCallHandling_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_DefaultCallHandling(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_defaultCallHandling);
 }
 
+
 static const ber_sequence_t BcsmCamelTDPData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_bcsmTriggerDetectionPoint },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -4297,7 +5014,7 @@ static const ber_sequence_t BcsmCamelTDPData_sequence[] = {
 static int
 dissect_gsm_map_BcsmCamelTDPData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_BcsmCamelTDPData);
+                                   BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_BcsmCamelTDPData);
 
   return offset;
 }
@@ -4337,6 +5054,7 @@ static int dissect_o_BcsmTriggerDetectionPoint(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_O_BcsmTriggerDetectionPoint(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_o_BcsmTriggerDetectionPoint);
 }
 
+
 static const ber_sequence_t O_BcsmCamelTDPData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_o_BcsmTriggerDetectionPoint },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -4349,7 +5067,7 @@ static const ber_sequence_t O_BcsmCamelTDPData_sequence[] = {
 static int
 dissect_gsm_map_O_BcsmCamelTDPData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                O_BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_O_BcsmCamelTDPData);
+                                   O_BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_O_BcsmCamelTDPData);
 
   return offset;
 }
@@ -4386,6 +5104,7 @@ static int dissect_camelCapabilityHandling_impl(packet_info *pinfo, proto_tree *
   return dissect_gsm_map_CamelCapabilityHandling(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camelCapabilityHandling);
 }
 
+
 static const ber_sequence_t O_CSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_o_BcsmCamelTDPDataList },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -4398,7 +5117,7 @@ static const ber_sequence_t O_CSI_sequence[] = {
 static int
 dissect_gsm_map_O_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                O_CSI_sequence, hf_index, ett_gsm_map_O_CSI);
+                                   O_CSI_sequence, hf_index, ett_gsm_map_O_CSI);
 
   return offset;
 }
@@ -4494,7 +5213,7 @@ static int dissect_teleserviceList_impl(packet_info *pinfo, proto_tree *tree, tv
 
 
 
-static int
+int
 dissect_gsm_map_SS_Code(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -4515,7 +5234,7 @@ static int dissect_SS_EventList_item(packet_info *pinfo, proto_tree *tree, tvbuf
 }
 
 
-static const value_string gsm_map_Ext_BasicServiceCode_vals[] = {
+const value_string gsm_map_Ext_BasicServiceCode_vals[] = {
   {   2, "ext-BearerService" },
   {   3, "ext-Teleservice" },
   { 0, NULL }
@@ -4527,10 +5246,11 @@ static const ber_choice_t Ext_BasicServiceCode_choice[] = {
   { 0, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_Ext_BasicServiceCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Ext_BasicServiceCode_choice, hf_index, ett_gsm_map_Ext_BasicServiceCode, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Ext_BasicServiceCode_choice, hf_index, ett_gsm_map_Ext_BasicServiceCode,
+                                 NULL);
 
   return offset;
 }
@@ -4566,13 +5286,16 @@ static int dissect_BasicServiceCriteria_item(packet_info *pinfo, proto_tree *tre
 
 static int
 dissect_gsm_map_Ext_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 295 "gsmmap.cnf"
  /* Note Ext-SS-Status can have more than one byte */
 
  tvbuff_t      *parameter_tvb;
  guint8                octet;
 
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
  if (!parameter_tvb)
        return offset;
 
@@ -4588,6 +5311,7 @@ dissect_gsm_map_Ext_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
 
 
 
+
   return offset;
 }
 static int dissect_ext_ss_Status(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -4599,7 +5323,7 @@ static int dissect_ext_ss_Status_impl(packet_info *pinfo, proto_tree *tree, tvbu
 
 
 
-static int
+int
 dissect_gsm_map_ISDN_SubaddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -4624,16 +5348,19 @@ dissect_gsm_map_Ext_ForwOptions(gboolean implicit_tag _U_, tvbuff_t *tvb, int of
 }
 
 
+
 static int
 dissect_gsm_map_T_forwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_Ext_ForwOptions(implicit_tag, tvb, offset, pinfo, tree, hf_index);
 
+#line 421 "gsmmap.cnf"
 
        proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
 
+
   return offset;
 }
 static int dissect_ext_forwardingOptions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -4655,14 +5382,16 @@ static int dissect_ext_noReplyConditionTime_impl(packet_info *pinfo, proto_tree
 
 
 
-static int
+int
 dissect_gsm_map_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 245 "gsmmap.cnf"
 
  tvbuff_t      *parameter_tvb;
  char          *digit_str;
 
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
 
  if (!parameter_tvb)
        return offset;
@@ -4674,8 +5403,7 @@ dissect_gsm_map_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offs
  digit_str = unpack_digits(parameter_tvb, 1);
 
  proto_tree_add_string(tree, hf_gsm_map_address_digits, parameter_tvb, 1, -1, digit_str);
- if (digit_str)
-       g_free(digit_str);
+
 
 
   return offset;
@@ -4688,6 +5416,7 @@ static int dissect_lcsClientDialedByMS_impl(packet_info *pinfo, proto_tree *tree
 }
 
 
+
 static int
 dissect_gsm_map_FTN_AddressString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_AddressString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -4698,8 +5427,9 @@ static int dissect_longForwardedToNumber_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_FTN_AddressString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_longForwardedToNumber);
 }
 
+
 static const ber_sequence_t Ext_ForwFeature_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ext_ss_Status_impl },
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl },
   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl },
@@ -4713,7 +5443,7 @@ static const ber_sequence_t Ext_ForwFeature_sequence[] = {
 static int
 dissect_gsm_map_Ext_ForwFeature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_ForwFeature_sequence, hf_index, ett_gsm_map_Ext_ForwFeature);
+                                   Ext_ForwFeature_sequence, hf_index, ett_gsm_map_Ext_ForwFeature);
 
   return offset;
 }
@@ -4740,6 +5470,7 @@ static int dissect_ext_forwardingFeatureList_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_Ext_ForwFeatureList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ext_forwardingFeatureList);
 }
 
+
 static const ber_sequence_t Ext_ForwInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ext_forwardingFeatureList },
@@ -4750,7 +5481,7 @@ static const ber_sequence_t Ext_ForwInfo_sequence[] = {
 static int
 dissect_gsm_map_Ext_ForwInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_ForwInfo_sequence, hf_index, ett_gsm_map_Ext_ForwInfo);
+                                   Ext_ForwInfo_sequence, hf_index, ett_gsm_map_Ext_ForwInfo);
 
   return offset;
 }
@@ -4758,8 +5489,9 @@ static int dissect_ext_forwardingInfo_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_Ext_ForwInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ext_forwardingInfo);
 }
 
+
 static const ber_sequence_t Ext_CallBarringFeature_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ext_ss_Status_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -4768,7 +5500,7 @@ static const ber_sequence_t Ext_CallBarringFeature_sequence[] = {
 static int
 dissect_gsm_map_Ext_CallBarringFeature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_CallBarringFeature_sequence, hf_index, ett_gsm_map_Ext_CallBarringFeature);
+                                   Ext_CallBarringFeature_sequence, hf_index, ett_gsm_map_Ext_CallBarringFeature);
 
   return offset;
 }
@@ -4795,6 +5527,7 @@ static int dissect_ext_callBarringFeatureList_impl(packet_info *pinfo, proto_tre
   return dissect_gsm_map_Ext_CallBarFeatureList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ext_callBarringFeatureList);
 }
 
+
 static const ber_sequence_t Ext_CallBarInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ext_callBarringFeatureList },
@@ -4805,7 +5538,7 @@ static const ber_sequence_t Ext_CallBarInfo_sequence[] = {
 static int
 dissect_gsm_map_Ext_CallBarInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_CallBarInfo_sequence, hf_index, ett_gsm_map_Ext_CallBarInfo);
+                                   Ext_CallBarInfo_sequence, hf_index, ett_gsm_map_Ext_CallBarInfo);
 
   return offset;
 }
@@ -4815,7 +5548,7 @@ static int dissect_ext_callBarringInfo_impl(packet_info *pinfo, proto_tree *tree
 
 
 
-static int
+int
 dissect_gsm_map_CUG_Index(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
@@ -4831,7 +5564,7 @@ static int dissect_preferentialCUG_Indicator(packet_info *pinfo, proto_tree *tre
 
 
 
-static int
+int
 dissect_gsm_map_CUG_Interlock(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -4864,7 +5597,7 @@ static int dissect_intraCUG_Options(packet_info *pinfo, proto_tree *tree, tvbuff
 
 
 static const ber_sequence_t Ext_BasicServiceGroupList_sequence_of[1] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Ext_BasicServiceGroupList_item },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Ext_BasicServiceGroupList_item },
 };
 
 static int
@@ -4878,6 +5611,7 @@ static int dissect_basicServiceGroupList(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_Ext_BasicServiceGroupList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceGroupList);
 }
 
+
 static const ber_sequence_t CUG_Subscription_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_cug_Index },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cug_Interlock },
@@ -4890,7 +5624,7 @@ static const ber_sequence_t CUG_Subscription_sequence[] = {
 static int
 dissect_gsm_map_CUG_Subscription(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CUG_Subscription_sequence, hf_index, ett_gsm_map_CUG_Subscription);
+                                   CUG_Subscription_sequence, hf_index, ett_gsm_map_CUG_Subscription);
 
   return offset;
 }
@@ -4927,8 +5661,9 @@ static int dissect_interCUG_Restrictions(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_InterCUG_Restrictions(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_interCUG_Restrictions);
 }
 
+
 static const ber_sequence_t CUG_Feature_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_preferentialCUG_Indicator },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_interCUG_Restrictions },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -4938,7 +5673,7 @@ static const ber_sequence_t CUG_Feature_sequence[] = {
 static int
 dissect_gsm_map_CUG_Feature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CUG_Feature_sequence, hf_index, ett_gsm_map_CUG_Feature);
+                                   CUG_Feature_sequence, hf_index, ett_gsm_map_CUG_Feature);
 
   return offset;
 }
@@ -4962,6 +5697,7 @@ static int dissect_cug_FeatureList(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_CUG_FeatureList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_FeatureList);
 }
 
+
 static const ber_sequence_t CUG_Info_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_cug_SubscriptionList },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_FeatureList },
@@ -4969,10 +5705,10 @@ static const ber_sequence_t CUG_Info_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_CUG_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CUG_Info_sequence, hf_index, ett_gsm_map_CUG_Info);
+                                   CUG_Info_sequence, hf_index, ett_gsm_map_CUG_Info);
 
   return offset;
 }
@@ -5018,8 +5754,9 @@ static const ber_choice_t SS_SubscriptionOption_choice[] = {
 
 static int
 dissect_gsm_map_SS_SubscriptionOption(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SS_SubscriptionOption_choice, hf_index, ett_gsm_map_SS_SubscriptionOption, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SS_SubscriptionOption_choice, hf_index, ett_gsm_map_SS_SubscriptionOption,
+                                 NULL);
 
   return offset;
 }
@@ -5027,10 +5764,11 @@ static int dissect_ss_SubscriptionOption(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_SS_SubscriptionOption(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_SubscriptionOption);
 }
 
+
 static const ber_sequence_t Ext_SS_Data_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_ext_ss_Status_impl },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_basicServiceGroupList },
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -5039,7 +5777,7 @@ static const ber_sequence_t Ext_SS_Data_sequence[] = {
 static int
 dissect_gsm_map_Ext_SS_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_SS_Data_sequence, hf_index, ett_gsm_map_Ext_SS_Data);
+                                   Ext_SS_Data_sequence, hf_index, ett_gsm_map_Ext_SS_Data);
 
   return offset;
 }
@@ -5072,6 +5810,7 @@ static int dissect_priority_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_EMLPP_Priority(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_priority);
 }
 
+
 static const ber_sequence_t EMLPP_Info_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_maximumentitledPriority },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_defaultPriority },
@@ -5082,7 +5821,7 @@ static const ber_sequence_t EMLPP_Info_sequence[] = {
 static int
 dissect_gsm_map_EMLPP_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                EMLPP_Info_sequence, hf_index, ett_gsm_map_EMLPP_Info);
+                                   EMLPP_Info_sequence, hf_index, ett_gsm_map_EMLPP_Info);
 
   return offset;
 }
@@ -5111,8 +5850,9 @@ static const ber_choice_t Ext_SS_Info_choice[] = {
 
 static int
 dissect_gsm_map_Ext_SS_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Ext_SS_Info_choice, hf_index, ett_gsm_map_Ext_SS_Info, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Ext_SS_Info_choice, hf_index, ett_gsm_map_Ext_SS_Info,
+                                 NULL);
 
   return offset;
 }
@@ -5122,7 +5862,7 @@ static int dissect_Ext_SS_InfoList_item(packet_info *pinfo, proto_tree *tree, tv
 
 
 static const ber_sequence_t Ext_SS_InfoList_sequence_of[1] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Ext_SS_InfoList_item },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_Ext_SS_InfoList_item },
 };
 
 static int
@@ -5136,6 +5876,7 @@ static int dissect_provisionedSS_impl(packet_info *pinfo, proto_tree *tree, tvbu
   return dissect_gsm_map_Ext_SS_InfoList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_provisionedSS);
 }
 
+
 static const ber_sequence_t ODB_Data_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_odb_GeneralData },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_odb_HPLMN_Data },
@@ -5146,7 +5887,7 @@ static const ber_sequence_t ODB_Data_sequence[] = {
 static int
 dissect_gsm_map_ODB_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ODB_Data_sequence, hf_index, ett_gsm_map_ODB_Data);
+                                   ODB_Data_sequence, hf_index, ett_gsm_map_ODB_Data);
 
   return offset;
 }
@@ -5193,6 +5934,7 @@ static int dissect_regionalSubscriptionData_impl(packet_info *pinfo, proto_tree
 }
 
 
+
 static int
 dissect_gsm_map_GroupId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_TBCD_STRING(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -5206,6 +5948,7 @@ static int dissect_groupid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
   return dissect_gsm_map_GroupId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_groupid);
 }
 
+
 static const ber_sequence_t VoiceBroadcastData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupid },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_broadcastInitEntitlement },
@@ -5216,7 +5959,7 @@ static const ber_sequence_t VoiceBroadcastData_sequence[] = {
 static int
 dissect_gsm_map_VoiceBroadcastData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                VoiceBroadcastData_sequence, hf_index, ett_gsm_map_VoiceBroadcastData);
+                                   VoiceBroadcastData_sequence, hf_index, ett_gsm_map_VoiceBroadcastData);
 
   return offset;
 }
@@ -5240,6 +5983,7 @@ static int dissect_vbsSubscriptionData_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_VBSDataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vbsSubscriptionData);
 }
 
+
 static const ber_sequence_t VoiceGroupCallData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupId },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -5249,7 +5993,7 @@ static const ber_sequence_t VoiceGroupCallData_sequence[] = {
 static int
 dissect_gsm_map_VoiceGroupCallData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                VoiceGroupCallData_sequence, hf_index, ett_gsm_map_VoiceGroupCallData);
+                                   VoiceGroupCallData_sequence, hf_index, ett_gsm_map_VoiceGroupCallData);
 
   return offset;
 }
@@ -5289,6 +6033,7 @@ static int dissect_ss_EventList(packet_info *pinfo, proto_tree *tree, tvbuff_t *
   return dissect_gsm_map_SS_EventList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventList);
 }
 
+
 static const ber_sequence_t SS_CamelData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ss_EventList },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_gsmSCF_Address },
@@ -5299,7 +6044,7 @@ static const ber_sequence_t SS_CamelData_sequence[] = {
 static int
 dissect_gsm_map_SS_CamelData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SS_CamelData_sequence, hf_index, ett_gsm_map_SS_CamelData);
+                                   SS_CamelData_sequence, hf_index, ett_gsm_map_SS_CamelData);
 
   return offset;
 }
@@ -5307,6 +6052,7 @@ static int dissect_ss_CamelData(packet_info *pinfo, proto_tree *tree, tvbuff_t *
   return dissect_gsm_map_SS_CamelData(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_CamelData);
 }
 
+
 static const ber_sequence_t SS_CSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ss_CamelData },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -5318,7 +6064,7 @@ static const ber_sequence_t SS_CSI_sequence[] = {
 static int
 dissect_gsm_map_SS_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SS_CSI_sequence, hf_index, ett_gsm_map_SS_CSI);
+                                   SS_CSI_sequence, hf_index, ett_gsm_map_SS_CSI);
 
   return offset;
 }
@@ -5390,6 +6136,7 @@ static int dissect_destinationNumberLengthList_impl(packet_info *pinfo, proto_tr
   return dissect_gsm_map_DestinationNumberLengthList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_destinationNumberLengthList);
 }
 
+
 static const ber_sequence_t DestinationNumberCriteria_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_matchType_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationNumberList_impl },
@@ -5400,7 +6147,7 @@ static const ber_sequence_t DestinationNumberCriteria_sequence[] = {
 static int
 dissect_gsm_map_DestinationNumberCriteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DestinationNumberCriteria_sequence, hf_index, ett_gsm_map_DestinationNumberCriteria);
+                                   DestinationNumberCriteria_sequence, hf_index, ett_gsm_map_DestinationNumberCriteria);
 
   return offset;
 }
@@ -5410,7 +6157,7 @@ static int dissect_destinationNumberCriteria_impl(packet_info *pinfo, proto_tree
 
 
 static const ber_sequence_t BasicServiceCriteria_sequence_of[1] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceCriteria_item },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceCriteria_item },
 };
 
 static int
@@ -5475,6 +6222,7 @@ static int dissect_o_CauseValueCriteria_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_O_CauseValueCriteria(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_o_CauseValueCriteria);
 }
 
+
 static const ber_sequence_t O_BcsmCamelTDP_Criteria_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_o_BcsmTriggerDetectionPoint },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_destinationNumberCriteria_impl },
@@ -5488,7 +6236,7 @@ static const ber_sequence_t O_BcsmCamelTDP_Criteria_sequence[] = {
 static int
 dissect_gsm_map_O_BcsmCamelTDP_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                O_BcsmCamelTDP_Criteria_sequence, hf_index, ett_gsm_map_O_BcsmCamelTDP_Criteria);
+                                   O_BcsmCamelTDP_Criteria_sequence, hf_index, ett_gsm_map_O_BcsmCamelTDP_Criteria);
 
   return offset;
 }
@@ -5550,6 +6298,7 @@ static int dissect_mobilityTriggers(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_MobilityTriggers(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mobilityTriggers);
 }
 
+
 static const ber_sequence_t M_CSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_mobilityTriggers },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -5563,7 +6312,7 @@ static const ber_sequence_t M_CSI_sequence[] = {
 static int
 dissect_gsm_map_M_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                M_CSI_sequence, hf_index, ett_gsm_map_M_CSI);
+                                   M_CSI_sequence, hf_index, ett_gsm_map_M_CSI);
 
   return offset;
 }
@@ -5612,6 +6361,7 @@ static int dissect_defaultSMS_Handling_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_DefaultSMS_Handling(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_defaultSMS_Handling);
 }
 
+
 static const ber_sequence_t SMS_CAMEL_TDP_Data_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sms_TriggerDetectionPoint_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_serviceKey_impl },
@@ -5624,7 +6374,7 @@ static const ber_sequence_t SMS_CAMEL_TDP_Data_sequence[] = {
 static int
 dissect_gsm_map_SMS_CAMEL_TDP_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SMS_CAMEL_TDP_Data_sequence, hf_index, ett_gsm_map_SMS_CAMEL_TDP_Data);
+                                   SMS_CAMEL_TDP_Data_sequence, hf_index, ett_gsm_map_SMS_CAMEL_TDP_Data);
 
   return offset;
 }
@@ -5648,6 +6398,7 @@ static int dissect_sms_CAMEL_TDP_DataList_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_SMS_CAMEL_TDP_DataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sms_CAMEL_TDP_DataList);
 }
 
+
 static const ber_sequence_t SMS_CSI_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sms_CAMEL_TDP_DataList_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelCapabilityHandling_impl },
@@ -5660,7 +6411,7 @@ static const ber_sequence_t SMS_CSI_sequence[] = {
 static int
 dissect_gsm_map_SMS_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SMS_CSI_sequence, hf_index, ett_gsm_map_SMS_CSI);
+                                   SMS_CSI_sequence, hf_index, ett_gsm_map_SMS_CSI);
 
   return offset;
 }
@@ -5694,6 +6445,7 @@ static int dissect_t_BcsmTriggerDetectionPoint(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_T_BcsmTriggerDetectionPoint(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_t_BcsmTriggerDetectionPoint);
 }
 
+
 static const ber_sequence_t T_BcsmCamelTDPData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t_BcsmTriggerDetectionPoint },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -5706,7 +6458,7 @@ static const ber_sequence_t T_BcsmCamelTDPData_sequence[] = {
 static int
 dissect_gsm_map_T_BcsmCamelTDPData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                T_BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_T_BcsmCamelTDPData);
+                                   T_BcsmCamelTDPData_sequence, hf_index, ett_gsm_map_T_BcsmCamelTDPData);
 
   return offset;
 }
@@ -5730,6 +6482,7 @@ static int dissect_t_BcsmCamelTDPDataList(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_T_BcsmCamelTDPDataList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_t_BcsmCamelTDPDataList);
 }
 
+
 static const ber_sequence_t T_CSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_t_BcsmCamelTDPDataList },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -5742,7 +6495,7 @@ static const ber_sequence_t T_CSI_sequence[] = {
 static int
 dissect_gsm_map_T_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                T_CSI_sequence, hf_index, ett_gsm_map_T_CSI);
+                                   T_CSI_sequence, hf_index, ett_gsm_map_T_CSI);
 
   return offset;
 }
@@ -5772,6 +6525,7 @@ static int dissect_t_CauseValueCriteria_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_T_CauseValueCriteria(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_t_CauseValueCriteria);
 }
 
+
 static const ber_sequence_t T_BCSM_CAMEL_TDP_Criteria_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_t_BCSM_TriggerDetectionPoint },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_basicServiceCriteria_impl },
@@ -5782,7 +6536,7 @@ static const ber_sequence_t T_BCSM_CAMEL_TDP_Criteria_sequence[] = {
 static int
 dissect_gsm_map_T_BCSM_CAMEL_TDP_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                T_BCSM_CAMEL_TDP_Criteria_sequence, hf_index, ett_gsm_map_T_BCSM_CAMEL_TDP_Criteria);
+                                   T_BCSM_CAMEL_TDP_Criteria_sequence, hf_index, ett_gsm_map_T_BCSM_CAMEL_TDP_Criteria);
 
   return offset;
 }
@@ -5812,6 +6566,7 @@ static int dissect_vt_IM_BCSM_CAMEL_TDP_CriteriaList_impl(packet_info *pinfo, pr
   return dissect_gsm_map_T_BCSM_CAMEL_TDP_CriteriaList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vt_IM_BCSM_CAMEL_TDP_CriteriaList);
 }
 
+
 static const ber_sequence_t DP_AnalysedInfoCriterium_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_dialledNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -5824,7 +6579,7 @@ static const ber_sequence_t DP_AnalysedInfoCriterium_sequence[] = {
 static int
 dissect_gsm_map_DP_AnalysedInfoCriterium(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DP_AnalysedInfoCriterium_sequence, hf_index, ett_gsm_map_DP_AnalysedInfoCriterium);
+                                   DP_AnalysedInfoCriterium_sequence, hf_index, ett_gsm_map_DP_AnalysedInfoCriterium);
 
   return offset;
 }
@@ -5848,6 +6603,7 @@ static int dissect_dp_AnalysedInfoCriteriaList_impl(packet_info *pinfo, proto_tr
   return dissect_gsm_map_DP_AnalysedInfoCriteriaList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_dp_AnalysedInfoCriteriaList);
 }
 
+
 static const ber_sequence_t D_CSI_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dp_AnalysedInfoCriteriaList_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelCapabilityHandling_impl },
@@ -5860,7 +6616,7 @@ static const ber_sequence_t D_CSI_sequence[] = {
 static int
 dissect_gsm_map_D_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                D_CSI_sequence, hf_index, ett_gsm_map_D_CSI);
+                                   D_CSI_sequence, hf_index, ett_gsm_map_D_CSI);
 
   return offset;
 }
@@ -5910,6 +6666,7 @@ static int dissect_tpdu_TypeCriterion_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_TPDU_TypeCriterion(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_tpdu_TypeCriterion);
 }
 
+
 static const ber_sequence_t MT_smsCAMELTDP_Criteria_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_sms_TriggerDetectionPoint },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_tpdu_TypeCriterion_impl },
@@ -5919,7 +6676,7 @@ static const ber_sequence_t MT_smsCAMELTDP_Criteria_sequence[] = {
 static int
 dissect_gsm_map_MT_smsCAMELTDP_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MT_smsCAMELTDP_Criteria_sequence, hf_index, ett_gsm_map_MT_smsCAMELTDP_Criteria);
+                                   MT_smsCAMELTDP_Criteria_sequence, hf_index, ett_gsm_map_MT_smsCAMELTDP_Criteria);
 
   return offset;
 }
@@ -5943,6 +6700,7 @@ static int dissect_mt_smsCAMELTDP_CriteriaList_impl(packet_info *pinfo, proto_tr
   return dissect_gsm_map_MT_smsCAMELTDP_CriteriaList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mt_smsCAMELTDP_CriteriaList);
 }
 
+
 static const ber_sequence_t VlrCamelSubscriptionInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -5962,7 +6720,7 @@ static const ber_sequence_t VlrCamelSubscriptionInfo_sequence[] = {
 static int
 dissect_gsm_map_VlrCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                VlrCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_VlrCamelSubscriptionInfo);
+                                   VlrCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_VlrCamelSubscriptionInfo);
 
   return offset;
 }
@@ -5983,6 +6741,7 @@ static int dissect_naea_PreferredCIC_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_NAEA_CIC(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_naea_PreferredCIC);
 }
 
+
 static const ber_sequence_t NAEA_PreferredCI_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_naea_PreferredCIC_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -5992,7 +6751,7 @@ static const ber_sequence_t NAEA_PreferredCI_sequence[] = {
 static int
 dissect_gsm_map_NAEA_PreferredCI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NAEA_PreferredCI_sequence, hf_index, ett_gsm_map_NAEA_PreferredCI);
+                                   NAEA_PreferredCI_sequence, hf_index, ett_gsm_map_NAEA_PreferredCI);
 
   return offset;
 }
@@ -6023,12 +6782,15 @@ static int dissect_pdp_ContextIdentifier_impl(packet_info *pinfo, proto_tree *tr
 
 static int
 dissect_gsm_map_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 432 "gsmmap.cnf"
        guint8 pdp_type_org;
        tvbuff_t        *parameter_tvb;
 
+
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        &parameter_tvb);
 
+
  if (!parameter_tvb)
        return offset;
        proto_tree_add_item(tree, hf_gsm_map_pdp_type_org, parameter_tvb, 0,1,FALSE);
@@ -6043,6 +6805,9 @@ dissect_gsm_map_PDP_Type(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, p
                default:
                break;
        }
+
+
+
   return offset;
 }
 static int dissect_pdp_Type_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -6064,18 +6829,22 @@ static int dissect_pdp_Address_impl(packet_info *pinfo, proto_tree *tree, tvbuff
 
 
 
-static int
+int
 dissect_gsm_map_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 458 "gsmmap.cnf"
 
        tvbuff_t        *parameter_tvb;
 
+
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        &parameter_tvb);
 
 
         if (!parameter_tvb)
                return offset;
-       de_sm_qos(parameter_tvb, tree, 0, 3, NULL);
+       de_sm_qos(parameter_tvb, tree, 0, 3, NULL,0);
+
+
 
   return offset;
 }
@@ -6107,18 +6876,22 @@ static int dissect_lcsAPN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
 
 
 
-static int
+int
 dissect_gsm_map_Ext_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 473 "gsmmap.cnf"
 
        tvbuff_t        *parameter_tvb;
 
+
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        &parameter_tvb);
 
 
         if (!parameter_tvb)
                return offset;
-       de_sm_qos(parameter_tvb, tree, 0, 9, NULL);
+       de_sm_qos(parameter_tvb, tree, 0, 9, NULL, 0);
+
+
 
   return offset;
 }
@@ -6153,7 +6926,7 @@ static int dissect_pdp_ChargingCharacteristics_impl(packet_info *pinfo, proto_tr
 
 
 
-static int
+int
 dissect_gsm_map_Ext2_QoS_Subscribed(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -6173,6 +6946,7 @@ static int dissect_qos2_Negotiated_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_Ext2_QoS_Subscribed(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_qos2_Negotiated);
 }
 
+
 static const ber_sequence_t PDP_Context_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_pdp_ContextId },
   { BER_CLASS_CON, 16, BER_FLAGS_IMPLTAG, dissect_pdp_Type_impl },
@@ -6190,7 +6964,7 @@ static const ber_sequence_t PDP_Context_sequence[] = {
 static int
 dissect_gsm_map_PDP_Context(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PDP_Context_sequence, hf_index, ett_gsm_map_PDP_Context);
+                                   PDP_Context_sequence, hf_index, ett_gsm_map_PDP_Context);
 
   return offset;
 }
@@ -6214,6 +6988,7 @@ static int dissect_gprsDataList_impl(packet_info *pinfo, proto_tree *tree, tvbuf
   return dissect_gsm_map_GPRSDataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprsDataList);
 }
 
+
 static const ber_sequence_t GPRSSubscriptionData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_completeDataListIncluded },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gprsDataList_impl },
@@ -6224,7 +6999,7 @@ static const ber_sequence_t GPRSSubscriptionData_sequence[] = {
 static int
 dissect_gsm_map_GPRSSubscriptionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GPRSSubscriptionData_sequence, hf_index, ett_gsm_map_GPRSSubscriptionData);
+                                   GPRSSubscriptionData_sequence, hf_index, ett_gsm_map_GPRSSubscriptionData);
 
   return offset;
 }
@@ -6273,7 +7048,7 @@ static int dissect_lsaOnlyAccessIndicator_impl(packet_info *pinfo, proto_tree *t
 
 
 
-static int
+int
 dissect_gsm_map_LSAIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -6306,6 +7081,7 @@ static int dissect_lsaAttributes_impl(packet_info *pinfo, proto_tree *tree, tvbu
   return dissect_gsm_map_LSAAttributes(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaAttributes);
 }
 
+
 static const ber_sequence_t LSAData_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_lsaIdentity_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lsaAttributes_impl },
@@ -6317,7 +7093,7 @@ static const ber_sequence_t LSAData_sequence[] = {
 static int
 dissect_gsm_map_LSAData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LSAData_sequence, hf_index, ett_gsm_map_LSAData);
+                                   LSAData_sequence, hf_index, ett_gsm_map_LSAData);
 
   return offset;
 }
@@ -6341,6 +7117,7 @@ static int dissect_lsaDataList_impl(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_LSADataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaDataList);
 }
 
+
 static const ber_sequence_t LSAInformation_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_completeDataListIncluded },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lsaOnlyAccessIndicator_impl },
@@ -6352,7 +7129,7 @@ static const ber_sequence_t LSAInformation_sequence[] = {
 static int
 dissect_gsm_map_LSAInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LSAInformation_sequence, hf_index, ett_gsm_map_LSAInformation);
+                                   LSAInformation_sequence, hf_index, ett_gsm_map_LSAInformation);
 
   return offset;
 }
@@ -6377,7 +7154,7 @@ static int dissect_gmlc_List_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
 }
 
 
-static const value_string gsm_map_NotificationToMSUser_vals[] = {
+const value_string gsm_map_NotificationToMSUser_vals[] = {
   {   0, "notifyLocationAllowed" },
   {   1, "notifyAndVerify-LocationAllowedIfNoResponse" },
   {   2, "notifyAndVerify-LocationNotAllowedIfNoResponse" },
@@ -6386,7 +7163,7 @@ static const value_string gsm_map_NotificationToMSUser_vals[] = {
 };
 
 
-static int
+int
 dissect_gsm_map_NotificationToMSUser(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
@@ -6397,16 +7174,17 @@ static int dissect_notificationToMSUser_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_NotificationToMSUser(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_notificationToMSUser);
 }
 
+
 static const ber_sequence_t LCSClientExternalID_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_externalAddress_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LCSClientExternalID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSClientExternalID_sequence, hf_index, ett_gsm_map_LCSClientExternalID);
+                                   LCSClientExternalID_sequence, hf_index, ett_gsm_map_LCSClientExternalID);
 
   return offset;
 }
@@ -6436,6 +7214,7 @@ static int dissect_gmlc_Restriction_impl(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_GMLC_Restriction(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmlc_Restriction);
 }
 
+
 static const ber_sequence_t ExternalClient_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_clientIdentity },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_Restriction_impl },
@@ -6447,7 +7226,7 @@ static const ber_sequence_t ExternalClient_sequence[] = {
 static int
 dissect_gsm_map_ExternalClient(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ExternalClient_sequence, hf_index, ett_gsm_map_ExternalClient);
+                                   ExternalClient_sequence, hf_index, ett_gsm_map_ExternalClient);
 
   return offset;
 }
@@ -6533,7 +7312,7 @@ static int dissect_ext_externalClientList_impl(packet_info *pinfo, proto_tree *t
 
 
 
-static int
+int
 dissect_gsm_map_LCSServiceTypeID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
@@ -6547,6 +7326,7 @@ static int dissect_lcsServiceTypeID_impl(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_LCSServiceTypeID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsServiceTypeID);
 }
 
+
 static const ber_sequence_t ServiceType_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceTypeIdentity },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_Restriction_impl },
@@ -6558,7 +7338,7 @@ static const ber_sequence_t ServiceType_sequence[] = {
 static int
 dissect_gsm_map_ServiceType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ServiceType_sequence, hf_index, ett_gsm_map_ServiceType);
+                                   ServiceType_sequence, hf_index, ett_gsm_map_ServiceType);
 
   return offset;
 }
@@ -6582,6 +7362,7 @@ static int dissect_serviceTypeList_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_ServiceTypeList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_serviceTypeList);
 }
 
+
 static const ber_sequence_t LCS_PrivacyClass_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ext_ss_Status },
@@ -6597,7 +7378,7 @@ static const ber_sequence_t LCS_PrivacyClass_sequence[] = {
 static int
 dissect_gsm_map_LCS_PrivacyClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCS_PrivacyClass_sequence, hf_index, ett_gsm_map_LCS_PrivacyClass);
+                                   LCS_PrivacyClass_sequence, hf_index, ett_gsm_map_LCS_PrivacyClass);
 
   return offset;
 }
@@ -6624,6 +7405,7 @@ static int dissect_add_lcs_PrivacyExceptionList(packet_info *pinfo, proto_tree *
   return dissect_gsm_map_LCS_PrivacyExceptionList(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_add_lcs_PrivacyExceptionList);
 }
 
+
 static const ber_sequence_t MOLR_Class_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ext_ss_Status },
@@ -6634,7 +7416,7 @@ static const ber_sequence_t MOLR_Class_sequence[] = {
 static int
 dissect_gsm_map_MOLR_Class(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MOLR_Class_sequence, hf_index, ett_gsm_map_MOLR_Class);
+                                   MOLR_Class_sequence, hf_index, ett_gsm_map_MOLR_Class);
 
   return offset;
 }
@@ -6658,6 +7440,7 @@ static int dissect_molr_List_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_MOLR_List(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_molr_List);
 }
 
+
 static const ber_sequence_t LCSInformation_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gmlc_List_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcs_PrivacyExceptionList_impl },
@@ -6669,7 +7452,7 @@ static const ber_sequence_t LCSInformation_sequence[] = {
 static int
 dissect_gsm_map_LCSInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSInformation_sequence, hf_index, ett_gsm_map_LCSInformation);
+                                   LCSInformation_sequence, hf_index, ett_gsm_map_LCSInformation);
 
   return offset;
 }
@@ -6719,6 +7502,7 @@ static int dissect_nbrSN_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
   return dissect_gsm_map_MC_Bearers(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_nbrSN);
 }
 
+
 static const ber_sequence_t MC_SS_Info_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ext_ss_Status_impl },
@@ -6731,7 +7515,7 @@ static const ber_sequence_t MC_SS_Info_sequence[] = {
 static int
 dissect_gsm_map_MC_SS_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MC_SS_Info_sequence, hf_index, ett_gsm_map_MC_SS_Info);
+                                   MC_SS_Info_sequence, hf_index, ett_gsm_map_MC_SS_Info);
 
   return offset;
 }
@@ -6793,6 +7577,7 @@ static int dissect_defaultSessionHandling_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_DefaultGPRS_Handling(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_defaultSessionHandling);
 }
 
+
 static const ber_sequence_t GPRS_CamelTDPData_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gprs_TriggerDetectionPoint_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_serviceKey_impl },
@@ -6805,7 +7590,7 @@ static const ber_sequence_t GPRS_CamelTDPData_sequence[] = {
 static int
 dissect_gsm_map_GPRS_CamelTDPData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GPRS_CamelTDPData_sequence, hf_index, ett_gsm_map_GPRS_CamelTDPData);
+                                   GPRS_CamelTDPData_sequence, hf_index, ett_gsm_map_GPRS_CamelTDPData);
 
   return offset;
 }
@@ -6829,6 +7614,7 @@ static int dissect_gprs_CamelTDPDataList_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_GPRS_CamelTDPDataList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprs_CamelTDPDataList);
 }
 
+
 static const ber_sequence_t GPRS_CSI_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprs_CamelTDPDataList_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camelCapabilityHandling_impl },
@@ -6841,7 +7627,7 @@ static const ber_sequence_t GPRS_CSI_sequence[] = {
 static int
 dissect_gsm_map_GPRS_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GPRS_CSI_sequence, hf_index, ett_gsm_map_GPRS_CSI);
+                                   GPRS_CSI_sequence, hf_index, ett_gsm_map_GPRS_CSI);
 
   return offset;
 }
@@ -6849,6 +7635,7 @@ static int dissect_gprs_CSI_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_GPRS_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gprs_CSI);
 }
 
+
 static const ber_sequence_t MG_CSI_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_mobilityTriggers },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
@@ -6862,7 +7649,7 @@ static const ber_sequence_t MG_CSI_sequence[] = {
 static int
 dissect_gsm_map_MG_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MG_CSI_sequence, hf_index, ett_gsm_map_MG_CSI);
+                                   MG_CSI_sequence, hf_index, ett_gsm_map_MG_CSI);
 
   return offset;
 }
@@ -6870,6 +7657,7 @@ static int dissect_mg_csi_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
   return dissect_gsm_map_MG_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mg_csi);
 }
 
+
 static const ber_sequence_t SGSN_CAMEL_SubscriptionInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_gprs_CSI_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mo_sms_CSI_impl },
@@ -6883,7 +7671,7 @@ static const ber_sequence_t SGSN_CAMEL_SubscriptionInfo_sequence[] = {
 static int
 dissect_gsm_map_SGSN_CAMEL_SubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SGSN_CAMEL_SubscriptionInfo_sequence, hf_index, ett_gsm_map_SGSN_CAMEL_SubscriptionInfo);
+                                   SGSN_CAMEL_SubscriptionInfo_sequence, hf_index, ett_gsm_map_SGSN_CAMEL_SubscriptionInfo);
 
   return offset;
 }
@@ -6891,6 +7679,7 @@ static int dissect_sgsn_CAMEL_SubscriptionInfo_impl(packet_info *pinfo, proto_tr
   return dissect_gsm_map_SGSN_CAMEL_SubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_CAMEL_SubscriptionInfo);
 }
 
+
 static const asn_namedbit AccessRestrictionData_bits[] = {
   {  0, &hf_gsm_map_AccessRestrictionData_utranNotAllowed, -1, -1, "utranNotAllowed", NULL },
   {  1, &hf_gsm_map_AccessRestrictionData_geranNotAllowed, -1, -1, "geranNotAllowed", NULL },
@@ -6900,8 +7689,8 @@ static const asn_namedbit AccessRestrictionData_bits[] = {
 static int
 dissect_gsm_map_AccessRestrictionData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 AccessRestrictionData_bits, hf_index, ett_gsm_map_AccessRestrictionData,
-                                 NULL);
+                                    AccessRestrictionData_bits, hf_index, ett_gsm_map_AccessRestrictionData,
+                                    NULL);
 
   return offset;
 }
@@ -6909,6 +7698,7 @@ static int dissect_accessRestrictionData_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_AccessRestrictionData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_accessRestrictionData);
 }
 
+
 static const ber_sequence_t InsertSubscriberDataArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_msisdn_impl },
@@ -6944,7 +7734,7 @@ static const ber_sequence_t InsertSubscriberDataArg_sequence[] = {
 static int
 dissect_gsm_map_InsertSubscriberDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                InsertSubscriberDataArg_sequence, hf_index, ett_gsm_map_InsertSubscriberDataArg);
+                                   InsertSubscriberDataArg_sequence, hf_index, ett_gsm_map_InsertSubscriberDataArg);
 
   return offset;
 }
@@ -6989,6 +7779,7 @@ static int dissect_regionalSubscriptionResponse_impl(packet_info *pinfo, proto_t
   return dissect_gsm_map_RegionalSubscriptionResponse(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_regionalSubscriptionResponse);
 }
 
+
 static const ber_sequence_t InsertSubscriberDataRes_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teleserviceList_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bearerServiceList_impl },
@@ -7004,14 +7795,14 @@ static const ber_sequence_t InsertSubscriberDataRes_sequence[] = {
 static int
 dissect_gsm_map_InsertSubscriberDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                InsertSubscriberDataRes_sequence, hf_index, ett_gsm_map_InsertSubscriberDataRes);
+                                   InsertSubscriberDataRes_sequence, hf_index, ett_gsm_map_InsertSubscriberDataRes);
 
   return offset;
 }
 
 
 static const ber_sequence_t BasicServiceList_sequence_of[1] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceList_item },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_BasicServiceList_item },
 };
 
 static int
@@ -7056,8 +7847,9 @@ static const ber_choice_t GPRSSubscriptionDataWithdraw_choice[] = {
 
 static int
 dissect_gsm_map_GPRSSubscriptionDataWithdraw(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              GPRSSubscriptionDataWithdraw_choice, hf_index, ett_gsm_map_GPRSSubscriptionDataWithdraw, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 GPRSSubscriptionDataWithdraw_choice, hf_index, ett_gsm_map_GPRSSubscriptionDataWithdraw,
+                                 NULL);
 
   return offset;
 }
@@ -7096,8 +7888,9 @@ static const ber_choice_t LSAInformationWithdraw_choice[] = {
 
 static int
 dissect_gsm_map_LSAInformationWithdraw(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              LSAInformationWithdraw_choice, hf_index, ett_gsm_map_LSAInformationWithdraw, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 LSAInformationWithdraw_choice, hf_index, ett_gsm_map_LSAInformationWithdraw,
+                                 NULL);
 
   return offset;
 }
@@ -7105,6 +7898,7 @@ static int dissect_lsaInformationWithdraw_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_LSAInformationWithdraw(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lsaInformationWithdraw);
 }
 
+
 static const asn_namedbit SpecificCSI_Withdraw_bits[] = {
   {  0, &hf_gsm_map_SpecificCSI_Withdraw_o_csi, -1, -1, "o-csi", NULL },
   {  1, &hf_gsm_map_SpecificCSI_Withdraw_ss_csi, -1, -1, "ss-csi", NULL },
@@ -7126,8 +7920,8 @@ static const asn_namedbit SpecificCSI_Withdraw_bits[] = {
 static int
 dissect_gsm_map_SpecificCSI_Withdraw(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 SpecificCSI_Withdraw_bits, hf_index, ett_gsm_map_SpecificCSI_Withdraw,
-                                 NULL);
+                                    SpecificCSI_Withdraw_bits, hf_index, ett_gsm_map_SpecificCSI_Withdraw,
+                                    NULL);
 
   return offset;
 }
@@ -7138,6 +7932,7 @@ static int dissect_specificCSIDeletedList_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_SpecificCSI_Withdraw(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_specificCSIDeletedList);
 }
 
+
 static const ber_sequence_t DeleteSubscriberDataArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_basicServiceList_impl },
@@ -7161,11 +7956,12 @@ static const ber_sequence_t DeleteSubscriberDataArg_sequence[] = {
 static int
 dissect_gsm_map_DeleteSubscriberDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DeleteSubscriberDataArg_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataArg);
+                                   DeleteSubscriberDataArg_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t DeleteSubscriberDataRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_regionalSubscriptionResponse_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -7175,21 +7971,24 @@ static const ber_sequence_t DeleteSubscriberDataRes_sequence[] = {
 static int
 dissect_gsm_map_DeleteSubscriberDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DeleteSubscriberDataRes_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataRes);
+                                   DeleteSubscriberDataRes_sequence, hf_index, ett_gsm_map_DeleteSubscriberDataRes);
 
   return offset;
 }
 
 
 
-static int
+int
 dissect_gsm_map_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 268 "gsmmap.cnf"
 
  tvbuff_t      *parameter_tvb;
  guint8                octet;
 
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
+  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
  if (!parameter_tvb)
        return offset;
 
@@ -7205,6 +8004,7 @@ dissect_gsm_map_SS_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
 
 
 
+
   return offset;
 }
 static int dissect_ss_Status(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -7255,8 +8055,9 @@ static const ber_choice_t BasicServiceCode_choice[] = {
 
 static int
 dissect_gsm_map_BasicServiceCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              BasicServiceCode_choice, hf_index, ett_gsm_map_BasicServiceCode, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 BasicServiceCode_choice, hf_index, ett_gsm_map_BasicServiceCode,
+                                 NULL);
 
   return offset;
 }
@@ -7267,8 +8068,9 @@ static int dissect_basicServiceGroup_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_BasicServiceCode(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_basicServiceGroup);
 }
 
+
 static const ber_sequence_t CallBarringFeature_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
   { 0, 0, 0, NULL }
 };
@@ -7276,7 +8078,7 @@ static const ber_sequence_t CallBarringFeature_sequence[] = {
 static int
 dissect_gsm_map_CallBarringFeature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CallBarringFeature_sequence, hf_index, ett_gsm_map_CallBarringFeature);
+                                   CallBarringFeature_sequence, hf_index, ett_gsm_map_CallBarringFeature);
 
   return offset;
 }
@@ -7307,11 +8109,13 @@ dissect_gsm_map_ForwardingOptions(gboolean implicit_tag _U_, tvbuff_t *tvb, int
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
 
+#line 415 "gsmmap.cnf"
 
        proto_tree_add_item(tree, hf_gsm_map_notification_to_forwarding_party, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_redirecting_presentation, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_notification_to_calling_party, tvb, 0,1,FALSE);
        proto_tree_add_item(tree, hf_gsm_map_forwarding_reason, tvb, 0,1,FALSE);
+
   return offset;
 }
 static int dissect_forwardingOptions_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -7331,8 +8135,9 @@ static int dissect_noReplyConditionTime_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_NoReplyConditionTime(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_noReplyConditionTime);
 }
 
+
 static const ber_sequence_t ForwardingFeature_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl },
   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl },
@@ -7345,7 +8150,7 @@ static const ber_sequence_t ForwardingFeature_sequence[] = {
 static int
 dissect_gsm_map_ForwardingFeature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardingFeature_sequence, hf_index, ett_gsm_map_ForwardingFeature);
+                                   ForwardingFeature_sequence, hf_index, ett_gsm_map_ForwardingFeature);
 
   return offset;
 }
@@ -7382,6 +8187,7 @@ dissect_gsm_map_LongForwardedToNumber(gboolean implicit_tag _U_, tvbuff_t *tvb,
   return offset;
 }
 
+
 static const ber_sequence_t ForwardingInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_forwardingFeatureList },
@@ -7391,7 +8197,7 @@ static const ber_sequence_t ForwardingInfo_sequence[] = {
 static int
 dissect_gsm_map_ForwardingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardingInfo_sequence, hf_index, ett_gsm_map_ForwardingInfo);
+                                   ForwardingInfo_sequence, hf_index, ett_gsm_map_ForwardingInfo);
 
   return offset;
 }
@@ -7399,6 +8205,7 @@ static int dissect_forwardingInfo_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_ForwardingInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingInfo);
 }
 
+
 static const ber_sequence_t CallBarringInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_callBarringFeatureList },
@@ -7408,7 +8215,7 @@ static const ber_sequence_t CallBarringInfo_sequence[] = {
 static int
 dissect_gsm_map_CallBarringInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CallBarringInfo_sequence, hf_index, ett_gsm_map_CallBarringInfo);
+                                   CallBarringInfo_sequence, hf_index, ett_gsm_map_CallBarringInfo);
 
   return offset;
 }
@@ -7417,6 +8224,7 @@ static int dissect_callBarringInfo_impl(packet_info *pinfo, proto_tree *tree, tv
 }
 
 
+
 static int
 dissect_gsm_map_HLR_Id(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_IMSI(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -7443,6 +8251,7 @@ static int dissect_hlr_List(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
   return dissect_gsm_map_HLR_List(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_hlr_List);
 }
 
+
 static const ber_sequence_t ResetArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_hlr_List },
@@ -7452,7 +8261,7 @@ static const ber_sequence_t ResetArg_sequence[] = {
 static int
 dissect_gsm_map_ResetArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ResetArg_sequence, hf_index, ett_gsm_map_ResetArg);
+                                   ResetArg_sequence, hf_index, ett_gsm_map_ResetArg);
 
   return offset;
 }
@@ -7467,6 +8276,7 @@ dissect_gsm_map_Hlr_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
   return offset;
 }
 
+
 static const ber_sequence_t RestoreDataArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_lmsi },
@@ -7478,11 +8288,12 @@ static const ber_sequence_t RestoreDataArg_sequence[] = {
 static int
 dissect_gsm_map_RestoreDataArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RestoreDataArg_sequence, hf_index, ett_gsm_map_RestoreDataArg);
+                                   RestoreDataArg_sequence, hf_index, ett_gsm_map_RestoreDataArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t RestoreDataRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_msNotReachable },
@@ -7493,7 +8304,7 @@ static const ber_sequence_t RestoreDataRes_sequence[] = {
 static int
 dissect_gsm_map_RestoreDataRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RestoreDataRes_sequence, hf_index, ett_gsm_map_RestoreDataRes);
+                                   RestoreDataRes_sequence, hf_index, ett_gsm_map_RestoreDataRes);
 
   return offset;
 }
@@ -7540,6 +8351,7 @@ static int dissect_ss_EventSpecification_item(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_OCTET_STRING_SIZE_1_20(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventSpecification_item);
 }
 
+
 static const ber_sequence_t ActivateTraceModeArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_traceReference_impl },
@@ -7552,11 +8364,12 @@ static const ber_sequence_t ActivateTraceModeArg_sequence[] = {
 static int
 dissect_gsm_map_ActivateTraceModeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ActivateTraceModeArg_sequence, hf_index, ett_gsm_map_ActivateTraceModeArg);
+                                   ActivateTraceModeArg_sequence, hf_index, ett_gsm_map_ActivateTraceModeArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ActivateTraceModeRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -7565,11 +8378,12 @@ static const ber_sequence_t ActivateTraceModeRes_sequence[] = {
 static int
 dissect_gsm_map_ActivateTraceModeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ActivateTraceModeRes_sequence, hf_index, ett_gsm_map_ActivateTraceModeRes);
+                                   ActivateTraceModeRes_sequence, hf_index, ett_gsm_map_ActivateTraceModeRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t DeactivateTraceModeArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_traceReference_impl },
@@ -7580,11 +8394,12 @@ static const ber_sequence_t DeactivateTraceModeArg_sequence[] = {
 static int
 dissect_gsm_map_DeactivateTraceModeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DeactivateTraceModeArg_sequence, hf_index, ett_gsm_map_DeactivateTraceModeArg);
+                                   DeactivateTraceModeArg_sequence, hf_index, ett_gsm_map_DeactivateTraceModeArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t DeactivateTraceModeRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -7593,11 +8408,12 @@ static const ber_sequence_t DeactivateTraceModeRes_sequence[] = {
 static int
 dissect_gsm_map_DeactivateTraceModeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DeactivateTraceModeRes_sequence, hf_index, ett_gsm_map_DeactivateTraceModeRes);
+                                   DeactivateTraceModeRes_sequence, hf_index, ett_gsm_map_DeactivateTraceModeRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t CUG_CheckInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_cug_Interlock },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_OutgoingAccess },
@@ -7608,7 +8424,7 @@ static const ber_sequence_t CUG_CheckInfo_sequence[] = {
 static int
 dissect_gsm_map_CUG_CheckInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CUG_CheckInfo_sequence, hf_index, ett_gsm_map_CUG_CheckInfo);
+                                   CUG_CheckInfo_sequence, hf_index, ett_gsm_map_CUG_CheckInfo);
 
   return offset;
 }
@@ -7694,6 +8510,7 @@ static int dissect_forwardingReason_impl(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_ForwardingReason(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingReason);
 }
 
+
 static const ber_sequence_t ExternalSignalInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_protocolId },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo },
@@ -7704,7 +8521,7 @@ static const ber_sequence_t ExternalSignalInfo_sequence[] = {
 static int
 dissect_gsm_map_ExternalSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ExternalSignalInfo_sequence, hf_index, ett_gsm_map_ExternalSignalInfo);
+                                   ExternalSignalInfo_sequence, hf_index, ett_gsm_map_ExternalSignalInfo);
 
   return offset;
 }
@@ -7742,6 +8559,7 @@ static int dissect_callInfo_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_ExternalSignalInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callInfo);
 }
 
+
 static const ber_sequence_t CamelInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_supportedCamelPhases },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_suppress_T_CSI },
@@ -7753,7 +8571,7 @@ static const ber_sequence_t CamelInfo_sequence[] = {
 static int
 dissect_gsm_map_CamelInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CamelInfo_sequence, hf_index, ett_gsm_map_CamelInfo);
+                                   CamelInfo_sequence, hf_index, ett_gsm_map_CamelInfo);
 
   return offset;
 }
@@ -7775,7 +8593,7 @@ static int dissect_suppressionOfAnnouncement_impl(packet_info *pinfo, proto_tree
 
 
 
-static int
+int
 dissect_gsm_map_AlertingPattern(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -7820,6 +8638,7 @@ static int dissect_ext_ProtocolId(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_Ext_ProtocolId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ext_ProtocolId);
 }
 
+
 static const ber_sequence_t Ext_ExternalSignalInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_ext_ProtocolId },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_signalInfo },
@@ -7830,7 +8649,7 @@ static const ber_sequence_t Ext_ExternalSignalInfo_sequence[] = {
 static int
 dissect_gsm_map_Ext_ExternalSignalInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_ExternalSignalInfo_sequence, hf_index, ett_gsm_map_Ext_ExternalSignalInfo);
+                                   Ext_ExternalSignalInfo_sequence, hf_index, ett_gsm_map_Ext_ExternalSignalInfo);
 
   return offset;
 }
@@ -7851,6 +8670,7 @@ static int dissect_callDiversionTreatmentIndicator_impl(packet_info *pinfo, prot
   return dissect_gsm_map_CallDiversionTreatmentIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callDiversionTreatmentIndicator);
 }
 
+
 static const ber_sequence_t SendRoutingInfoArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_msisdn_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_CheckInfo_impl },
@@ -7885,11 +8705,12 @@ static const ber_sequence_t SendRoutingInfoArg_sequence[] = {
 static int
 dissect_gsm_map_SendRoutingInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendRoutingInfoArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoArg);
+                                   SendRoutingInfoArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ForwardingData_sequence[] = {
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_impl },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl },
@@ -7902,7 +8723,7 @@ static const ber_sequence_t ForwardingData_sequence[] = {
 static int
 dissect_gsm_map_ForwardingData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardingData_sequence, hf_index, ett_gsm_map_ForwardingData);
+                                   ForwardingData_sequence, hf_index, ett_gsm_map_ForwardingData);
 
   return offset;
 }
@@ -7928,8 +8749,9 @@ static const ber_choice_t RoutingInfo_choice[] = {
 
 static int
 dissect_gsm_map_RoutingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              RoutingInfo_choice, hf_index, ett_gsm_map_RoutingInfo, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 RoutingInfo_choice, hf_index, ett_gsm_map_RoutingInfo,
+                                 NULL);
 
   return offset;
 }
@@ -7940,6 +8762,7 @@ static int dissect_routingInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
   return dissect_gsm_map_RoutingInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_routingInfo);
 }
 
+
 static const ber_sequence_t GmscCamelSubscriptionInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_t_CSI_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl },
@@ -7953,7 +8776,7 @@ static const ber_sequence_t GmscCamelSubscriptionInfo_sequence[] = {
 static int
 dissect_gsm_map_GmscCamelSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GmscCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_GmscCamelSubscriptionInfo);
+                                   GmscCamelSubscriptionInfo_sequence, hf_index, ett_gsm_map_GmscCamelSubscriptionInfo);
 
   return offset;
 }
@@ -7961,6 +8784,7 @@ static int dissect_gmscCamelSubscriptionInfo_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_GmscCamelSubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_gmscCamelSubscriptionInfo);
 }
 
+
 static const ber_sequence_t CamelRoutingInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_forwardingData },
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gmscCamelSubscriptionInfo_impl },
@@ -7971,7 +8795,7 @@ static const ber_sequence_t CamelRoutingInfo_sequence[] = {
 static int
 dissect_gsm_map_CamelRoutingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CamelRoutingInfo_sequence, hf_index, ett_gsm_map_CamelRoutingInfo);
+                                   CamelRoutingInfo_sequence, hf_index, ett_gsm_map_CamelRoutingInfo);
 
   return offset;
 }
@@ -7987,15 +8811,16 @@ static const value_string gsm_map_ExtendedRoutingInfo_vals[] = {
 };
 
 static const ber_choice_t ExtendedRoutingInfo_choice[] = {
-  {   0, BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_routingInfo },
+  {   0, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_routingInfo },
   {   1, BER_CLASS_CON, 8, BER_FLAGS_IMPLTAG, dissect_camelRoutingInfo_impl },
   { 0, 0, 0, 0, NULL }
 };
 
 static int
 dissect_gsm_map_ExtendedRoutingInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              ExtendedRoutingInfo_choice, hf_index, ett_gsm_map_ExtendedRoutingInfo, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 ExtendedRoutingInfo_choice, hf_index, ett_gsm_map_ExtendedRoutingInfo,
+                                 NULL);
 
   return offset;
 }
@@ -8005,7 +8830,7 @@ static int dissect_extendedRoutingInfo(packet_info *pinfo, proto_tree *tree, tvb
 
 
 
-static int
+int
 dissect_gsm_map_AgeOfLocationInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
@@ -8021,7 +8846,7 @@ static int dissect_ageOfLocationEstimate_impl(packet_info *pinfo, proto_tree *tr
 
 
 
-static int
+int
 dissect_gsm_map_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -8050,7 +8875,7 @@ static int dissect_locationNumber_impl(packet_info *pinfo, proto_tree *tree, tvb
 
 
 
-static int
+int
 dissect_gsm_map_CellGlobalIdOrServiceAreaIdFixedLength(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -8076,8 +8901,9 @@ static const ber_choice_t CellGlobalIdOrServiceAreaIdOrLAI_choice[] = {
 
 static int
 dissect_gsm_map_CellGlobalIdOrServiceAreaIdOrLAI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              CellGlobalIdOrServiceAreaIdOrLAI_choice, hf_index, ett_gsm_map_CellGlobalIdOrServiceAreaIdOrLAI, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 CellGlobalIdOrServiceAreaIdOrLAI_choice, hf_index, ett_gsm_map_CellGlobalIdOrServiceAreaIdOrLAI,
+                                 NULL);
 
   return offset;
 }
@@ -8107,6 +8933,7 @@ static int dissect_geodeticInformation_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_GeodeticInformation(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_geodeticInformation);
 }
 
+
 static const ber_sequence_t LocationInformation_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ageOfLocationInformation },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_geographicalInformation_impl },
@@ -8122,10 +8949,10 @@ static const ber_sequence_t LocationInformation_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LocationInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LocationInformation_sequence, hf_index, ett_gsm_map_LocationInformation);
+                                   LocationInformation_sequence, hf_index, ett_gsm_map_LocationInformation);
 
   return offset;
 }
@@ -8134,7 +8961,7 @@ static int dissect_locationInformation_impl(packet_info *pinfo, proto_tree *tree
 }
 
 
-static const value_string gsm_map_SubscriberState_vals[] = {
+const value_string gsm_map_SubscriberState_vals[] = {
   {   0, "assumedIdle" },
   {   1, "camelBusy" },
   {   2, "notProvidedFromVLR" },
@@ -8148,10 +8975,11 @@ static const ber_choice_t SubscriberState_choice[] = {
   { 0, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_SubscriberState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SubscriberState_choice, hf_index, ett_gsm_map_SubscriberState, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SubscriberState_choice, hf_index, ett_gsm_map_SubscriberState,
+                                 NULL);
 
   return offset;
 }
@@ -8161,7 +8989,7 @@ static int dissect_subscriberState(packet_info *pinfo, proto_tree *tree, tvbuff_
 
 
 
-static int
+int
 dissect_gsm_map_RAIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -8172,6 +9000,7 @@ static int dissect_routeingAreaIdentity(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_RAIdentity(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_routeingAreaIdentity);
 }
 
+
 static const ber_sequence_t LocationInformationGPRS_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_cellGlobalIdOrServiceAreaIdOrLAI },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_routeingAreaIdentity },
@@ -8189,7 +9018,7 @@ static const ber_sequence_t LocationInformationGPRS_sequence[] = {
 static int
 dissect_gsm_map_LocationInformationGPRS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LocationInformationGPRS_sequence, hf_index, ett_gsm_map_LocationInformationGPRS);
+                                   LocationInformationGPRS_sequence, hf_index, ett_gsm_map_LocationInformationGPRS);
 
   return offset;
 }
@@ -8244,7 +9073,7 @@ static int dissect_teid_ForIu_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
 
 
 
-static int
+int
 dissect_gsm_map_GPRSChargingID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -8255,6 +9084,7 @@ static int dissect_chargingId_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_GPRSChargingID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_chargingId);
 }
 
+
 static const ber_sequence_t PDP_ContextInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_pdp_ContextIdentifier_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_pdp_ContextActive_impl },
@@ -8283,7 +9113,7 @@ static const ber_sequence_t PDP_ContextInfo_sequence[] = {
 static int
 dissect_gsm_map_PDP_ContextInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PDP_ContextInfo_sequence, hf_index, ett_gsm_map_PDP_ContextInfo);
+                                   PDP_ContextInfo_sequence, hf_index, ett_gsm_map_PDP_ContextInfo);
 
   return offset;
 }
@@ -8356,8 +9186,9 @@ static const ber_choice_t PS_SubscriberState_choice[] = {
 
 static int
 dissect_gsm_map_PS_SubscriberState(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              PS_SubscriberState_choice, hf_index, ett_gsm_map_PS_SubscriberState, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 PS_SubscriberState_choice, hf_index, ett_gsm_map_PS_SubscriberState,
+                                 NULL);
 
   return offset;
 }
@@ -8367,7 +9198,7 @@ static int dissect_ps_SubscriberState_impl(packet_info *pinfo, proto_tree *tree,
 
 
 
-static int
+int
 dissect_gsm_map_MS_Classmark2(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -8404,6 +9235,7 @@ static int dissect_mSRadioAccessCapability_impl(packet_info *pinfo, proto_tree *
   return dissect_gsm_map_MSRadioAccessCapability(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mSRadioAccessCapability);
 }
 
+
 static const ber_sequence_t GPRSMSClass_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mSNetworkCapability_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mSRadioAccessCapability_impl },
@@ -8413,7 +9245,7 @@ static const ber_sequence_t GPRSMSClass_sequence[] = {
 static int
 dissect_gsm_map_GPRSMSClass(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GPRSMSClass_sequence, hf_index, ett_gsm_map_GPRSMSClass);
+                                   GPRSMSClass_sequence, hf_index, ett_gsm_map_GPRSMSClass);
 
   return offset;
 }
@@ -8422,6 +9254,7 @@ static int dissect_gprs_MS_Class_impl(packet_info *pinfo, proto_tree *tree, tvbu
 }
 
 
+
 static int
 dissect_gsm_map_RouteingNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_TBCD_STRING(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -8454,6 +9287,7 @@ static int dissect_numberPortabilityStatus_impl(packet_info *pinfo, proto_tree *
   return dissect_gsm_map_NumberPortabilityStatus(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_numberPortabilityStatus);
 }
 
+
 static const ber_sequence_t MNPInfoRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_routeingNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl },
@@ -8466,7 +9300,7 @@ static const ber_sequence_t MNPInfoRes_sequence[] = {
 static int
 dissect_gsm_map_MNPInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MNPInfoRes_sequence, hf_index, ett_gsm_map_MNPInfoRes);
+                                   MNPInfoRes_sequence, hf_index, ett_gsm_map_MNPInfoRes);
 
   return offset;
 }
@@ -8474,6 +9308,7 @@ static int dissect_mnpInfoRes_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_MNPInfoRes(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mnpInfoRes);
 }
 
+
 static const ber_sequence_t SubscriberInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationInformation_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_subscriberState },
@@ -8490,7 +9325,7 @@ static const ber_sequence_t SubscriberInfo_sequence[] = {
 static int
 dissect_gsm_map_SubscriberInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SubscriberInfo_sequence, hf_index, ett_gsm_map_SubscriberInfo);
+                                   SubscriberInfo_sequence, hf_index, ett_gsm_map_SubscriberInfo);
 
   return offset;
 }
@@ -8501,6 +9336,7 @@ static int dissect_subscriberInfo_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_SubscriberInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_subscriberInfo);
 }
 
+
 static const ber_sequence_t CCBS_Indicators_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Possible_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_keepCCBS_CallIndicator_impl },
@@ -8511,7 +9347,7 @@ static const ber_sequence_t CCBS_Indicators_sequence[] = {
 static int
 dissect_gsm_map_CCBS_Indicators(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CCBS_Indicators_sequence, hf_index, ett_gsm_map_CCBS_Indicators);
+                                   CCBS_Indicators_sequence, hf_index, ett_gsm_map_CCBS_Indicators);
 
   return offset;
 }
@@ -8519,6 +9355,7 @@ static int dissect_ccbs_Indicators_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_CCBS_Indicators(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Indicators);
 }
 
+
 static const asn_namedbit AllowedServices_bits[] = {
   {  0, &hf_gsm_map_AllowedServices_firstServiceAllowed, -1, -1, "firstServiceAllowed", NULL },
   {  1, &hf_gsm_map_AllowedServices_secondServiceAllowed, -1, -1, "secondServiceAllowed", NULL },
@@ -8528,8 +9365,8 @@ static const asn_namedbit AllowedServices_bits[] = {
 static int
 dissect_gsm_map_AllowedServices(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 AllowedServices_bits, hf_index, ett_gsm_map_AllowedServices,
-                                 NULL);
+                                    AllowedServices_bits, hf_index, ett_gsm_map_AllowedServices,
+                                    NULL);
 
   return offset;
 }
@@ -8560,9 +9397,10 @@ static int dissect_unavailabilityCause_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_UnavailabilityCause(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_unavailabilityCause);
 }
 
+
 static const ber_sequence_t SendRoutingInfoRes_sequence[] = {
   { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_imsi_impl },
-  { -1/*choice*/ , -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extendedRoutingInfo },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extendedRoutingInfo },
   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cug_CheckInfo_impl },
   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_cugSubscriptionFlag_impl },
   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subscriberInfo_impl },
@@ -8590,7 +9428,7 @@ static const ber_sequence_t SendRoutingInfoRes_sequence[] = {
 static int
 dissect_gsm_map_SendRoutingInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendRoutingInfoRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoRes);
+                                   SendRoutingInfoRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoRes);
 
   return offset;
 }
@@ -8610,8 +9448,9 @@ static const ber_choice_t SubscriberId_choice[] = {
 
 static int
 dissect_gsm_map_SubscriberId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SubscriberId_choice, hf_index, ett_gsm_map_SubscriberId, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SubscriberId_choice, hf_index, ett_gsm_map_SubscriberId,
+                                 NULL);
 
   return offset;
 }
@@ -8631,8 +9470,9 @@ static const ber_choice_t SubscriberIdentity_choice[] = {
 
 static int
 dissect_gsm_map_SubscriberIdentity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SubscriberIdentity_choice, hf_index, ett_gsm_map_SubscriberIdentity, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SubscriberIdentity_choice, hf_index, ett_gsm_map_SubscriberIdentity,
+                                 NULL);
 
   return offset;
 }
@@ -8707,6 +9547,7 @@ dissect_gsm_map_Gmsc_Address(gboolean implicit_tag _U_, tvbuff_t *tvb, int offse
   return offset;
 }
 
+
 static const ber_sequence_t ProvideRoamingNumberArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msc_Number_impl },
@@ -8734,11 +9575,12 @@ static const ber_sequence_t ProvideRoamingNumberArg_sequence[] = {
 static int
 dissect_gsm_map_ProvideRoamingNumberArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideRoamingNumberArg_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberArg);
+                                   ProvideRoamingNumberArg_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ProvideRoamingNumberRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_roamingNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -8749,7 +9591,7 @@ static const ber_sequence_t ProvideRoamingNumberRes_sequence[] = {
 static int
 dissect_gsm_map_ProvideRoamingNumberRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideRoamingNumberRes_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberRes);
+                                   ProvideRoamingNumberRes_sequence, hf_index, ett_gsm_map_ProvideRoamingNumberRes);
 
   return offset;
 }
@@ -8780,6 +9622,7 @@ static int dissect_uui_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
   return dissect_gsm_map_UUI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uui);
 }
 
+
 static const ber_sequence_t UU_Data_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uuIndicator_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uui_impl },
@@ -8788,10 +9631,10 @@ static const ber_sequence_t UU_Data_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_UU_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UU_Data_sequence, hf_index, ett_gsm_map_UU_Data);
+                                   UU_Data_sequence, hf_index, ett_gsm_map_UU_Data);
 
   return offset;
 }
@@ -8799,6 +9642,7 @@ static int dissect_uu_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *
   return dissect_gsm_map_UU_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_uu_Data);
 }
 
+
 static const ber_sequence_t ResumeCallHandlingArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callReferenceNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_ext_basicServiceGroup },
@@ -8820,11 +9664,12 @@ static const ber_sequence_t ResumeCallHandlingArg_sequence[] = {
 static int
 dissect_gsm_map_ResumeCallHandlingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ResumeCallHandlingArg_sequence, hf_index, ett_gsm_map_ResumeCallHandlingArg);
+                                   ResumeCallHandlingArg_sequence, hf_index, ett_gsm_map_ResumeCallHandlingArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ResumeCallHandlingRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -8833,7 +9678,7 @@ static const ber_sequence_t ResumeCallHandlingRes_sequence[] = {
 static int
 dissect_gsm_map_ResumeCallHandlingRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ResumeCallHandlingRes_sequence, hf_index, ett_gsm_map_ResumeCallHandlingRes);
+                                   ResumeCallHandlingRes_sequence, hf_index, ett_gsm_map_ResumeCallHandlingRes);
 
   return offset;
 }
@@ -8851,6 +9696,7 @@ static int dissect_call_Direction_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_CallDirection(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_call_Direction);
 }
 
+
 static const ber_sequence_t ProvideSIWFSNumberArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_gsm_BearerCapability_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_isdn_BearerCapability_impl },
@@ -8866,11 +9712,12 @@ static const ber_sequence_t ProvideSIWFSNumberArg_sequence[] = {
 static int
 dissect_gsm_map_ProvideSIWFSNumberArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSIWFSNumberArg_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberArg);
+                                   ProvideSIWFSNumberArg_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ProvideSIWFSNumberRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sIWFSNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -8880,11 +9727,12 @@ static const ber_sequence_t ProvideSIWFSNumberRes_sequence[] = {
 static int
 dissect_gsm_map_ProvideSIWFSNumberRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSIWFSNumberRes_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberRes);
+                                   ProvideSIWFSNumberRes_sequence, hf_index, ett_gsm_map_ProvideSIWFSNumberRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t SIWFSSignallingModifyArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelType_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_chosenChannel_impl },
@@ -8895,11 +9743,12 @@ static const ber_sequence_t SIWFSSignallingModifyArg_sequence[] = {
 static int
 dissect_gsm_map_SIWFSSignallingModifyArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SIWFSSignallingModifyArg_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyArg);
+                                   SIWFSSignallingModifyArg_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SIWFSSignallingModifyRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_channelType_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -8909,7 +9758,7 @@ static const ber_sequence_t SIWFSSignallingModifyRes_sequence[] = {
 static int
 dissect_gsm_map_SIWFSSignallingModifyRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SIWFSSignallingModifyRes_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyRes);
+                                   SIWFSSignallingModifyRes_sequence, hf_index, ett_gsm_map_SIWFSSignallingModifyRes);
 
   return offset;
 }
@@ -8949,6 +9798,7 @@ static int dissect_ccbs_Monitoring(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_ReportingState(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Monitoring);
 }
 
+
 static const ber_sequence_t SetReportingStateArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_imsi },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_lmsi },
@@ -8960,7 +9810,7 @@ static const ber_sequence_t SetReportingStateArg_sequence[] = {
 static int
 dissect_gsm_map_SetReportingStateArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SetReportingStateArg_sequence, hf_index, ett_gsm_map_SetReportingStateArg);
+                                   SetReportingStateArg_sequence, hf_index, ett_gsm_map_SetReportingStateArg);
 
   return offset;
 }
@@ -8985,6 +9835,7 @@ static int dissect_ccbs_SubscriberStatus_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_CCBS_SubscriberStatus(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_SubscriberStatus);
 }
 
+
 static const ber_sequence_t SetReportingStateRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_SubscriberStatus_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -8994,11 +9845,12 @@ static const ber_sequence_t SetReportingStateRes_sequence[] = {
 static int
 dissect_gsm_map_SetReportingStateRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SetReportingStateRes_sequence, hf_index, ett_gsm_map_SetReportingStateRes);
+                                   SetReportingStateRes_sequence, hf_index, ett_gsm_map_SetReportingStateRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t EventReportData_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_SubscriberStatus_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -9008,7 +9860,7 @@ static const ber_sequence_t EventReportData_sequence[] = {
 static int
 dissect_gsm_map_EventReportData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                EventReportData_sequence, hf_index, ett_gsm_map_EventReportData);
+                                   EventReportData_sequence, hf_index, ett_gsm_map_EventReportData);
 
   return offset;
 }
@@ -9055,6 +9907,7 @@ static int dissect_callOutcome_impl(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_CallOutcome(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callOutcome);
 }
 
+
 static const ber_sequence_t CallReportData_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_monitoringMode_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callOutcome_impl },
@@ -9065,7 +9918,7 @@ static const ber_sequence_t CallReportData_sequence[] = {
 static int
 dissect_gsm_map_CallReportData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CallReportData_sequence, hf_index, ett_gsm_map_CallReportData);
+                                   CallReportData_sequence, hf_index, ett_gsm_map_CallReportData);
 
   return offset;
 }
@@ -9073,6 +9926,7 @@ static int dissect_callReportdata_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_CallReportData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callReportdata);
 }
 
+
 static const ber_sequence_t StatusReportArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_eventReportData_impl },
@@ -9084,11 +9938,12 @@ static const ber_sequence_t StatusReportArg_sequence[] = {
 static int
 dissect_gsm_map_StatusReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                StatusReportArg_sequence, hf_index, ett_gsm_map_StatusReportArg);
+                                   StatusReportArg_sequence, hf_index, ett_gsm_map_StatusReportArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t StatusReportRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -9097,7 +9952,7 @@ static const ber_sequence_t StatusReportRes_sequence[] = {
 static int
 dissect_gsm_map_StatusReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                StatusReportRes_sequence, hf_index, ett_gsm_map_StatusReportRes);
+                                   StatusReportRes_sequence, hf_index, ett_gsm_map_StatusReportRes);
 
   return offset;
 }
@@ -9125,6 +9980,7 @@ static int dissect_ruf_Outcome_impl(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_Ruf_Outcome(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ruf_Outcome);
 }
 
+
 static const ber_sequence_t IST_AlertArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -9134,7 +9990,7 @@ static const ber_sequence_t IST_AlertArg_sequence[] = {
 static int
 dissect_gsm_map_IST_AlertArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IST_AlertArg_sequence, hf_index, ett_gsm_map_IST_AlertArg);
+                                   IST_AlertArg_sequence, hf_index, ett_gsm_map_IST_AlertArg);
 
   return offset;
 }
@@ -9158,6 +10014,7 @@ static int dissect_callTerminationIndicator_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_CallTerminationIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callTerminationIndicator);
 }
 
+
 static const ber_sequence_t IST_AlertRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_istAlertTimer_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_istInformationWithdraw_impl },
@@ -9169,11 +10026,12 @@ static const ber_sequence_t IST_AlertRes_sequence[] = {
 static int
 dissect_gsm_map_IST_AlertRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IST_AlertRes_sequence, hf_index, ett_gsm_map_IST_AlertRes);
+                                   IST_AlertRes_sequence, hf_index, ett_gsm_map_IST_AlertRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t IST_CommandArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -9183,11 +10041,12 @@ static const ber_sequence_t IST_CommandArg_sequence[] = {
 static int
 dissect_gsm_map_IST_CommandArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IST_CommandArg_sequence, hf_index, ett_gsm_map_IST_CommandArg);
+                                   IST_CommandArg_sequence, hf_index, ett_gsm_map_IST_CommandArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t IST_CommandRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -9196,13 +10055,14 @@ static const ber_sequence_t IST_CommandRes_sequence[] = {
 static int
 dissect_gsm_map_IST_CommandRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IST_CommandRes_sequence, hf_index, ett_gsm_map_IST_CommandRes);
+                                   IST_CommandRes_sequence, hf_index, ett_gsm_map_IST_CommandRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t ReleaseResourcesArg_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msrn },
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_msrn },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
@@ -9210,11 +10070,12 @@ static const ber_sequence_t ReleaseResourcesArg_sequence[] = {
 static int
 dissect_gsm_map_ReleaseResourcesArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReleaseResourcesArg_sequence, hf_index, ett_gsm_map_ReleaseResourcesArg);
+                                   ReleaseResourcesArg_sequence, hf_index, ett_gsm_map_ReleaseResourcesArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ReleaseResourcesRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -9223,7 +10084,7 @@ static const ber_sequence_t ReleaseResourcesRes_sequence[] = {
 static int
 dissect_gsm_map_ReleaseResourcesRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReleaseResourcesRes_sequence, hf_index, ett_gsm_map_ReleaseResourcesRes);
+                                   ReleaseResourcesRes_sequence, hf_index, ett_gsm_map_ReleaseResourcesRes);
 
   return offset;
 }
@@ -9241,6 +10102,7 @@ static int dissect_ccbs_Index_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_CCBS_Index(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Index);
 }
 
+
 static const ber_sequence_t CCBS_Feature_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_b_subscriberNumber_impl },
@@ -9249,10 +10111,10 @@ static const ber_sequence_t CCBS_Feature_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_CCBS_Feature(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CCBS_Feature_sequence, hf_index, ett_gsm_map_CCBS_Feature);
+                                   CCBS_Feature_sequence, hf_index, ett_gsm_map_CCBS_Feature);
 
   return offset;
 }
@@ -9266,6 +10128,7 @@ static int dissect_CCBS_FeatureList_item(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_CCBS_Feature(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_CCBS_FeatureList_item);
 }
 
+
 static const ber_sequence_t RemoteUserFreeArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_callInfo_impl },
@@ -9280,11 +10143,12 @@ static const ber_sequence_t RemoteUserFreeArg_sequence[] = {
 static int
 dissect_gsm_map_RemoteUserFreeArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RemoteUserFreeArg_sequence, hf_index, ett_gsm_map_RemoteUserFreeArg);
+                                   RemoteUserFreeArg_sequence, hf_index, ett_gsm_map_RemoteUserFreeArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t RemoteUserFreeRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ruf_Outcome_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -9294,7 +10158,7 @@ static const ber_sequence_t RemoteUserFreeRes_sequence[] = {
 static int
 dissect_gsm_map_RemoteUserFreeRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RemoteUserFreeRes_sequence, hf_index, ett_gsm_map_RemoteUserFreeRes);
+                                   RemoteUserFreeRes_sequence, hf_index, ett_gsm_map_RemoteUserFreeRes);
 
   return offset;
 }
@@ -9309,10 +10173,11 @@ dissect_gsm_map_TranslatedB_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int
   return offset;
 }
 
+
 static const ber_sequence_t SS_Data_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ss_Code },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_SubscriptionOption },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_ext_basicServiceGroupList },
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_defaultPriority },
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_nbrUser_impl },
@@ -9322,7 +10187,7 @@ static const ber_sequence_t SS_Data_sequence[] = {
 static int
 dissect_gsm_map_SS_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SS_Data_sequence, hf_index, ett_gsm_map_SS_Data);
+                                   SS_Data_sequence, hf_index, ett_gsm_map_SS_Data);
 
   return offset;
 }
@@ -9330,9 +10195,10 @@ static int dissect_ss_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *
   return dissect_gsm_map_SS_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Data);
 }
 
+
 static const ber_sequence_t RegisterSS_Arg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToNumber_addr_impl },
   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_forwardedToSubaddress_impl },
   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_noReplyConditionTime_impl },
@@ -9342,16 +10208,16 @@ static const ber_sequence_t RegisterSS_Arg_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_RegisterSS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RegisterSS_Arg_sequence, hf_index, ett_gsm_map_RegisterSS_Arg);
+                                   RegisterSS_Arg_sequence, hf_index, ett_gsm_map_RegisterSS_Arg);
 
   return offset;
 }
 
 
-static const value_string gsm_map_SS_Info_vals[] = {
+const value_string gsm_map_SS_Info_vals[] = {
   {   0, "forwardingInfo" },
   {   1, "callBarringInfo" },
   {   3, "ss-Data" },
@@ -9365,10 +10231,11 @@ static const ber_choice_t SS_Info_choice[] = {
   { 0, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_SS_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SS_Info_choice, hf_index, ett_gsm_map_SS_Info, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SS_Info_choice, hf_index, ett_gsm_map_SS_Info,
+                                 NULL);
 
   return offset;
 }
@@ -9399,6 +10266,7 @@ static int dissect_ccbs_FeatureList_impl(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_CCBS_FeatureList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_FeatureList);
 }
 
+
 static const ber_sequence_t GenericServiceInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Status },
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cliRestrictionOption },
@@ -9414,7 +10282,7 @@ static const ber_sequence_t GenericServiceInfo_sequence[] = {
 static int
 dissect_gsm_map_GenericServiceInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                GenericServiceInfo_sequence, hf_index, ett_gsm_map_GenericServiceInfo);
+                                   GenericServiceInfo_sequence, hf_index, ett_gsm_map_GenericServiceInfo);
 
   return offset;
 }
@@ -9423,7 +10291,7 @@ static int dissect_genericServiceInfo_impl(packet_info *pinfo, proto_tree *tree,
 }
 
 
-static const value_string gsm_map_InterrogateSS_Res_vals[] = {
+const value_string gsm_map_InterrogateSS_Res_vals[] = {
   {   0, "ss-Status" },
   {   2, "basicServiceGroupList" },
   {   3, "forwardingFeatureList" },
@@ -9439,17 +10307,18 @@ static const ber_choice_t InterrogateSS_Res_choice[] = {
   { 0, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_InterrogateSS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              InterrogateSS_Res_choice, hf_index, ett_gsm_map_InterrogateSS_Res, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 InterrogateSS_Res_choice, hf_index, ett_gsm_map_InterrogateSS_Res,
+                                 NULL);
 
   return offset;
 }
 
 
 
-static int
+int
 dissect_gsm_map_USSD_DataCodingScheme(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -9465,7 +10334,7 @@ static int dissect_dataCodingScheme_impl(packet_info *pinfo, proto_tree *tree, t
 
 
 
-static int
+int
 dissect_gsm_map_USSD_String(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -9476,6 +10345,7 @@ static int dissect_ussd_String(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
   return dissect_gsm_map_USSD_String(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ussd_String);
 }
 
+
 static const ber_sequence_t Ussd_Arg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_DataCodingScheme },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_String },
@@ -9484,24 +10354,25 @@ static const ber_sequence_t Ussd_Arg_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_Ussd_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ussd_Arg_sequence, hf_index, ett_gsm_map_Ussd_Arg);
+                                   Ussd_Arg_sequence, hf_index, ett_gsm_map_Ussd_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t Ussd_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_DataCodingScheme },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ussd_String },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_Ussd_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ussd_Res_sequence, hf_index, ett_gsm_map_Ussd_Res);
+                                   Ussd_Res_sequence, hf_index, ett_gsm_map_Ussd_Res);
 
   return offset;
 }
@@ -9568,6 +10439,7 @@ static int dissect_accessType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
   return dissect_gsm_map_AccessType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_accessType);
 }
 
+
 static const ber_sequence_t AuthenticationFailureReportArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_failureCause },
@@ -9583,11 +10455,12 @@ static const ber_sequence_t AuthenticationFailureReportArg_sequence[] = {
 static int
 dissect_gsm_map_AuthenticationFailureReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AuthenticationFailureReportArg_sequence, hf_index, ett_gsm_map_AuthenticationFailureReportArg);
+                                   AuthenticationFailureReportArg_sequence, hf_index, ett_gsm_map_AuthenticationFailureReportArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t AuthenticationFailureReportRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -9596,23 +10469,24 @@ static const ber_sequence_t AuthenticationFailureReportRes_sequence[] = {
 static int
 dissect_gsm_map_AuthenticationFailureReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AuthenticationFailureReportRes_sequence, hf_index, ett_gsm_map_AuthenticationFailureReportRes);
+                                   AuthenticationFailureReportRes_sequence, hf_index, ett_gsm_map_AuthenticationFailureReportRes);
 
   return offset;
 }
 
 
-static int
+
+int
 dissect_gsm_map_NewPassword(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
-                                         pinfo, tree, tvb, offset, hf_index,
-                                         NULL);
+                                            pinfo, tree, tvb, offset, hf_index,
+                                            NULL);
 
   return offset;
 }
 
 
-static const value_string gsm_map_GetPasswordArg_vals[] = {
+const value_string gsm_map_GetPasswordArg_vals[] = {
   {   0, "enterPW" },
   {   1, "enterNewPW" },
   {   2, "enterNewPW-Again" },
@@ -9620,7 +10494,7 @@ static const value_string gsm_map_GetPasswordArg_vals[] = {
 };
 
 
-static int
+int
 dissect_gsm_map_GetPasswordArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
@@ -9629,15 +10503,17 @@ dissect_gsm_map_GetPasswordArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
 }
 
 
-static int
+
+int
 dissect_gsm_map_CurrentPassword(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
-                                         pinfo, tree, tvb, offset, hf_index,
-                                         NULL);
+                                            pinfo, tree, tvb, offset, hf_index,
+                                            NULL);
 
   return offset;
 }
 
+
 static const asn_namedbit ServiceIndicator_bits[] = {
   {  0, &hf_gsm_map_ServiceIndicator_clir_invoked, -1, -1, "clir-invoked", NULL },
   {  1, &hf_gsm_map_ServiceIndicator_camel_invoked, -1, -1, "camel-invoked", NULL },
@@ -9647,8 +10523,8 @@ static const asn_namedbit ServiceIndicator_bits[] = {
 static int
 dissect_gsm_map_ServiceIndicator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 ServiceIndicator_bits, hf_index, ett_gsm_map_ServiceIndicator,
-                                 NULL);
+                                    ServiceIndicator_bits, hf_index, ett_gsm_map_ServiceIndicator,
+                                    NULL);
 
   return offset;
 }
@@ -9656,6 +10532,7 @@ static int dissect_serviceIndicator(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_ServiceIndicator(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_serviceIndicator);
 }
 
+
 static const ber_sequence_t CCBS_Data_sequence[] = {
   { BER_CLASS_CON, 0, 0, dissect_ccbs_Feature },
   { BER_CLASS_CON, 1, 0, dissect_translatedB_Number },
@@ -9668,7 +10545,7 @@ static const ber_sequence_t CCBS_Data_sequence[] = {
 static int
 dissect_gsm_map_CCBS_Data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CCBS_Data_sequence, hf_index, ett_gsm_map_CCBS_Data);
+                                   CCBS_Data_sequence, hf_index, ett_gsm_map_CCBS_Data);
 
   return offset;
 }
@@ -9676,6 +10553,7 @@ static int dissect_ccbs_Data_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_CCBS_Data(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ccbs_Data);
 }
 
+
 static const ber_sequence_t RegisterCC_EntryArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Data_impl },
@@ -9685,48 +10563,51 @@ static const ber_sequence_t RegisterCC_EntryArg_sequence[] = {
 static int
 dissect_gsm_map_RegisterCC_EntryArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RegisterCC_EntryArg_sequence, hf_index, ett_gsm_map_RegisterCC_EntryArg);
+                                   RegisterCC_EntryArg_sequence, hf_index, ett_gsm_map_RegisterCC_EntryArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t RegisterCC_EntryRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Feature_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_RegisterCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RegisterCC_EntryRes_sequence, hf_index, ett_gsm_map_RegisterCC_EntryRes);
+                                   RegisterCC_EntryRes_sequence, hf_index, ett_gsm_map_RegisterCC_EntryRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t EraseCC_EntryArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ccbs_Index_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_EraseCC_EntryArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                EraseCC_EntryArg_sequence, hf_index, ett_gsm_map_EraseCC_EntryArg);
+                                   EraseCC_EntryArg_sequence, hf_index, ett_gsm_map_EraseCC_EntryArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t EraseCC_EntryRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_EraseCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                EraseCC_EntryRes_sequence, hf_index, ett_gsm_map_EraseCC_EntryRes);
+                                   EraseCC_EntryRes_sequence, hf_index, ett_gsm_map_EraseCC_EntryRes);
 
   return offset;
 }
@@ -9735,12 +10616,15 @@ dissect_gsm_map_EraseCC_EntryRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int o
 
 static int
 dissect_gsm_map_ServiceCentreAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 193 "gsmmap.cnf"
 
  tvbuff_t      *parameter_tvb;
  char          *digit_str;
 
- offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &parameter_tvb);
+   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
  if (!parameter_tvb)
        return offset;
 
@@ -9751,11 +10635,10 @@ dissect_gsm_map_ServiceCentreAddress(gboolean implicit_tag _U_, tvbuff_t *tvb, i
  digit_str = unpack_digits(parameter_tvb, 1);
 
  proto_tree_add_string(tree, hf_gsm_map_servicecentreaddress_digits, parameter_tvb, 1, -1, digit_str);
- if (digit_str)
-       g_free(digit_str);
  pinfo->p2p_dir = P2P_DIR_SENT;
 
 
+
   return offset;
 }
 static int dissect_serviceCentreAddress(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
@@ -9797,6 +10680,7 @@ static int dissect_sm_RP_SMEA_impl(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_OCTET_STRING_SIZE_1_12(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_SMEA);
 }
 
+
 static const ber_sequence_t RoutingInfoForSMArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_msisdn_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_sm_RP_PRI_impl },
@@ -9811,7 +10695,7 @@ static const ber_sequence_t RoutingInfoForSMArg_sequence[] = {
 static int
 dissect_gsm_map_RoutingInfoForSMArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RoutingInfoForSMArg_sequence, hf_index, ett_gsm_map_RoutingInfoForSMArg);
+                                   RoutingInfoForSMArg_sequence, hf_index, ett_gsm_map_RoutingInfoForSMArg);
 
   return offset;
 }
@@ -9831,8 +10715,9 @@ static const ber_choice_t Additional_Number_choice[] = {
 
 static int
 dissect_gsm_map_Additional_Number(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Additional_Number_choice, hf_index, ett_gsm_map_Additional_Number, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Additional_Number_choice, hf_index, ett_gsm_map_Additional_Number,
+                                 NULL);
 
   return offset;
 }
@@ -9840,6 +10725,7 @@ static int dissect_additional_Number_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_Additional_Number(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_additional_Number);
 }
 
+
 static const ber_sequence_t LocationInfoWithLMSI_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_networkNode_Number_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_lmsi },
@@ -9852,7 +10738,7 @@ static const ber_sequence_t LocationInfoWithLMSI_sequence[] = {
 static int
 dissect_gsm_map_LocationInfoWithLMSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LocationInfoWithLMSI_sequence, hf_index, ett_gsm_map_LocationInfoWithLMSI);
+                                   LocationInfoWithLMSI_sequence, hf_index, ett_gsm_map_LocationInfoWithLMSI);
 
   return offset;
 }
@@ -9860,6 +10746,7 @@ static int dissect_locationInfoWithLMSI_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_LocationInfoWithLMSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationInfoWithLMSI);
 }
 
+
 static const ber_sequence_t RoutingInfoForSM_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_locationInfoWithLMSI_impl },
@@ -9870,7 +10757,7 @@ static const ber_sequence_t RoutingInfoForSM_Res_sequence[] = {
 static int
 dissect_gsm_map_RoutingInfoForSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RoutingInfoForSM_Res_sequence, hf_index, ett_gsm_map_RoutingInfoForSM_Res);
+                                   RoutingInfoForSM_Res_sequence, hf_index, ett_gsm_map_RoutingInfoForSM_Res);
 
   return offset;
 }
@@ -9894,8 +10781,9 @@ static const ber_choice_t Sm_RP_DA_choice[] = {
 
 static int
 dissect_gsm_map_Sm_RP_DA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Sm_RP_DA_choice, hf_index, ett_gsm_map_Sm_RP_DA, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Sm_RP_DA_choice, hf_index, ett_gsm_map_Sm_RP_DA,
+                                 NULL);
 
   return offset;
 }
@@ -9920,8 +10808,9 @@ static const ber_choice_t Sm_RP_OA_choice[] = {
 
 static int
 dissect_gsm_map_Sm_RP_OA(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Sm_RP_OA_choice, hf_index, ett_gsm_map_Sm_RP_OA, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Sm_RP_OA_choice, hf_index, ett_gsm_map_Sm_RP_OA,
+                                 NULL);
 
   return offset;
 }
@@ -9933,11 +10822,14 @@ static int dissect_sm_RP_OA(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb,
 
 static int
 dissect_gsm_map_Sm_RP_UI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+#line 152 "gsmmap.cnf"
 
   tvbuff_t     *tpdu_tvb;
        
-  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                    &tpdu_tvb);
+    offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                       &tpdu_tvb);
+
+
     /*
      * dissect the embedded TPDU message
      */
@@ -9946,15 +10838,17 @@ dissect_gsm_map_Sm_RP_UI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, p
 
     dissector_try_port(sms_dissector_table, 0, tpdu_tvb, pinfo, top_tree);
 
+
   return offset;
 }
 static int dissect_sm_RP_UI(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_Sm_RP_UI(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_RP_UI);
 }
 
+
 static const ber_sequence_t Mo_forwardSM_Arg_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi },
@@ -9964,11 +10858,12 @@ static const ber_sequence_t Mo_forwardSM_Arg_sequence[] = {
 static int
 dissect_gsm_map_Mo_forwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Mo_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Arg);
+                                   Mo_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t Mo_forwardSM_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -9978,14 +10873,15 @@ static const ber_sequence_t Mo_forwardSM_Res_sequence[] = {
 static int
 dissect_gsm_map_Mo_forwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Mo_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Res);
+                                   Mo_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mo_forwardSM_Res);
 
   return offset;
 }
 
+
 static const ber_sequence_t Mt_forwardSM_Arg_sequence[] = {
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_DA },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_sm_RP_OA },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_moreMessagesToSend },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -9995,11 +10891,12 @@ static const ber_sequence_t Mt_forwardSM_Arg_sequence[] = {
 static int
 dissect_gsm_map_Mt_forwardSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Mt_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Arg);
+                                   Mt_forwardSM_Arg_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t Mt_forwardSM_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_sm_RP_UI },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -10009,12 +10906,13 @@ static const ber_sequence_t Mt_forwardSM_Res_sequence[] = {
 static int
 dissect_gsm_map_Mt_forwardSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Mt_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Res);
+                                   Mt_forwardSM_Res_sequence, hf_index, ett_gsm_map_Mt_forwardSM_Res);
 
   return offset;
 }
 
 
+
 static int
 dissect_gsm_map_StoredMSISDN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_ISDN_AddressString(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -10070,6 +10968,7 @@ static int dissect_mobileNotReachableReason_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_AbsentSubscriberDiagnosticSM(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_mobileNotReachableReason);
 }
 
+
 static const ber_sequence_t ReportSM_DeliveryStatusArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msisdn },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_serviceCentreAddress },
@@ -10086,11 +10985,12 @@ static const ber_sequence_t ReportSM_DeliveryStatusArg_sequence[] = {
 static int
 dissect_gsm_map_ReportSM_DeliveryStatusArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReportSM_DeliveryStatusArg_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusArg);
+                                   ReportSM_DeliveryStatusArg_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ReportSM_DeliveryStatusRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_storedMSISDN },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -10100,11 +11000,12 @@ static const ber_sequence_t ReportSM_DeliveryStatusRes_sequence[] = {
 static int
 dissect_gsm_map_ReportSM_DeliveryStatusRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReportSM_DeliveryStatusRes_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusRes);
+                                   ReportSM_DeliveryStatusRes_sequence, hf_index, ett_gsm_map_ReportSM_DeliveryStatusRes);
 
   return offset;
 }
 
+
 static const asn_namedbit T_mw_Status_bits[] = {
   {  0, &hf_gsm_map_T_mw_Status_scAddressNotIncluded, -1, -1, "scAddressNotIncluded", NULL },
   {  1, &hf_gsm_map_T_mw_Status_mnrfSet, -1, -1, "mnrfSet", NULL },
@@ -10116,8 +11017,8 @@ static const asn_namedbit T_mw_Status_bits[] = {
 static int
 dissect_gsm_map_T_mw_Status(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 T_mw_Status_bits, hf_index, ett_gsm_map_T_mw_Status,
-                                 NULL);
+                                    T_mw_Status_bits, hf_index, ett_gsm_map_T_mw_Status,
+                                    NULL);
 
   return offset;
 }
@@ -10125,6 +11026,7 @@ static int dissect_mw_Status(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb
   return dissect_gsm_map_T_mw_Status(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_mw_Status);
 }
 
+
 static const ber_sequence_t InformServiceCentreArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_storedMSISDN },
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_mw_Status },
@@ -10135,11 +11037,12 @@ static const ber_sequence_t InformServiceCentreArg_sequence[] = {
 static int
 dissect_gsm_map_InformServiceCentreArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                InformServiceCentreArg_sequence, hf_index, ett_gsm_map_InformServiceCentreArg);
+                                   InformServiceCentreArg_sequence, hf_index, ett_gsm_map_InformServiceCentreArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t AlertServiceCentreArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msisdn },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_serviceCentreAddress },
@@ -10149,7 +11052,7 @@ static const ber_sequence_t AlertServiceCentreArg_sequence[] = {
 static int
 dissect_gsm_map_AlertServiceCentreArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AlertServiceCentreArg_sequence, hf_index, ett_gsm_map_AlertServiceCentreArg);
+                                   AlertServiceCentreArg_sequence, hf_index, ett_gsm_map_AlertServiceCentreArg);
 
   return offset;
 }
@@ -10173,6 +11076,7 @@ static int dissect_alertReason(packet_info *pinfo, proto_tree *tree, tvbuff_t *t
   return dissect_gsm_map_T_alertReason(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_alertReason);
 }
 
+
 static const ber_sequence_t ReadyForSM_Arg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_alertReason },
@@ -10184,11 +11088,12 @@ static const ber_sequence_t ReadyForSM_Arg_sequence[] = {
 static int
 dissect_gsm_map_ReadyForSM_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReadyForSM_Arg_sequence, hf_index, ett_gsm_map_ReadyForSM_Arg);
+                                   ReadyForSM_Arg_sequence, hf_index, ett_gsm_map_ReadyForSM_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ReadyForSM_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -10197,7 +11102,7 @@ static const ber_sequence_t ReadyForSM_Res_sequence[] = {
 static int
 dissect_gsm_map_ReadyForSM_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReadyForSM_Res_sequence, hf_index, ett_gsm_map_ReadyForSM_Res);
+                                   ReadyForSM_Res_sequence, hf_index, ett_gsm_map_ReadyForSM_Res);
 
   return offset;
 }
@@ -10221,6 +11126,7 @@ static int dissect_requestedDomain_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_T_requestedDomain(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestedDomain);
 }
 
+
 static const ber_sequence_t RequestedInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_locationInformation_flg_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_subscriberState_flg_impl },
@@ -10236,7 +11142,7 @@ static const ber_sequence_t RequestedInfo_sequence[] = {
 static int
 dissect_gsm_map_RequestedInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RequestedInfo_sequence, hf_index, ett_gsm_map_RequestedInfo);
+                                   RequestedInfo_sequence, hf_index, ett_gsm_map_RequestedInfo);
 
   return offset;
 }
@@ -10244,6 +11150,7 @@ static int dissect_requestedInfo_impl(packet_info *pinfo, proto_tree *tree, tvbu
   return dissect_gsm_map_RequestedInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestedInfo);
 }
 
+
 static const ber_sequence_t ProvideSubscriberInfoArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl },
@@ -10255,11 +11162,12 @@ static const ber_sequence_t ProvideSubscriberInfoArg_sequence[] = {
 static int
 dissect_gsm_map_ProvideSubscriberInfoArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSubscriberInfoArg_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoArg);
+                                   ProvideSubscriberInfoArg_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ProvideSubscriberInfoRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subscriberInfo },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -10269,11 +11177,12 @@ static const ber_sequence_t ProvideSubscriberInfoRes_sequence[] = {
 static int
 dissect_gsm_map_ProvideSubscriberInfoRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSubscriberInfoRes_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoRes);
+                                   ProvideSubscriberInfoRes_sequence, hf_index, ett_gsm_map_ProvideSubscriberInfoRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t AnyTimeInterrogationArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_subscriberIdentity },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_requestedInfo_impl },
@@ -10285,11 +11194,12 @@ static const ber_sequence_t AnyTimeInterrogationArg_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeInterrogationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeInterrogationArg_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationArg);
+                                   AnyTimeInterrogationArg_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t AnyTimeInterrogationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subscriberInfo },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -10299,22 +11209,23 @@ static const ber_sequence_t AnyTimeInterrogationRes_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeInterrogationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeInterrogationRes_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationRes);
+                                   AnyTimeInterrogationRes_sequence, hf_index, ett_gsm_map_AnyTimeInterrogationRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t SS_ForBS_Code_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ss_Code },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_longFTN_Supported_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_SS_ForBS_Code(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SS_ForBS_Code_sequence, hf_index, ett_gsm_map_SS_ForBS_Code);
+                                   SS_ForBS_Code_sequence, hf_index, ett_gsm_map_SS_ForBS_Code);
 
   return offset;
 }
@@ -10373,6 +11284,7 @@ static int dissect_additionalRequestedCAMEL_SubscriptionInfo(packet_info *pinfo,
   return dissect_gsm_map_AdditionalRequestedCAMEL_SubscriptionInfo(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_additionalRequestedCAMEL_SubscriptionInfo);
 }
 
+
 static const ber_sequence_t RequestedSubscriptionInfo_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_requestedSS_Info_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_odb_impl },
@@ -10387,7 +11299,7 @@ static const ber_sequence_t RequestedSubscriptionInfo_sequence[] = {
 static int
 dissect_gsm_map_RequestedSubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RequestedSubscriptionInfo_sequence, hf_index, ett_gsm_map_RequestedSubscriptionInfo);
+                                   RequestedSubscriptionInfo_sequence, hf_index, ett_gsm_map_RequestedSubscriptionInfo);
 
   return offset;
 }
@@ -10395,6 +11307,7 @@ static int dissect_requestedSubscriptionInfo_impl(packet_info *pinfo, proto_tree
   return dissect_gsm_map_RequestedSubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestedSubscriptionInfo);
 }
 
+
 static const ber_sequence_t AnyTimeSubscriptionInterrogationArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_subscriberIdentity_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_requestedSubscriptionInfo_impl },
@@ -10407,11 +11320,12 @@ static const ber_sequence_t AnyTimeSubscriptionInterrogationArg_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeSubscriptionInterrogationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeSubscriptionInterrogationArg_sequence, hf_index, ett_gsm_map_AnyTimeSubscriptionInterrogationArg);
+                                   AnyTimeSubscriptionInterrogationArg_sequence, hf_index, ett_gsm_map_AnyTimeSubscriptionInterrogationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t CallForwardingData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ext_forwardingFeatureList },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_notificationToCSE },
@@ -10422,7 +11336,7 @@ static const ber_sequence_t CallForwardingData_sequence[] = {
 static int
 dissect_gsm_map_CallForwardingData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CallForwardingData_sequence, hf_index, ett_gsm_map_CallForwardingData);
+                                   CallForwardingData_sequence, hf_index, ett_gsm_map_CallForwardingData);
 
   return offset;
 }
@@ -10431,11 +11345,12 @@ static int dissect_callForwardingData_impl(packet_info *pinfo, proto_tree *tree,
 }
 
 
+
 static int
 dissect_gsm_map_Password(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
-                                         pinfo, tree, tvb, offset, hf_index,
-                                         NULL);
+                                            pinfo, tree, tvb, offset, hf_index,
+                                            NULL);
 
   return offset;
 }
@@ -10462,6 +11377,7 @@ static int dissect_wrongPasswordAttemptsCounter_impl(packet_info *pinfo, proto_t
   return dissect_gsm_map_WrongPasswordAttemptsCounter(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_wrongPasswordAttemptsCounter);
 }
 
+
 static const ber_sequence_t CallBarringData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ext_callBarringFeatureList },
   { BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_password },
@@ -10474,7 +11390,7 @@ static const ber_sequence_t CallBarringData_sequence[] = {
 static int
 dissect_gsm_map_CallBarringData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CallBarringData_sequence, hf_index, ett_gsm_map_CallBarringData);
+                                   CallBarringData_sequence, hf_index, ett_gsm_map_CallBarringData);
 
   return offset;
 }
@@ -10482,6 +11398,7 @@ static int dissect_callBarringData_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_CallBarringData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringData);
 }
 
+
 static const ber_sequence_t ODB_Info_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_odb_Data },
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_notificationToCSE },
@@ -10492,7 +11409,7 @@ static const ber_sequence_t ODB_Info_sequence[] = {
 static int
 dissect_gsm_map_ODB_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ODB_Info_sequence, hf_index, ett_gsm_map_ODB_Info);
+                                   ODB_Info_sequence, hf_index, ett_gsm_map_ODB_Info);
 
   return offset;
 }
@@ -10500,6 +11417,7 @@ static int dissect_odb_Info_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_ODB_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_odb_Info);
 }
 
+
 static const ber_sequence_t CAMEL_SubscriptionInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_CSI_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_o_BcsmCamelTDP_CriteriaList_impl },
@@ -10530,7 +11448,7 @@ static const ber_sequence_t CAMEL_SubscriptionInfo_sequence[] = {
 static int
 dissect_gsm_map_CAMEL_SubscriptionInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                CAMEL_SubscriptionInfo_sequence, hf_index, ett_gsm_map_CAMEL_SubscriptionInfo);
+                                   CAMEL_SubscriptionInfo_sequence, hf_index, ett_gsm_map_CAMEL_SubscriptionInfo);
 
   return offset;
 }
@@ -10538,6 +11456,7 @@ static int dissect_camel_SubscriptionInfo_impl(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_CAMEL_SubscriptionInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_camel_SubscriptionInfo);
 }
 
+
 static const ber_sequence_t AnyTimeSubscriptionInterrogationRes_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callForwardingData_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callBarringData_impl },
@@ -10554,11 +11473,12 @@ static const ber_sequence_t AnyTimeSubscriptionInterrogationRes_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeSubscriptionInterrogationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeSubscriptionInterrogationRes_sequence, hf_index, ett_gsm_map_AnyTimeSubscriptionInterrogationRes);
+                                   AnyTimeSubscriptionInterrogationRes_sequence, hf_index, ett_gsm_map_AnyTimeSubscriptionInterrogationRes);
 
   return offset;
 }
 
+
 static const asn_namedbit OfferedCamel4Functionalities_bits[] = {
   {  0, &hf_gsm_map_OfferedCamel4Functionalities_initiateCallAttempt, -1, -1, "initiateCallAttempt", NULL },
   {  1, &hf_gsm_map_OfferedCamel4Functionalities_splitLeg, -1, -1, "splitLeg", NULL },
@@ -10582,11 +11502,11 @@ static const asn_namedbit OfferedCamel4Functionalities_bits[] = {
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
-static int
+int
 dissect_gsm_map_OfferedCamel4Functionalities(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 OfferedCamel4Functionalities_bits, hf_index, ett_gsm_map_OfferedCamel4Functionalities,
-                                 NULL);
+                                    OfferedCamel4Functionalities_bits, hf_index, ett_gsm_map_OfferedCamel4Functionalities,
+                                    NULL);
 
   return offset;
 }
@@ -10616,6 +11536,7 @@ static int dissect_modifyCSI_State_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_ModificationInstruction(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_modifyCSI_State);
 }
 
+
 static const ber_sequence_t ModificationRequestFor_CF_Info_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService_impl },
@@ -10631,7 +11552,7 @@ static const ber_sequence_t ModificationRequestFor_CF_Info_sequence[] = {
 static int
 dissect_gsm_map_ModificationRequestFor_CF_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ModificationRequestFor_CF_Info_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CF_Info);
+                                   ModificationRequestFor_CF_Info_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CF_Info);
 
   return offset;
 }
@@ -10639,6 +11560,7 @@ static int dissect_modificationRequestFor_CF_Info_impl(packet_info *pinfo, proto
   return dissect_gsm_map_ModificationRequestFor_CF_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_modificationRequestFor_CF_Info);
 }
 
+
 static const ber_sequence_t ModificationRequestFor_CB_Info_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_ext_basicService_impl },
@@ -10653,7 +11575,7 @@ static const ber_sequence_t ModificationRequestFor_CB_Info_sequence[] = {
 static int
 dissect_gsm_map_ModificationRequestFor_CB_Info(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ModificationRequestFor_CB_Info_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CB_Info);
+                                   ModificationRequestFor_CB_Info_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CB_Info);
 
   return offset;
 }
@@ -10661,6 +11583,7 @@ static int dissect_modificationRequestFor_CB_Info_impl(packet_info *pinfo, proto
   return dissect_gsm_map_ModificationRequestFor_CB_Info(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_modificationRequestFor_CB_Info);
 }
 
+
 static const ber_sequence_t ModificationRequestFor_CSI_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_requestedCamel_SubscriptionInfo_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_modifyNotificationToCSE_impl },
@@ -10673,7 +11596,7 @@ static const ber_sequence_t ModificationRequestFor_CSI_sequence[] = {
 static int
 dissect_gsm_map_ModificationRequestFor_CSI(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ModificationRequestFor_CSI_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CSI);
+                                   ModificationRequestFor_CSI_sequence, hf_index, ett_gsm_map_ModificationRequestFor_CSI);
 
   return offset;
 }
@@ -10681,6 +11604,7 @@ static int dissect_modificationRequestFor_CSI_impl(packet_info *pinfo, proto_tre
   return dissect_gsm_map_ModificationRequestFor_CSI(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_modificationRequestFor_CSI);
 }
 
+
 static const ber_sequence_t ModificationRequestFor_ODB_data_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_odb_data_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_modifyNotificationToCSE_impl },
@@ -10691,7 +11615,7 @@ static const ber_sequence_t ModificationRequestFor_ODB_data_sequence[] = {
 static int
 dissect_gsm_map_ModificationRequestFor_ODB_data(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ModificationRequestFor_ODB_data_sequence, hf_index, ett_gsm_map_ModificationRequestFor_ODB_data);
+                                   ModificationRequestFor_ODB_data_sequence, hf_index, ett_gsm_map_ModificationRequestFor_ODB_data);
 
   return offset;
 }
@@ -10699,6 +11623,7 @@ static int dissect_modificationRequestFor_ODB_data(packet_info *pinfo, proto_tre
   return dissect_gsm_map_ModificationRequestFor_ODB_data(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_modificationRequestFor_ODB_data);
 }
 
+
 static const ber_sequence_t AnyTimeModificationArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_subscriberIdentity_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_gsmSCF_Address_impl },
@@ -10714,11 +11639,12 @@ static const ber_sequence_t AnyTimeModificationArg_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeModificationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeModificationArg_sequence, hf_index, ett_gsm_map_AnyTimeModificationArg);
+                                   AnyTimeModificationArg_sequence, hf_index, ett_gsm_map_AnyTimeModificationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t Ext_ForwardingInfoFor_CSE_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ext_forwardingFeatureList_impl },
@@ -10730,7 +11656,7 @@ static const ber_sequence_t Ext_ForwardingInfoFor_CSE_sequence[] = {
 static int
 dissect_gsm_map_Ext_ForwardingInfoFor_CSE(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_ForwardingInfoFor_CSE_sequence, hf_index, ett_gsm_map_Ext_ForwardingInfoFor_CSE);
+                                   Ext_ForwardingInfoFor_CSE_sequence, hf_index, ett_gsm_map_Ext_ForwardingInfoFor_CSE);
 
   return offset;
 }
@@ -10738,6 +11664,7 @@ static int dissect_forwardingInfoFor_CSE_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_Ext_ForwardingInfoFor_CSE(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_forwardingInfoFor_CSE);
 }
 
+
 static const ber_sequence_t Ext_CallBarringInfoFor_CSE_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ext_callBarringFeatureList_impl },
@@ -10751,7 +11678,7 @@ static const ber_sequence_t Ext_CallBarringInfoFor_CSE_sequence[] = {
 static int
 dissect_gsm_map_Ext_CallBarringInfoFor_CSE(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ext_CallBarringInfoFor_CSE_sequence, hf_index, ett_gsm_map_Ext_CallBarringInfoFor_CSE);
+                                   Ext_CallBarringInfoFor_CSE_sequence, hf_index, ett_gsm_map_Ext_CallBarringInfoFor_CSE);
 
   return offset;
 }
@@ -10774,8 +11701,9 @@ static const ber_choice_t Ext_SS_InfoFor_CSE_choice[] = {
 
 static int
 dissect_gsm_map_Ext_SS_InfoFor_CSE(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              Ext_SS_InfoFor_CSE_choice, hf_index, ett_gsm_map_Ext_SS_InfoFor_CSE, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 Ext_SS_InfoFor_CSE_choice, hf_index, ett_gsm_map_Ext_SS_InfoFor_CSE,
+                                 NULL);
 
   return offset;
 }
@@ -10783,6 +11711,7 @@ static int dissect_ss_InfoFor_CSE_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_Ext_SS_InfoFor_CSE(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_InfoFor_CSE);
 }
 
+
 static const ber_sequence_t AnyTimeModificationRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_ss_InfoFor_CSE_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_camel_SubscriptionInfo_impl },
@@ -10794,11 +11723,12 @@ static const ber_sequence_t AnyTimeModificationRes_sequence[] = {
 static int
 dissect_gsm_map_AnyTimeModificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AnyTimeModificationRes_sequence, hf_index, ett_gsm_map_AnyTimeModificationRes);
+                                   AnyTimeModificationRes_sequence, hf_index, ett_gsm_map_AnyTimeModificationRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteSubscriberDataModifiedArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_msisdn },
@@ -10814,11 +11744,12 @@ static const ber_sequence_t NoteSubscriberDataModifiedArg_sequence[] = {
 static int
 dissect_gsm_map_NoteSubscriberDataModifiedArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteSubscriberDataModifiedArg_sequence, hf_index, ett_gsm_map_NoteSubscriberDataModifiedArg);
+                                   NoteSubscriberDataModifiedArg_sequence, hf_index, ett_gsm_map_NoteSubscriberDataModifiedArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteSubscriberDataModifiedRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -10827,11 +11758,12 @@ static const ber_sequence_t NoteSubscriberDataModifiedRes_sequence[] = {
 static int
 dissect_gsm_map_NoteSubscriberDataModifiedRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteSubscriberDataModifiedRes_sequence, hf_index, ett_gsm_map_NoteSubscriberDataModifiedRes);
+                                   NoteSubscriberDataModifiedRes_sequence, hf_index, ett_gsm_map_NoteSubscriberDataModifiedRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteMM_EventArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_serviceKey },
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_eventMet_impl },
@@ -10848,11 +11780,12 @@ static const ber_sequence_t NoteMM_EventArg_sequence[] = {
 static int
 dissect_gsm_map_NoteMM_EventArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteMM_EventArg_sequence, hf_index, ett_gsm_map_NoteMM_EventArg);
+                                   NoteMM_EventArg_sequence, hf_index, ett_gsm_map_NoteMM_EventArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteMM_EventRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -10861,7 +11794,7 @@ static const ber_sequence_t NoteMM_EventRes_sequence[] = {
 static int
 dissect_gsm_map_NoteMM_EventRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteMM_EventRes_sequence, hf_index, ett_gsm_map_NoteMM_EventRes);
+                                   NoteMM_EventRes_sequence, hf_index, ett_gsm_map_NoteMM_EventRes);
 
   return offset;
 }
@@ -10911,6 +11844,7 @@ static int dissect_ss_EventSpecification_impl(packet_info *pinfo, proto_tree *tr
   return dissect_gsm_map_T_ss_EventSpecification(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_ss_EventSpecification);
 }
 
+
 static const ber_sequence_t Ss_InvocationNotificationArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_msisdn_impl },
@@ -10923,11 +11857,12 @@ static const ber_sequence_t Ss_InvocationNotificationArg_sequence[] = {
 static int
 dissect_gsm_map_Ss_InvocationNotificationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ss_InvocationNotificationArg_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationArg);
+                                   Ss_InvocationNotificationArg_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t Ss_InvocationNotificationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -10936,7 +11871,7 @@ static const ber_sequence_t Ss_InvocationNotificationRes_sequence[] = {
 static int
 dissect_gsm_map_Ss_InvocationNotificationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ss_InvocationNotificationRes_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationRes);
+                                   Ss_InvocationNotificationRes_sequence, hf_index, ett_gsm_map_Ss_InvocationNotificationRes);
 
   return offset;
 }
@@ -11006,6 +11941,7 @@ static int dissect_vstk_rand_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_VSTK_RAND(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_vstk_rand);
 }
 
+
 static const ber_sequence_t PrepareGroupCallArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_ext_teleservice },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_asciCallReference },
@@ -11024,11 +11960,12 @@ static const ber_sequence_t PrepareGroupCallArg_sequence[] = {
 static int
 dissect_gsm_map_PrepareGroupCallArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareGroupCallArg_sequence, hf_index, ett_gsm_map_PrepareGroupCallArg);
+                                   PrepareGroupCallArg_sequence, hf_index, ett_gsm_map_PrepareGroupCallArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t PrepareGroupCallRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_groupCallNumber },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -11038,11 +11975,12 @@ static const ber_sequence_t PrepareGroupCallRes_sequence[] = {
 static int
 dissect_gsm_map_PrepareGroupCallRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PrepareGroupCallRes_sequence, hf_index, ett_gsm_map_PrepareGroupCallRes);
+                                   PrepareGroupCallRes_sequence, hf_index, ett_gsm_map_PrepareGroupCallRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendGroupCallEndSignalArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -11052,11 +11990,12 @@ static const ber_sequence_t SendGroupCallEndSignalArg_sequence[] = {
 static int
 dissect_gsm_map_SendGroupCallEndSignalArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendGroupCallEndSignalArg_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalArg);
+                                   SendGroupCallEndSignalArg_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendGroupCallEndSignalRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -11065,11 +12004,12 @@ static const ber_sequence_t SendGroupCallEndSignalRes_sequence[] = {
 static int
 dissect_gsm_map_SendGroupCallEndSignalRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendGroupCallEndSignalRes_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalRes);
+                                   SendGroupCallEndSignalRes_sequence, hf_index, ett_gsm_map_SendGroupCallEndSignalRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t ProcessGroupCallSignallingArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkRequest_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkReleaseIndication_impl },
@@ -11081,11 +12021,12 @@ static const ber_sequence_t ProcessGroupCallSignallingArg_sequence[] = {
 static int
 dissect_gsm_map_ProcessGroupCallSignallingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProcessGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ProcessGroupCallSignallingArg);
+                                   ProcessGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ProcessGroupCallSignallingArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t ForwardGroupCallSignallingArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_uplinkRequestAck_impl },
@@ -11100,11 +12041,12 @@ static const ber_sequence_t ForwardGroupCallSignallingArg_sequence[] = {
 static int
 dissect_gsm_map_ForwardGroupCallSignallingArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ForwardGroupCallSignallingArg);
+                                   ForwardGroupCallSignallingArg_sequence, hf_index, ett_gsm_map_ForwardGroupCallSignallingArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SGSN_Capability_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_solsaSupportIndicator },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -11120,7 +12062,7 @@ static const ber_sequence_t SGSN_Capability_sequence[] = {
 static int
 dissect_gsm_map_SGSN_Capability(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SGSN_Capability_sequence, hf_index, ett_gsm_map_SGSN_Capability);
+                                   SGSN_Capability_sequence, hf_index, ett_gsm_map_SGSN_Capability);
 
   return offset;
 }
@@ -11128,6 +12070,7 @@ static int dissect_sgsn_Capability_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_SGSN_Capability(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_sgsn_Capability);
 }
 
+
 static const ber_sequence_t UpdateGprsLocationArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_imsi },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_sgsn_Number },
@@ -11144,11 +12087,12 @@ static const ber_sequence_t UpdateGprsLocationArg_sequence[] = {
 static int
 dissect_gsm_map_UpdateGprsLocationArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UpdateGprsLocationArg_sequence, hf_index, ett_gsm_map_UpdateGprsLocationArg);
+                                   UpdateGprsLocationArg_sequence, hf_index, ett_gsm_map_UpdateGprsLocationArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t UpdateGprsLocationRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_hlr_Number },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -11159,11 +12103,12 @@ static const ber_sequence_t UpdateGprsLocationRes_sequence[] = {
 static int
 dissect_gsm_map_UpdateGprsLocationRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UpdateGprsLocationRes_sequence, hf_index, ett_gsm_map_UpdateGprsLocationRes);
+                                   UpdateGprsLocationRes_sequence, hf_index, ett_gsm_map_UpdateGprsLocationRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendRoutingInfoForGprsArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl },
@@ -11175,11 +12120,12 @@ static const ber_sequence_t SendRoutingInfoForGprsArg_sequence[] = {
 static int
 dissect_gsm_map_SendRoutingInfoForGprsArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendRoutingInfoForGprsArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsArg);
+                                   SendRoutingInfoForGprsArg_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SendRoutingInfoForGprsRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_sgsn_Address_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl },
@@ -11191,11 +12137,12 @@ static const ber_sequence_t SendRoutingInfoForGprsRes_sequence[] = {
 static int
 dissect_gsm_map_SendRoutingInfoForGprsRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SendRoutingInfoForGprsRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsRes);
+                                   SendRoutingInfoForGprsRes_sequence, hf_index, ett_gsm_map_SendRoutingInfoForGprsRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t FailureReportArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_ggsn_Number_impl },
@@ -11207,11 +12154,12 @@ static const ber_sequence_t FailureReportArg_sequence[] = {
 static int
 dissect_gsm_map_FailureReportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                FailureReportArg_sequence, hf_index, ett_gsm_map_FailureReportArg);
+                                   FailureReportArg_sequence, hf_index, ett_gsm_map_FailureReportArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t FailureReportRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ggsn_Address_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -11221,11 +12169,12 @@ static const ber_sequence_t FailureReportRes_sequence[] = {
 static int
 dissect_gsm_map_FailureReportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                FailureReportRes_sequence, hf_index, ett_gsm_map_FailureReportRes);
+                                   FailureReportRes_sequence, hf_index, ett_gsm_map_FailureReportRes);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteMsPresentForGprsArg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_imsi_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_sgsn_Address_impl },
@@ -11237,11 +12186,12 @@ static const ber_sequence_t NoteMsPresentForGprsArg_sequence[] = {
 static int
 dissect_gsm_map_NoteMsPresentForGprsArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteMsPresentForGprsArg_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsArg);
+                                   NoteMsPresentForGprsArg_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoteMsPresentForGprsRes_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
   { 0, 0, 0, NULL }
@@ -11250,7 +12200,7 @@ static const ber_sequence_t NoteMsPresentForGprsRes_sequence[] = {
 static int
 dissect_gsm_map_NoteMsPresentForGprsRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoteMsPresentForGprsRes_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsRes);
+                                   NoteMsPresentForGprsRes_sequence, hf_index, ett_gsm_map_NoteMsPresentForGprsRes);
 
   return offset;
 }
@@ -11273,10 +12223,11 @@ dissect_gsm_map_LocationEstimateType(gboolean implicit_tag _U_, tvbuff_t *tvb, i
 
   return offset;
 }
-static int dissect_locationEstimateType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_LocationEstimateType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_locationEstimateType);
+static int dissect_locationEstimateType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_LocationEstimateType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_locationEstimateType);
 }
 
+
 static const asn_namedbit DeferredLocationEventType_bits[] = {
   {  0, &hf_gsm_map_DeferredLocationEventType_msAvailable, -1, -1, "msAvailable", NULL },
   {  1, &hf_gsm_map_DeferredLocationEventType_enteringIntoArea, -1, -1, "enteringIntoArea", NULL },
@@ -11285,28 +12236,32 @@ static const asn_namedbit DeferredLocationEventType_bits[] = {
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
-static int
+int
 dissect_gsm_map_DeferredLocationEventType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 DeferredLocationEventType_bits, hf_index, ett_gsm_map_DeferredLocationEventType,
-                                 NULL);
+                                    DeferredLocationEventType_bits, hf_index, ett_gsm_map_DeferredLocationEventType,
+                                    NULL);
 
   return offset;
 }
 static int dissect_deferredLocationEventType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
   return dissect_gsm_map_DeferredLocationEventType(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_deferredLocationEventType);
 }
+static int dissect_deferredLocationEventType_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_DeferredLocationEventType(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_deferredLocationEventType);
+}
+
 
 static const ber_sequence_t LocationType_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_locationEstimateType },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_deferredLocationEventType },
+  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_locationEstimateType_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferredLocationEventType_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LocationType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LocationType_sequence, hf_index, ett_gsm_map_LocationType);
+                                   LocationType_sequence, hf_index, ett_gsm_map_LocationType);
 
   return offset;
 }
@@ -11336,6 +12291,7 @@ static int dissect_lcsClientType_impl(packet_info *pinfo, proto_tree *tree, tvbu
 }
 
 
+
 static int
 dissect_gsm_map_NameString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_USSD_String(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -11368,6 +12324,7 @@ static int dissect_lcs_FormatIndicator_impl(packet_info *pinfo, proto_tree *tree
   return dissect_gsm_map_LCS_FormatIndicator(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_FormatIndicator);
 }
 
+
 static const ber_sequence_t LCSClientName_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_dataCodingScheme_impl },
   { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_nameString_impl },
@@ -11375,10 +12332,10 @@ static const ber_sequence_t LCSClientName_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LCSClientName(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSClientName_sequence, hf_index, ett_gsm_map_LCSClientName);
+                                   LCSClientName_sequence, hf_index, ett_gsm_map_LCSClientName);
 
   return offset;
 }
@@ -11387,6 +12344,7 @@ static int dissect_lcsClientName_impl(packet_info *pinfo, proto_tree *tree, tvbu
 }
 
 
+
 static int
 dissect_gsm_map_RequestorIDString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_USSD_String(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -11397,6 +12355,7 @@ static int dissect_requestorIDString_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_RequestorIDString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_requestorIDString);
 }
 
+
 static const ber_sequence_t LCSRequestorID_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_dataCodingScheme_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_requestorIDString_impl },
@@ -11404,10 +12363,10 @@ static const ber_sequence_t LCSRequestorID_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LCSRequestorID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSRequestorID_sequence, hf_index, ett_gsm_map_LCSRequestorID);
+                                   LCSRequestorID_sequence, hf_index, ett_gsm_map_LCSRequestorID);
 
   return offset;
 }
@@ -11415,6 +12374,7 @@ static int dissect_lcsRequestorID_impl(packet_info *pinfo, proto_tree *tree, tvb
   return dissect_gsm_map_LCSRequestorID(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsRequestorID);
 }
 
+
 static const ber_sequence_t LCS_ClientID_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_lcsClientType_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lcsClientExternalID_impl },
@@ -11429,7 +12389,7 @@ static const ber_sequence_t LCS_ClientID_sequence[] = {
 static int
 dissect_gsm_map_LCS_ClientID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCS_ClientID_sequence, hf_index, ett_gsm_map_LCS_ClientID);
+                                   LCS_ClientID_sequence, hf_index, ett_gsm_map_LCS_ClientID);
 
   return offset;
 }
@@ -11498,6 +12458,7 @@ static int dissect_responseTimeCategory(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_ResponseTimeCategory(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_responseTimeCategory);
 }
 
+
 static const ber_sequence_t ResponseTime_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_responseTimeCategory },
   { 0, 0, 0, NULL }
@@ -11506,7 +12467,7 @@ static const ber_sequence_t ResponseTime_sequence[] = {
 static int
 dissect_gsm_map_ResponseTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ResponseTime_sequence, hf_index, ett_gsm_map_ResponseTime);
+                                   ResponseTime_sequence, hf_index, ett_gsm_map_ResponseTime);
 
   return offset;
 }
@@ -11514,6 +12475,7 @@ static int dissect_responseTime_impl(packet_info *pinfo, proto_tree *tree, tvbuf
   return dissect_gsm_map_ResponseTime(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_responseTime);
 }
 
+
 static const ber_sequence_t LCS_QoS_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_horizontal_accuracy_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_verticalCoordinateRequest_impl },
@@ -11523,10 +12485,10 @@ static const ber_sequence_t LCS_QoS_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LCS_QoS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCS_QoS_sequence, hf_index, ett_gsm_map_LCS_QoS);
+                                   LCS_QoS_sequence, hf_index, ett_gsm_map_LCS_QoS);
 
   return offset;
 }
@@ -11534,6 +12496,7 @@ static int dissect_lcs_QoS_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *
   return dissect_gsm_map_LCS_QoS(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcs_QoS);
 }
 
+
 static const asn_namedbit SupportedGADShapes_bits[] = {
   {  0, &hf_gsm_map_SupportedGADShapes_ellipsoidPoint, -1, -1, "ellipsoidPoint", NULL },
   {  1, &hf_gsm_map_SupportedGADShapes_ellipsoidPointWithUncertaintyCircle, -1, -1, "ellipsoidPointWithUncertaintyCircle", NULL },
@@ -11545,11 +12508,11 @@ static const asn_namedbit SupportedGADShapes_bits[] = {
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
-static int
+int
 dissect_gsm_map_SupportedGADShapes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
-                                 SupportedGADShapes_bits, hf_index, ett_gsm_map_SupportedGADShapes,
-                                 NULL);
+                                    SupportedGADShapes_bits, hf_index, ett_gsm_map_SupportedGADShapes,
+                                    NULL);
 
   return offset;
 }
@@ -11559,7 +12522,7 @@ static int dissect_supportedGADShapes_impl(packet_info *pinfo, proto_tree *tree,
 
 
 
-static int
+int
 dissect_gsm_map_LCS_ReferenceNumber(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -11571,6 +12534,7 @@ static int dissect_lcs_ReferenceNumber_impl(packet_info *pinfo, proto_tree *tree
 }
 
 
+
 static int
 dissect_gsm_map_LCSCodewordString(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_gsm_map_USSD_String(implicit_tag, tvb, offset, pinfo, tree, hf_index);
@@ -11581,16 +12545,17 @@ static int dissect_lcsCodewordString_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_LCSCodewordString(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsCodewordString);
 }
 
+
 static const ber_sequence_t LCSCodeword_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_dataCodingScheme_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_lcsCodewordString_impl },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_LCSCodeword(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSCodeword_sequence, hf_index, ett_gsm_map_LCSCodeword);
+                                   LCSCodeword_sequence, hf_index, ett_gsm_map_LCSCodeword);
 
   return offset;
 }
@@ -11623,6 +12588,7 @@ static int dissect_callSessionRelated_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_PrivacyCheckRelatedAction(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_callSessionRelated);
 }
 
+
 static const ber_sequence_t LCS_PrivacyCheck_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_callSessionUnrelated_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_callSessionRelated_impl },
@@ -11632,7 +12598,7 @@ static const ber_sequence_t LCS_PrivacyCheck_sequence[] = {
 static int
 dissect_gsm_map_LCS_PrivacyCheck(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCS_PrivacyCheck_sequence, hf_index, ett_gsm_map_LCS_PrivacyCheck);
+                                   LCS_PrivacyCheck_sequence, hf_index, ett_gsm_map_LCS_PrivacyCheck);
 
   return offset;
 }
@@ -11675,6 +12641,7 @@ static int dissect_areaIdentification_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_AreaIdentification(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_areaIdentification);
 }
 
+
 static const ber_sequence_t Area_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_areaType_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_areaIdentification_impl },
@@ -11684,7 +12651,7 @@ static const ber_sequence_t Area_sequence[] = {
 static int
 dissect_gsm_map_Area(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Area_sequence, hf_index, ett_gsm_map_Area);
+                                   Area_sequence, hf_index, ett_gsm_map_Area);
 
   return offset;
 }
@@ -11708,6 +12675,7 @@ static int dissect_areaList_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t
   return dissect_gsm_map_AreaList(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_areaList);
 }
 
+
 static const ber_sequence_t AreaDefinition_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_areaList_impl },
   { 0, 0, 0, NULL }
@@ -11716,7 +12684,7 @@ static const ber_sequence_t AreaDefinition_sequence[] = {
 static int
 dissect_gsm_map_AreaDefinition(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AreaDefinition_sequence, hf_index, ett_gsm_map_AreaDefinition);
+                                   AreaDefinition_sequence, hf_index, ett_gsm_map_AreaDefinition);
 
   return offset;
 }
@@ -11756,6 +12724,7 @@ static int dissect_intervalTime_impl(packet_info *pinfo, proto_tree *tree, tvbuf
   return dissect_gsm_map_IntervalTime(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_intervalTime);
 }
 
+
 static const ber_sequence_t AreaEventInfo_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_areaDefinition_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_occurrenceInfo_impl },
@@ -11763,10 +12732,10 @@ static const ber_sequence_t AreaEventInfo_sequence[] = {
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_AreaEventInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AreaEventInfo_sequence, hf_index, ett_gsm_map_AreaEventInfo);
+                                   AreaEventInfo_sequence, hf_index, ett_gsm_map_AreaEventInfo);
 
   return offset;
 }
@@ -11774,6 +12743,7 @@ static int dissect_areaEventInfo_impl(packet_info *pinfo, proto_tree *tree, tvbu
   return dissect_gsm_map_AreaEventInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_areaEventInfo);
 }
 
+
 static const ber_sequence_t ProvideSubscriberLocation_Arg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_locationType },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_mlc_Number },
@@ -11799,14 +12769,14 @@ static const ber_sequence_t ProvideSubscriberLocation_Arg_sequence[] = {
 static int
 dissect_gsm_map_ProvideSubscriberLocation_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSubscriberLocation_Arg_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Arg);
+                                   ProvideSubscriberLocation_Arg_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Arg);
 
   return offset;
 }
 
 
 
-static int
+int
 dissect_gsm_map_Ext_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -11822,7 +12792,7 @@ static int dissect_locationEstimate_impl(packet_info *pinfo, proto_tree *tree, t
 
 
 
-static int
+int
 dissect_gsm_map_Add_GeographicalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -11859,6 +12829,7 @@ static int dissect_utranPositioningData_impl(packet_info *pinfo, proto_tree *tre
   return dissect_gsm_map_UtranPositioningDataInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_utranPositioningData);
 }
 
+
 static const ber_sequence_t ProvideSubscriberLocation_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_locationEstimate },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ageOfLocationEstimate_impl },
@@ -11875,7 +12846,7 @@ static const ber_sequence_t ProvideSubscriberLocation_Res_sequence[] = {
 static int
 dissect_gsm_map_ProvideSubscriberLocation_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ProvideSubscriberLocation_Res_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Res);
+                                   ProvideSubscriberLocation_Res_sequence, hf_index, ett_gsm_map_ProvideSubscriberLocation_Res);
 
   return offset;
 }
@@ -11895,12 +12866,14 @@ static const ber_choice_t TargetMS_choice[] = {
 
 static int
 dissect_gsm_map_TargetMS(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              TargetMS_choice, hf_index, ett_gsm_map_TargetMS, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 TargetMS_choice, hf_index, ett_gsm_map_TargetMS,
+                                 NULL);
 
   return offset;
 }
 
+
 static const ber_sequence_t RoutingInfoForLCS_Arg_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mlcNumber_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_targetMS_impl },
@@ -11911,11 +12884,12 @@ static const ber_sequence_t RoutingInfoForLCS_Arg_sequence[] = {
 static int
 dissect_gsm_map_RoutingInfoForLCS_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RoutingInfoForLCS_Arg_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Arg);
+                                   RoutingInfoForLCS_Arg_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t LCSLocationInfo_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_networkNode_Number },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_lmsi_impl },
@@ -11930,7 +12904,7 @@ static const ber_sequence_t LCSLocationInfo_sequence[] = {
 static int
 dissect_gsm_map_LCSLocationInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LCSLocationInfo_sequence, hf_index, ett_gsm_map_LCSLocationInfo);
+                                   LCSLocationInfo_sequence, hf_index, ett_gsm_map_LCSLocationInfo);
 
   return offset;
 }
@@ -11941,6 +12915,7 @@ static int dissect_lcsLocationInfo_impl(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_LCSLocationInfo(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_lcsLocationInfo);
 }
 
+
 static const ber_sequence_t RoutingInfoForLCS_Res_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_NOTCHKTAG, dissect_targetMS },
   { BER_CLASS_CON, 1, 0, dissect_lcsLocationInfo },
@@ -11955,7 +12930,7 @@ static const ber_sequence_t RoutingInfoForLCS_Res_sequence[] = {
 static int
 dissect_gsm_map_RoutingInfoForLCS_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RoutingInfoForLCS_Res_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Res);
+                                   RoutingInfoForLCS_Res_sequence, hf_index, ett_gsm_map_RoutingInfoForLCS_Res);
 
   return offset;
 }
@@ -12005,6 +12980,7 @@ static int dissect_terminationCause_impl(packet_info *pinfo, proto_tree *tree, t
   return dissect_gsm_map_TerminationCause(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_terminationCause);
 }
 
+
 static const ber_sequence_t Deferredmt_lrData_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_deferredLocationEventType },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminationCause_impl },
@@ -12015,7 +12991,7 @@ static const ber_sequence_t Deferredmt_lrData_sequence[] = {
 static int
 dissect_gsm_map_Deferredmt_lrData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Deferredmt_lrData_sequence, hf_index, ett_gsm_map_Deferredmt_lrData);
+                                   Deferredmt_lrData_sequence, hf_index, ett_gsm_map_Deferredmt_lrData);
 
   return offset;
 }
@@ -12023,6 +12999,7 @@ static int dissect_deferredmt_lrData_impl(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_Deferredmt_lrData(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_deferredmt_lrData);
 }
 
+
 static const ber_sequence_t SubscriberLocationReport_Arg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_lcs_Event },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_lcs_ClientID },
@@ -12051,11 +13028,12 @@ static const ber_sequence_t SubscriberLocationReport_Arg_sequence[] = {
 static int
 dissect_gsm_map_SubscriberLocationReport_Arg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SubscriberLocationReport_Arg_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Arg);
+                                   SubscriberLocationReport_Arg_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Arg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SubscriberLocationReport_Res_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_na_ESRK_impl },
@@ -12066,7 +13044,7 @@ static const ber_sequence_t SubscriberLocationReport_Res_sequence[] = {
 static int
 dissect_gsm_map_SubscriberLocationReport_Res(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SubscriberLocationReport_Res_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Res);
+                                   SubscriberLocationReport_Res_sequence, hf_index, ett_gsm_map_SubscriberLocationReport_Res);
 
   return offset;
 }
@@ -12093,8 +13071,8 @@ dissect_gsm_map_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pa
 
   return offset;
 }
-static int dissect_localValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_localValue);
+static int dissect_localValue2(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_localValue2);
 }
 
 
@@ -12105,15 +13083,16 @@ static const value_string gsm_map_OperationCode_vals[] = {
 };
 
 static const ber_choice_t OperationCode_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue },
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue2 },
   {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_globalValue },
   { 0, 0, 0, 0, NULL }
 };
 
 static int
 dissect_gsm_map_OperationCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              OperationCode_choice, hf_index, ett_gsm_map_OperationCode, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 OperationCode_choice, hf_index, ett_gsm_map_OperationCode,
+                                 NULL);
 
   return offset;
 }
@@ -12129,20 +13108,21 @@ static const value_string gsm_map_ErrorCode_vals[] = {
 };
 
 static const ber_choice_t ErrorCode_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue },
+  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_localValue2 },
   {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_globalValue },
   { 0, 0, 0, 0, NULL }
 };
 
 static int
 dissect_gsm_map_ErrorCode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              ErrorCode_choice, hf_index, ett_gsm_map_ErrorCode, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 ErrorCode_choice, hf_index, ett_gsm_map_ErrorCode,
+                                 NULL);
 
   return offset;
 }
-static int dissect_errorCode_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ErrorCode(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_errorCode);
+static int dissect_errorCode1_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_ErrorCode(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_errorCode1);
 }
 
 
@@ -12155,15 +13135,16 @@ static const value_string gsm_map_OriginalComponentIdentifier_vals[] = {
 
 static const ber_choice_t OriginalComponentIdentifier_choice[] = {
   {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_operationCode_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_errorCode_impl },
+  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_errorCode1_impl },
   {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_userInfo_impl },
   { 0, 0, 0, 0, NULL }
 };
 
 static int
 dissect_gsm_map_OriginalComponentIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              OriginalComponentIdentifier_choice, hf_index, ett_gsm_map_OriginalComponentIdentifier, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 OriginalComponentIdentifier_choice, hf_index, ett_gsm_map_OriginalComponentIdentifier,
+                                 NULL);
 
   return offset;
 }
@@ -12184,17 +13165,18 @@ static int dissect_initialisationVector(packet_info *pinfo, proto_tree *tree, tv
   return dissect_gsm_map_InitialisationVector(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_initialisationVector);
 }
 
+
 static const ber_sequence_t SecurityHeader_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_securityParametersIndex },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_originalComponentIdentifier },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_originalComponentIdentifier },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_initialisationVector },
   { 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_gsm_map_SecurityHeader(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SecurityHeader_sequence, hf_index, ett_gsm_map_SecurityHeader);
+                                   SecurityHeader_sequence, hf_index, ett_gsm_map_SecurityHeader);
 
   return offset;
 }
@@ -12204,7 +13186,7 @@ static int dissect_securityHeader(packet_info *pinfo, proto_tree *tree, tvbuff_t
 
 
 
-static int
+int
 dissect_gsm_map_ProtectedPayload(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                        NULL);
@@ -12215,6 +13197,7 @@ static int dissect_protectedPayload(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_ProtectedPayload(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_protectedPayload);
 }
 
+
 static const ber_sequence_t SecureTransportArg_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_securityHeader },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_protectedPayload },
@@ -12224,11 +13207,12 @@ static const ber_sequence_t SecureTransportArg_sequence[] = {
 static int
 dissect_gsm_map_SecureTransportArg(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SecureTransportArg_sequence, hf_index, ett_gsm_map_SecureTransportArg);
+                                   SecureTransportArg_sequence, hf_index, ett_gsm_map_SecureTransportArg);
 
   return offset;
 }
 
+
 static const ber_sequence_t SecureTransportRes_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_securityHeader },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_protectedPayload },
@@ -12238,7 +13222,7 @@ static const ber_sequence_t SecureTransportRes_sequence[] = {
 static int
 dissect_gsm_map_SecureTransportRes(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SecureTransportRes_sequence, hf_index, ett_gsm_map_SecureTransportRes);
+                                   SecureTransportRes_sequence, hf_index, ett_gsm_map_SecureTransportRes);
 
   return offset;
 }
@@ -12268,6 +13252,7 @@ static int dissect_networkResource(packet_info *pinfo, proto_tree *tree, tvbuff_
   return dissect_gsm_map_NetworkResource(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_networkResource);
 }
 
+
 static const ber_sequence_t T_extensibleSystemFailureParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_networkResource },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -12277,7 +13262,7 @@ static const ber_sequence_t T_extensibleSystemFailureParam_sequence[] = {
 static int
 dissect_gsm_map_T_extensibleSystemFailureParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                T_extensibleSystemFailureParam_sequence, hf_index, ett_gsm_map_T_extensibleSystemFailureParam);
+                                   T_extensibleSystemFailureParam_sequence, hf_index, ett_gsm_map_T_extensibleSystemFailureParam);
 
   return offset;
 }
@@ -12300,12 +13285,14 @@ static const ber_choice_t SystemFailureParam_choice[] = {
 
 static int
 dissect_gsm_map_SystemFailureParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              SystemFailureParam_choice, hf_index, ett_gsm_map_SystemFailureParam, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 SystemFailureParam_choice, hf_index, ett_gsm_map_SystemFailureParam,
+                                 NULL);
 
   return offset;
 }
 
+
 static const ber_sequence_t DataMissingParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12314,11 +13301,12 @@ static const ber_sequence_t DataMissingParam_sequence[] = {
 static int
 dissect_gsm_map_DataMissingParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                DataMissingParam_sequence, hf_index, ett_gsm_map_DataMissingParam);
+                                   DataMissingParam_sequence, hf_index, ett_gsm_map_DataMissingParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t UnexpectedDataParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12327,11 +13315,12 @@ static const ber_sequence_t UnexpectedDataParam_sequence[] = {
 static int
 dissect_gsm_map_UnexpectedDataParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnexpectedDataParam_sequence, hf_index, ett_gsm_map_UnexpectedDataParam);
+                                   UnexpectedDataParam_sequence, hf_index, ett_gsm_map_UnexpectedDataParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t FacilityNotSupParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12340,11 +13329,26 @@ static const ber_sequence_t FacilityNotSupParam_sequence[] = {
 static int
 dissect_gsm_map_FacilityNotSupParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                FacilityNotSupParam_sequence, hf_index, ett_gsm_map_FacilityNotSupParam);
+                                   FacilityNotSupParam_sequence, hf_index, ett_gsm_map_FacilityNotSupParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t OR_NotAllowedParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_OR_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   OR_NotAllowedParam_sequence, hf_index, ett_gsm_map_OR_NotAllowedParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t IncompatibleTerminalParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12353,11 +13357,12 @@ static const ber_sequence_t IncompatibleTerminalParam_sequence[] = {
 static int
 dissect_gsm_map_IncompatibleTerminalParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IncompatibleTerminalParam_sequence, hf_index, ett_gsm_map_IncompatibleTerminalParam);
+                                   IncompatibleTerminalParam_sequence, hf_index, ett_gsm_map_IncompatibleTerminalParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t ResourceLimitationParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12366,7 +13371,7 @@ static const ber_sequence_t ResourceLimitationParam_sequence[] = {
 static int
 dissect_gsm_map_ResourceLimitationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ResourceLimitationParam_sequence, hf_index, ett_gsm_map_ResourceLimitationParam);
+                                   ResourceLimitationParam_sequence, hf_index, ett_gsm_map_ResourceLimitationParam);
 
   return offset;
 }
@@ -12390,6 +13395,7 @@ static int dissect_unknownSubscriberDiagnostic(packet_info *pinfo, proto_tree *t
   return dissect_gsm_map_T_unknownSubscriberDiagnostic(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_unknownSubscriberDiagnostic);
 }
 
+
 static const ber_sequence_t UnknownSubscriberParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_unknownSubscriberDiagnostic },
@@ -12399,11 +13405,12 @@ static const ber_sequence_t UnknownSubscriberParam_sequence[] = {
 static int
 dissect_gsm_map_UnknownSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnknownSubscriberParam_sequence, hf_index, ett_gsm_map_UnknownSubscriberParam);
+                                   UnknownSubscriberParam_sequence, hf_index, ett_gsm_map_UnknownSubscriberParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t NumberChangedParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12412,11 +13419,12 @@ static const ber_sequence_t NumberChangedParam_sequence[] = {
 static int
 dissect_gsm_map_NumberChangedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NumberChangedParam_sequence, hf_index, ett_gsm_map_NumberChangedParam);
+                                   NumberChangedParam_sequence, hf_index, ett_gsm_map_NumberChangedParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t UnidentifiedSubParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12425,7 +13433,7 @@ static const ber_sequence_t UnidentifiedSubParam_sequence[] = {
 static int
 dissect_gsm_map_UnidentifiedSubParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnidentifiedSubParam_sequence, hf_index, ett_gsm_map_UnidentifiedSubParam);
+                                   UnidentifiedSubParam_sequence, hf_index, ett_gsm_map_UnidentifiedSubParam);
 
   return offset;
 }
@@ -12449,6 +13457,7 @@ static int dissect_roamingNotAllowedCause(packet_info *pinfo, proto_tree *tree,
   return dissect_gsm_map_T_roamingNotAllowedCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_roamingNotAllowedCause);
 }
 
+
 static const ber_sequence_t RoamingNotAllowedParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_roamingNotAllowedCause },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -12458,11 +13467,12 @@ static const ber_sequence_t RoamingNotAllowedParam_sequence[] = {
 static int
 dissect_gsm_map_RoamingNotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                RoamingNotAllowedParam_sequence, hf_index, ett_gsm_map_RoamingNotAllowedParam);
+                                   RoamingNotAllowedParam_sequence, hf_index, ett_gsm_map_RoamingNotAllowedParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t IllegalSubscriberParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12471,11 +13481,12 @@ static const ber_sequence_t IllegalSubscriberParam_sequence[] = {
 static int
 dissect_gsm_map_IllegalSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IllegalSubscriberParam_sequence, hf_index, ett_gsm_map_IllegalSubscriberParam);
+                                   IllegalSubscriberParam_sequence, hf_index, ett_gsm_map_IllegalSubscriberParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t IllegalEquipmentParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12484,11 +13495,12 @@ static const ber_sequence_t IllegalEquipmentParam_sequence[] = {
 static int
 dissect_gsm_map_IllegalEquipmentParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                IllegalEquipmentParam_sequence, hf_index, ett_gsm_map_IllegalEquipmentParam);
+                                   IllegalEquipmentParam_sequence, hf_index, ett_gsm_map_IllegalEquipmentParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t BearerServNotProvParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12497,11 +13509,12 @@ static const ber_sequence_t BearerServNotProvParam_sequence[] = {
 static int
 dissect_gsm_map_BearerServNotProvParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                BearerServNotProvParam_sequence, hf_index, ett_gsm_map_BearerServNotProvParam);
+                                   BearerServNotProvParam_sequence, hf_index, ett_gsm_map_BearerServNotProvParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t TeleservNotProvParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12510,11 +13523,12 @@ static const ber_sequence_t TeleservNotProvParam_sequence[] = {
 static int
 dissect_gsm_map_TeleservNotProvParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                TeleservNotProvParam_sequence, hf_index, ett_gsm_map_TeleservNotProvParam);
+                                   TeleservNotProvParam_sequence, hf_index, ett_gsm_map_TeleservNotProvParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t TracingBufferFullParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12523,11 +13537,12 @@ static const ber_sequence_t TracingBufferFullParam_sequence[] = {
 static int
 dissect_gsm_map_TracingBufferFullParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                TracingBufferFullParam_sequence, hf_index, ett_gsm_map_TracingBufferFullParam);
+                                   TracingBufferFullParam_sequence, hf_index, ett_gsm_map_TracingBufferFullParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoRoamingNbParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12536,45 +13551,48 @@ static const ber_sequence_t NoRoamingNbParam_sequence[] = {
 static int
 dissect_gsm_map_NoRoamingNbParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoRoamingNbParam_sequence, hf_index, ett_gsm_map_NoRoamingNbParam);
+                                   NoRoamingNbParam_sequence, hf_index, ett_gsm_map_NoRoamingNbParam);
 
   return offset;
 }
 
 
-static const value_string gsm_map_T_absentSubscriberReason_vals[] = {
+static const value_string gsm_map_AbsentSubscriberReason_vals[] = {
   {   0, "imsiDetach" },
   {   1, "restrictedArea" },
   {   2, "noPageResponse" },
+  {   3, "purgedMS" },
   { 0, NULL }
 };
 
 
 static int
-dissect_gsm_map_T_absentSubscriberReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_AbsentSubscriberReason(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_absentSubscriberReason_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_absentSubscriberReason(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_absentSubscriberReason);
+static int dissect_absentSubscriberReason(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_AbsentSubscriberReason(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_absentSubscriberReason);
 }
 
+
 static const ber_sequence_t AbsentSubscriberParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_absentSubscriberReason_impl },
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_absentSubscriberReason },
   { 0, 0, 0, NULL }
 };
 
 static int
 dissect_gsm_map_AbsentSubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AbsentSubscriberParam_sequence, hf_index, ett_gsm_map_AbsentSubscriberParam);
+                                   AbsentSubscriberParam_sequence, hf_index, ett_gsm_map_AbsentSubscriberParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t BusySubscriberParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ccbs_Possible_impl },
@@ -12585,11 +13603,12 @@ static const ber_sequence_t BusySubscriberParam_sequence[] = {
 static int
 dissect_gsm_map_BusySubscriberParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                BusySubscriberParam_sequence, hf_index, ett_gsm_map_BusySubscriberParam);
+                                   BusySubscriberParam_sequence, hf_index, ett_gsm_map_BusySubscriberParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t NoSubscriberReplyParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12598,7 +13617,148 @@ static const ber_sequence_t NoSubscriberReplyParam_sequence[] = {
 static int
 dissect_gsm_map_NoSubscriberReplyParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoSubscriberReplyParam_sequence, hf_index, ett_gsm_map_NoSubscriberReplyParam);
+                                   NoSubscriberReplyParam_sequence, hf_index, ett_gsm_map_NoSubscriberReplyParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ForwardingViolationParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_ForwardingViolationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ForwardingViolationParam_sequence, hf_index, ett_gsm_map_ForwardingViolationParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ForwardingFailedParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_ForwardingFailedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ForwardingFailedParam_sequence, hf_index, ett_gsm_map_ForwardingFailedParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ATI_NotAllowedParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_ATI_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ATI_NotAllowedParam_sequence, hf_index, ett_gsm_map_ATI_NotAllowedParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ATSI_NotAllowedParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_ATSI_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ATSI_NotAllowedParam_sequence, hf_index, ett_gsm_map_ATSI_NotAllowedParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ATM_NotAllowedParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_ATM_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   ATM_NotAllowedParam_sequence, hf_index, ett_gsm_map_ATM_NotAllowedParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t IllegalSS_OperationParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_IllegalSS_OperationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   IllegalSS_OperationParam_sequence, hf_index, ett_gsm_map_IllegalSS_OperationParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t SS_NotAvailableParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_SS_NotAvailableParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   SS_NotAvailableParam_sequence, hf_index, ett_gsm_map_SS_NotAvailableParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t SS_SubscriptionViolationParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_SS_SubscriptionViolationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   SS_SubscriptionViolationParam_sequence, hf_index, ett_gsm_map_SS_SubscriptionViolationParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t InformationNotAvailableParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_InformationNotAvailableParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   InformationNotAvailableParam_sequence, hf_index, ett_gsm_map_InformationNotAvailableParam);
+
+  return offset;
+}
+
+
+static const ber_sequence_t SubBusyForMT_SMS_Param_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_gprsConnectionSuspended },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_SubBusyForMT_SMS_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   SubBusyForMT_SMS_Param_sequence, hf_index, ett_gsm_map_SubBusyForMT_SMS_Param);
 
   return offset;
 }
@@ -12622,22 +13782,23 @@ static int dissect_callBarringCause(packet_info *pinfo, proto_tree *tree, tvbuff
   return dissect_gsm_map_CallBarringCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_callBarringCause);
 }
 
-static const ber_sequence_t T_extensibleCallBarredParam_sequence[] = {
+
+static const ber_sequence_t ExtensibleCallBarredParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_callBarringCause },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unauthorisedMessageOriginator_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_unauthorisedMessageOriginator },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_T_extensibleCallBarredParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_ExtensibleCallBarredParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                T_extensibleCallBarredParam_sequence, hf_index, ett_gsm_map_T_extensibleCallBarredParam);
+                                   ExtensibleCallBarredParam_sequence, hf_index, ett_gsm_map_ExtensibleCallBarredParam);
 
   return offset;
 }
 static int dissect_extensibleCallBarredParam(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_extensibleCallBarredParam(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensibleCallBarredParam);
+  return dissect_gsm_map_ExtensibleCallBarredParam(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_extensibleCallBarredParam);
 }
 
 
@@ -12655,47 +13816,59 @@ static const ber_choice_t CallBarredParam_choice[] = {
 
 static int
 dissect_gsm_map_CallBarredParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              CallBarredParam_choice, hf_index, ett_gsm_map_CallBarredParam, NULL);
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+                                 CallBarredParam_choice, hf_index, ett_gsm_map_CallBarredParam,
+                                 NULL);
 
   return offset;
 }
 
-static const ber_sequence_t ForwardingFailedParam_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { 0, 0, 0, NULL }
+
+static const value_string gsm_map_CUG_RejectCause_vals[] = {
+  {   0, "incomingCallsBarredWithinCUG" },
+  {   1, "subscriberNotMemberOfCUG" },
+  {   5, "requestedBasicServiceViolatesCUG-Constraints" },
+  {   7, "calledPartySS-InteractionViolation" },
+  { 0, NULL }
 };
 
+
 static int
-dissect_gsm_map_ForwardingFailedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardingFailedParam_sequence, hf_index, ett_gsm_map_ForwardingFailedParam);
+dissect_gsm_map_CUG_RejectCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+                                  NULL);
 
   return offset;
 }
+static int dissect_cug_RejectCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_CUG_RejectCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_RejectCause);
+}
 
-static const ber_sequence_t Or_NotAllowedParam_sequence[] = {
+
+static const ber_sequence_t CUG_RejectParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_RejectCause },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_Or_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_CUG_RejectParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Or_NotAllowedParam_sequence, hf_index, ett_gsm_map_Or_NotAllowedParam);
+                                   CUG_RejectParam_sequence, hf_index, ett_gsm_map_CUG_RejectParam);
 
   return offset;
 }
 
-static const ber_sequence_t ForwardingViolationParam_sequence[] = {
+
+static const ber_sequence_t Or_NotAllowedParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_ForwardingViolationParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_Or_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ForwardingViolationParam_sequence, hf_index, ett_gsm_map_ForwardingViolationParam);
+                                   Or_NotAllowedParam_sequence, hf_index, ett_gsm_map_Or_NotAllowedParam);
 
   return offset;
 }
@@ -12717,12 +13890,13 @@ dissect_gsm_map_T_cug_RejectCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int
 
   return offset;
 }
-static int dissect_cug_RejectCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_cug_RejectCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_RejectCause);
+static int dissect_cug_RejectCause1(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+  return dissect_gsm_map_T_cug_RejectCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_cug_RejectCause1);
 }
 
+
 static const ber_sequence_t Cug_RejectParam_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_RejectCause },
+  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_cug_RejectCause1 },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
@@ -12730,23 +13904,11 @@ static const ber_sequence_t Cug_RejectParam_sequence[] = {
 static int
 dissect_gsm_map_Cug_RejectParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Cug_RejectParam_sequence, hf_index, ett_gsm_map_Cug_RejectParam);
+                                   Cug_RejectParam_sequence, hf_index, ett_gsm_map_Cug_RejectParam);
 
   return offset;
 }
 
-static const ber_sequence_t Ati_NotAllowedParam_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_Ati_NotAllowedParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Ati_NotAllowedParam_sequence, hf_index, ett_gsm_map_Ati_NotAllowedParam);
-
-  return offset;
-}
 
 static const ber_sequence_t NoGroupCallNbParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -12756,14 +13918,15 @@ static const ber_sequence_t NoGroupCallNbParam_sequence[] = {
 static int
 dissect_gsm_map_NoGroupCallNbParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                NoGroupCallNbParam_sequence, hf_index, ett_gsm_map_NoGroupCallNbParam);
+                                   NoGroupCallNbParam_sequence, hf_index, ett_gsm_map_NoGroupCallNbParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t SS_IncompatibilityCause_sequence[] = {
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Code_impl },
-  { BER_CLASS_CON, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
+  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_basicService },
   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_ss_Status_impl },
   { 0, 0, 0, NULL }
 };
@@ -12771,13 +13934,13 @@ static const ber_sequence_t SS_IncompatibilityCause_sequence[] = {
 static int
 dissect_gsm_map_SS_IncompatibilityCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SS_IncompatibilityCause_sequence, hf_index, ett_gsm_map_SS_IncompatibilityCause);
+                                   SS_IncompatibilityCause_sequence, hf_index, ett_gsm_map_SS_IncompatibilityCause);
 
   return offset;
 }
 
 
-static const value_string gsm_map_Pw_RegistrationFailureCause_vals[] = {
+static const value_string gsm_map_PW_RegistrationFailureCause_vals[] = {
   {   0, "undetermined" },
   {   1, "invalidFormat" },
   {   2, "newPasswordsMismatch" },
@@ -12786,13 +13949,14 @@ static const value_string gsm_map_Pw_RegistrationFailureCause_vals[] = {
 
 
 static int
-dissect_gsm_map_Pw_RegistrationFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_PW_RegistrationFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
 
+
 static const ber_sequence_t ShortTermDenialParam_sequence[] = {
   { 0, 0, 0, NULL }
 };
@@ -12800,11 +13964,12 @@ static const ber_sequence_t ShortTermDenialParam_sequence[] = {
 static int
 dissect_gsm_map_ShortTermDenialParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ShortTermDenialParam_sequence, hf_index, ett_gsm_map_ShortTermDenialParam);
+                                   ShortTermDenialParam_sequence, hf_index, ett_gsm_map_ShortTermDenialParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t LongTermDenialParam_sequence[] = {
   { 0, 0, 0, NULL }
 };
@@ -12812,27 +13977,13 @@ static const ber_sequence_t LongTermDenialParam_sequence[] = {
 static int
 dissect_gsm_map_LongTermDenialParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                LongTermDenialParam_sequence, hf_index, ett_gsm_map_LongTermDenialParam);
+                                   LongTermDenialParam_sequence, hf_index, ett_gsm_map_LongTermDenialParam);
 
   return offset;
 }
 
-static const ber_sequence_t SubBusyForMT_SMS_Param_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
-  { BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_gprsConnectionSuspended },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_SubBusyForMT_SMS_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                SubBusyForMT_SMS_Param_sequence, hf_index, ett_gsm_map_SubBusyForMT_SMS_Param);
-
-  return offset;
-}
 
-
-static const value_string gsm_map_T_sm_EnumeratedDeliveryFailureCause_vals[] = {
+static const value_string gsm_map_SM_EnumeratedDeliveryFailureCause_vals[] = {
   {   0, "memoryCapacityExceeded" },
   {   1, "equipmentProtocolError" },
   {   2, "equipmentNotSM-Equipped" },
@@ -12845,30 +13996,18 @@ static const value_string gsm_map_T_sm_EnumeratedDeliveryFailureCause_vals[] = {
 
 
 static int
-dissect_gsm_map_T_sm_EnumeratedDeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_SM_EnumeratedDeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
 static int dissect_sm_EnumeratedDeliveryFailureCause(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_sm_EnumeratedDeliveryFailureCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_EnumeratedDeliveryFailureCause);
+  return dissect_gsm_map_SM_EnumeratedDeliveryFailureCause(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_sm_EnumeratedDeliveryFailureCause);
 }
 
 
-
-static int
-dissect_gsm_map_OCTET_STRING_SIZE_1_200(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_octet_string(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                       NULL);
-
-  return offset;
-}
-static int dissect_diagnosticInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_OCTET_STRING_SIZE_1_200(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_diagnosticInfo);
-}
-
-static const ber_sequence_t Sm_DeliveryFailureCause_sequence[] = {
+static const ber_sequence_t SM_DeliveryFailureCause_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_sm_EnumeratedDeliveryFailureCause },
   { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_diagnosticInfo },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -12876,13 +14015,14 @@ static const ber_sequence_t Sm_DeliveryFailureCause_sequence[] = {
 };
 
 static int
-dissect_gsm_map_Sm_DeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_SM_DeliveryFailureCause(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                Sm_DeliveryFailureCause_sequence, hf_index, ett_gsm_map_Sm_DeliveryFailureCause);
+                                   SM_DeliveryFailureCause_sequence, hf_index, ett_gsm_map_SM_DeliveryFailureCause);
 
   return offset;
 }
 
+
 static const ber_sequence_t MessageWaitListFullParam_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12891,11 +14031,12 @@ static const ber_sequence_t MessageWaitListFullParam_sequence[] = {
 static int
 dissect_gsm_map_MessageWaitListFullParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                MessageWaitListFullParam_sequence, hf_index, ett_gsm_map_MessageWaitListFullParam);
+                                   MessageWaitListFullParam_sequence, hf_index, ett_gsm_map_MessageWaitListFullParam);
 
   return offset;
 }
 
+
 static const ber_sequence_t AbsentSubscriberSM_Param_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_absentSubscriberDiagnosticSM },
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
@@ -12906,11 +14047,12 @@ static const ber_sequence_t AbsentSubscriberSM_Param_sequence[] = {
 static int
 dissect_gsm_map_AbsentSubscriberSM_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                AbsentSubscriberSM_Param_sequence, hf_index, ett_gsm_map_AbsentSubscriberSM_Param);
+                                   AbsentSubscriberSM_Param_sequence, hf_index, ett_gsm_map_AbsentSubscriberSM_Param);
 
   return offset;
 }
 
+
 static const ber_sequence_t UnauthorizedRequestingNetwork_Param_sequence[] = {
   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
@@ -12919,7 +14061,7 @@ static const ber_sequence_t UnauthorizedRequestingNetwork_Param_sequence[] = {
 static int
 dissect_gsm_map_UnauthorizedRequestingNetwork_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnauthorizedRequestingNetwork_Param_sequence, hf_index, ett_gsm_map_UnauthorizedRequestingNetwork_Param);
+                                   UnauthorizedRequestingNetwork_Param_sequence, hf_index, ett_gsm_map_UnauthorizedRequestingNetwork_Param);
 
   return offset;
 }
@@ -12946,6 +14088,7 @@ static int dissect_unauthorizedLCSClient_Diagnostic_impl(packet_info *pinfo, pro
   return dissect_gsm_map_T_unauthorizedLCSClient_Diagnostic(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_unauthorizedLCSClient_Diagnostic);
 }
 
+
 static const ber_sequence_t UnauthorizedLCSClient_Param_sequence[] = {
   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unauthorizedLCSClient_Diagnostic_impl },
   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
@@ -12955,13 +14098,13 @@ static const ber_sequence_t UnauthorizedLCSClient_Param_sequence[] = {
 static int
 dissect_gsm_map_UnauthorizedLCSClient_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnauthorizedLCSClient_Param_sequence, hf_index, ett_gsm_map_UnauthorizedLCSClient_Param);
+                                   UnauthorizedLCSClient_Param_sequence, hf_index, ett_gsm_map_UnauthorizedLCSClient_Param);
 
   return offset;
 }
 
 
-static const value_string gsm_map_T_positionMethodFailure_Diagnostic_vals[] = {
+static const value_string gsm_map_PositionMethodFailure_Diagnostic_vals[] = {
   {   0, "congestion" },
   {   1, "insufficientResources" },
   {   2, "insufficientMeasurementData" },
@@ -12976,46 +14119,97 @@ static const value_string gsm_map_T_positionMethodFailure_Diagnostic_vals[] = {
 
 
 static int
-dissect_gsm_map_T_positionMethodFailure_Diagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_PositionMethodFailure_Diagnostic(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
 static int dissect_positionMethodFailure_Diagnostic_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_T_positionMethodFailure_Diagnostic(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_positionMethodFailure_Diagnostic);
+  return dissect_gsm_map_PositionMethodFailure_Diagnostic(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_positionMethodFailure_Diagnostic);
+}
+
+
+static const ber_sequence_t PositionMethodFailure_Param_sequence[] = {
+  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_positionMethodFailure_Diagnostic_impl },
+  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_PositionMethodFailure_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   PositionMethodFailure_Param_sequence, hf_index, ett_gsm_map_PositionMethodFailure_Param);
+
+  return offset;
+}
+
+
+static const ber_sequence_t UnknownOrUnreachableLCSClient_Param_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_UnknownOrUnreachableLCSClient_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   UnknownOrUnreachableLCSClient_Param_sequence, hf_index, ett_gsm_map_UnknownOrUnreachableLCSClient_Param);
+
+  return offset;
+}
+
+
+static const ber_sequence_t MM_EventNotSupported_Param_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+  { 0, 0, 0, NULL }
+};
+
+static int
+dissect_gsm_map_MM_EventNotSupported_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+                                   MM_EventNotSupported_Param_sequence, hf_index, ett_gsm_map_MM_EventNotSupported_Param);
+
+  return offset;
 }
 
-static const ber_sequence_t PositionMethodFailure_Param_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_positionMethodFailure_Diagnostic_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensionContainer_impl },
+
+static const ber_sequence_t TargetCellOutsideGCA_Param_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_PositionMethodFailure_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_TargetCellOutsideGCA_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                PositionMethodFailure_Param_sequence, hf_index, ett_gsm_map_PositionMethodFailure_Param);
+                                   TargetCellOutsideGCA_Param_sequence, hf_index, ett_gsm_map_TargetCellOutsideGCA_Param);
 
   return offset;
 }
 
-static const ber_sequence_t UnknownOrUnreachableLCSClient_Param_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extensionContainer },
+
+static const ber_sequence_t SecureTransportErrorParam_sequence[] = {
+  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_securityHeader },
+  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_protectedPayload },
   { 0, 0, 0, NULL }
 };
 
 static int
-dissect_gsm_map_UnknownOrUnreachableLCSClient_Param(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_gsm_map_SecureTransportErrorParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                UnknownOrUnreachableLCSClient_Param_sequence, hf_index, ett_gsm_map_UnknownOrUnreachableLCSClient_Param);
+                                   SecureTransportErrorParam_sequence, hf_index, ett_gsm_map_SecureTransportErrorParam);
 
   return offset;
 }
 
+/*--- PDUs ---*/
+
+static void dissect_Component_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
+  dissect_gsm_map_Component(FALSE, tvb, 0, pinfo, tree, hf_gsm_map_Component_PDU);
+}
 
-/*--- End of included file: packet-gsm_map-fn.c ---*/
 
+/*--- End of included file: packet-gsm_map-fn.c ---*/
+#line 172 "packet-gsm_map-template.c"
 
 const value_string gsm_map_opr_code_strings[] = {
   {   2, "updateLocation" },
@@ -13214,7 +14408,6 @@ static const true_false_string gsm_map_Ss_Status_a_values = {
   "not Active"
 };
 
-static guint32 opcode=0;
 
 static int
 dissect_gsm_map_Opcode(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
@@ -13241,7 +14434,7 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
                offset = offset +2;
                offset=dissect_gsm_map_CancelLocationArg(TRUE, tvb, offset, pinfo, tree, -1);
        }else{
-    offset=dissect_gsm_map_CancelLocationArg(FALSE, tvb, offset, pinfo, tree, -1);
+    offset=dissect_gsm_map_CancelLocationArgV2(FALSE, tvb, offset, pinfo, tree, -1);
        }
     break;
   case  4: /*provideRoamingNumber*/
@@ -13377,7 +14570,7 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
     offset=dissect_gsm_map_DeactivateTraceModeArg(FALSE, tvb, offset, pinfo, tree, -1);
     break;
   case 55: /*sendIdentification*/
-    offset=dissect_gsm_map_TMSI(FALSE, tvb, offset, pinfo, tree, -1);
+    offset=dissect_gsm_map_SendIdentificationArg(FALSE, tvb, offset, pinfo, tree, -1);
     break;
   case 56: /*sendAuthenticationInfo*/
          if (application_context_version < 3 ){
@@ -13462,8 +14655,6 @@ static int dissect_invokeData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tv
     offset=dissect_gsm_map_SecureTransportArg(FALSE, tvb, offset, pinfo, tree, -1);
     break;
   case 83: /*provideSubscriberLocation*/
-    offset=dissect_gsm_map_EraseCC_EntryArg(FALSE, tvb, offset, pinfo, tree, -1);
-    break;
     offset=dissect_gsm_map_ProvideSubscriberLocation_Arg(FALSE, tvb, offset, pinfo, tree, -1);
     break;
   case 85: /*sendRoutingInfoForLCS*/
@@ -13537,7 +14728,7 @@ static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff
     offset=dissect_gsm_map_InterrogateSS_Res(FALSE, tvb, offset, pinfo, tree, -1);
     break;
   case 15: /*authenticationFailureReport*/
-         offset=dissect_gsm_map_AuthenticationFailureReportArg(FALSE, tvb, offset, pinfo, tree, -1);
+         offset=dissect_gsm_map_AuthenticationFailureReportRes(FALSE, tvb, offset, pinfo, tree, -1);
          break;
   case 17: /*registerPassword*/
     offset=dissect_gsm_map_NewPassword(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_ss_Code);
@@ -13604,8 +14795,15 @@ static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff
   case 51: /*deactivateTraceMode*/
     offset=dissect_gsm_map_DeactivateTraceModeRes(FALSE, tvb, offset, pinfo, tree, -1);
     break;
-  case 55: /*sendIdentification*/
-    offset=dissect_gsm_map_SendIdentificationRes(FALSE, tvb, offset, pinfo, tree, -1);
+  case 55: /*sendIdentification
+                       * In newer versions IMSI and authenticationSetList is OPTIONAL and two new parameters added
+                       * however if the tag (3) is stripped of it should work with the 'new' def.(?) 
+                       */
+       octet = tvb_get_guint8(tvb,0) & 0xf;
+       if ( octet == 3){ /* This is a V3 message ??? */
+               offset = offset +2;
+       }
+       offset=dissect_gsm_map_SendIdentificationRes(TRUE, tvb, offset, pinfo, tree, -1);
     break;
   case 56: /*sendAuthenticationInfo*/
        octet = tvb_get_guint8(tvb,0) & 0xf;
@@ -13710,170 +14908,172 @@ static int dissect_returnResultData(packet_info *pinfo, proto_tree *tree, tvbuff
   return offset;
 }
 
-static int 
-dissect_invokeCmd(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_Opcode(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeCmd);
-}
-
-static int dissect_invokeid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_gsm_map_invokeid, NULL);
-}
-
-
-static const value_string InvokeId_vals[] = {
-  {   0, "invokeid" },
-  {   1, "absent" },
-  { 0, NULL }
-};
-
-static int dissect_absent(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_NULL(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_absent);
-}
-
-
-static const ber_choice_t InvokeId_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeid },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_absent },
-  { 0, 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_InvokeId(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              InvokeId_choice, hf_index, ett_gsm_map_InvokeId, NULL);
-
-  return offset;
-}
-static int dissect_invokeId(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_InvokeId(FALSE, tvb, offset, pinfo, tree, hf_gsm_map_invokeId);
-}
-
-static const ber_sequence_t InvokePDU_sequence[] = {
-  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd },
-  { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeData },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_InvokePDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                InvokePDU_sequence, hf_index, ett_gsm_map_InvokePDU);
-
-  return offset;
-}
-static int dissect_invoke_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_InvokePDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_invoke);
-}
-
-static const ber_sequence_t ReturnResult_result_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_invokeCmd },
-  { BER_CLASS_UNI, -1/*depends on Cmd*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_returnResultData },
-  { 0, 0, 0, NULL }
-};
-static int
-dissect_returnResult_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  offset = dissect_ber_sequence(FALSE, pinfo, tree, tvb, offset,
-                                ReturnResult_result_sequence, hf_gsm_map_returnResult_result, ett_gsm_map_ReturnResult_result);
-
-  return offset;
-}
-
-static const ber_sequence_t ReturnResultPDU_sequence[] = {
-  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_returnResult_result },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_returnResultPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReturnResultPDU_sequence, hf_index, ett_gsm_map_ReturnResultPDU);
-
-  return offset;
-}
-static int dissect_returnResult_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_returnResultPDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnResult);
-}
-
-static int
-dissect_local_errorCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_gsm_map_local_errorCode, NULL);
-}
-
-static int
-dissect_global_errorCode(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  offset =  dissect_ber_object_identifier(FALSE, pinfo, tree, tvb, offset,
-                                         hf_gsm_map_global_errorCode_oid, NULL);
-  return dissect_ber_integer(FALSE, pinfo, tree, tvb, offset, hf_gsm_map_global_errorCode, NULL);
-}
-static const ber_choice_t ReturnError_result_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_local_errorCode },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_global_errorCode },
-  {   0, 0, 0, 0, NULL }
-};
 
 
-static int
-dissect_ReturnError_result(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
-                              ReturnError_result_choice, hf_gsm_map_returnError_result, ett_gsm_map_ReturnError_result, NULL);
-
-  return offset;
-}
-
-static const ber_sequence_t ReturnErrorPDU_sequence[] = {
-  { BER_CLASS_UNI, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_invokeId },
-  { BER_CLASS_UNI, -1/*choice*/,BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ReturnError_result },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_gsm_map_ReturnErrorPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
-                                ReturnErrorPDU_sequence, hf_index, ett_gsm_map_ReturnErrorPDU);
-
+static int dissect_returnErrorData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
+       
+  switch(errorCode){
+  case 1: /* UnknownSubscriberParam */
+         offset=dissect_gsm_map_UnknownSubscriberParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 4: /* SecureTransportErrorParam */
+         offset=dissect_gsm_map_SecureTransportErrorParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 5: /* UnidentifiedSubParam */
+         offset=dissect_gsm_map_UnidentifiedSubParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 6: /* AbsentSubscriberSM-Param */
+         offset=dissect_gsm_map_AbsentSubscriberSM_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 8: /* RoamingNotAllowedParam */
+         offset=dissect_gsm_map_RoamingNotAllowedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 9: /* IllegalSubscriberParam */
+         offset=dissect_gsm_map_IllegalSubscriberParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 10: /* BearerServNotProvParam */
+         offset=dissect_gsm_map_BearerServNotProvParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 11: /* TeleservNotProvParam */
+         offset=dissect_gsm_map_TeleservNotProvParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 12: /* IllegalEquipmentParam */
+         offset=dissect_gsm_map_IllegalEquipmentParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 13: /* CallBarredParam */
+         offset=dissect_gsm_map_CallBarredParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 14: /* ForwardingViolationParam */
+         offset=dissect_gsm_map_ForwardingViolationParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 15: /* CUG-RejectParam */
+         offset=dissect_gsm_map_CUG_RejectParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 16: /* IllegalSS-OperationParam */
+         offset=dissect_gsm_map_IllegalSS_OperationParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 18: /* SS-NotAvailableParam */
+         offset=dissect_gsm_map_SS_NotAvailableParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 19: /* SS-SubscriptionViolationParam */
+         offset=dissect_gsm_map_SS_SubscriptionViolationParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 20: /* SS-IncompatibilityCause */
+         offset=dissect_gsm_map_SS_IncompatibilityCause(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 21: /* FacilityNotSupParam */
+         offset=dissect_gsm_map_FacilityNotSupParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 27: /* AbsentSubscriberParam */
+         offset=dissect_gsm_map_AbsentSubscriberParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 28: /* IncompatibleTerminalParam */
+         offset=dissect_gsm_map_IncompatibleTerminalParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 29: /* ShortTermDenialParam */
+         offset=dissect_gsm_map_ShortTermDenialParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 30: /* LongTermDenialParam */
+         offset=dissect_gsm_map_LongTermDenialParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 31: /* SubBusyForMT-SMS-Param */
+         offset=dissect_gsm_map_SubBusyForMT_SMS_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 32: /* SM-DeliveryFailureCause */
+         offset=dissect_gsm_map_SM_DeliveryFailureCause(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 33: /* MessageWaitListFullParam */
+         offset=dissect_gsm_map_MessageWaitListFullParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 34: /* SystemFailureParam */
+         offset=dissect_gsm_map_SystemFailureParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 35: /* DataMissingParam */
+         offset=dissect_gsm_map_DataMissingParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 36: /* UnexpectedDataParam */
+         offset=dissect_gsm_map_UnexpectedDataParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 37: /* PW-RegistrationFailureCause */
+         offset=dissect_gsm_map_PW_RegistrationFailureCause(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 39: /* NoRoamingNbParam */
+         offset=dissect_gsm_map_NoRoamingNbParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 40: /* TracingBufferFullParam */
+         offset=dissect_gsm_map_TracingBufferFullParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 42: /* TargetCellOutsideGCA-Param */
+         offset=dissect_gsm_map_TargetCellOutsideGCA_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 44: /* NumberChangedParam */
+         offset=dissect_gsm_map_NumberChangedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 45: /* BusySubscriberParam */
+         offset=dissect_gsm_map_BusySubscriberParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 46: /* NoSubscriberReplyParam */
+         offset=dissect_gsm_map_NoSubscriberReplyParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 47: /* ForwardingFailedParam */
+         offset=dissect_gsm_map_ForwardingFailedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 48: /* OR-NotAllowedParam */
+         offset=dissect_gsm_map_OR_NotAllowedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 49: /* ATI-NotAllowedParam */
+         offset=dissect_gsm_map_ATI_NotAllowedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 50: /* NoGroupCallNbParam */
+         offset=dissect_gsm_map_NoGroupCallNbParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 51: /* ResourceLimitationParam */
+         offset=dissect_gsm_map_ResourceLimitationParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 52: /* UnauthorizedRequestingNetwork-Param */
+         offset=dissect_gsm_map_UnauthorizedRequestingNetwork_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 53: /* UnauthorizedLCSClient-Param */
+         offset=dissect_gsm_map_UnauthorizedLCSClient_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 54: /* PositionMethodFailure-Param */
+         offset=dissect_gsm_map_PositionMethodFailure_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 58: /* UnknownOrUnreachableLCSClient-Param */
+         offset=dissect_gsm_map_UnknownOrUnreachableLCSClient_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 59: /* MM-EventNotSupported-Param */
+         offset=dissect_gsm_map_MM_EventNotSupported_Param(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 60: /* ATSI-NotAllowedParam */
+         offset=dissect_gsm_map_ATSI_NotAllowedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 61: /* ATM-NotAllowedParam */
+         offset=dissect_gsm_map_ATM_NotAllowedParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  case 62: /* InformationNotAvailableParam */
+         offset=dissect_gsm_map_InformationNotAvailableParam(FALSE, tvb, offset, pinfo, tree, -1);
+         break;
+  default:
+         proto_tree_add_text(tree, tvb, offset, -1, "Unknown returnErrorData blob");
+         break;
+  }
   return offset;
 }
-static int dissect_returnError_impl(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_gsm_map_ReturnErrorPDU(TRUE, tvb, offset, pinfo, tree, hf_gsm_map_returnError);
-}
-
-
-static const value_string GSMMAPPDU_vals[] = {
-  {   1, "Invoke " },
-  {   2, "ReturnResult " },
-  {   3, "ReturnError " },
-  {   4, "Reject " },
-  { 0, NULL }
-};
-
-static const ber_choice_t GSMMAPPDU_choice[] = {
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_invoke_impl },
-  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_returnResult_impl },
-  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_returnError_impl },
-#ifdef REMOVED
-  {   4, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_reject_impl },
-#endif
-  { 0, 0, 0, 0, NULL }
-};
-
 static guint8 gsmmap_pdu_type = 0;
 static guint8 gsm_map_pdu_size = 0;
 
 static int
 dissect_gsm_map_GSMMAPPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo , proto_tree *tree, int hf_index) {
 
-  char *version_ptr, *version_str;
+  char *version_ptr;
 
   opcode = 0;
   application_context_version = 0;
   if (pinfo->private_data != NULL){
     version_ptr = strrchr(pinfo->private_data,'.');
        if (version_ptr) {
-               version_str = g_strdup(version_ptr+1);
-               application_context_version = atoi(version_str);
+               application_context_version = atoi(version_ptr+1);
        }
   }
 
@@ -13882,12 +15082,14 @@ dissect_gsm_map_GSMMAPPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset,
   gsm_map_pdu_size = tvb_get_guint8(tvb, offset+1)+2;
 
   if (check_col(pinfo->cinfo, COL_INFO)){
-    col_set_str(pinfo->cinfo, COL_INFO, val_to_str(gsmmap_pdu_type, GSMMAPPDU_vals, "Unknown GSM-MAP PDU (%u)"));
+    col_set_str(pinfo->cinfo, COL_INFO, val_to_str(gsmmap_pdu_type, gsm_map_Component_vals, "Unknown GSM-MAP PDU (%u)"));
   }
-
-  offset = dissect_ber_CHOICE(pinfo, tree, tvb, offset,
+  offset = dissect_gsm_map_Component(FALSE, tvb, 0, pinfo, tree, hf_gsm_map_Component_PDU);
+  return offset;
+/*
+  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
                               GSMMAPPDU_choice, hf_index, ett_gsm_map_GSMMAPPDU, NULL);
-
+*/
 
   return offset;
 }
@@ -13911,7 +15113,7 @@ dissect_gsm_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
     }
 
     top_tree = parent_tree;
-    dissector_add("tcap.itu_ssn",pinfo->match_port, map_handle);
+
     /* create display subtree for the protocol */
     if(parent_tree){
         item = proto_tree_add_item(parent_tree, proto_gsm_map, tvb, 0, -1, FALSE);
@@ -13930,7 +15132,7 @@ dissect_gsm_map(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
     tap_queue_packet(gsm_map_tap, pinfo, &tap_rec);
 }
 
-static const value_string ssCode_vals[] = {
+const value_string ssCode_vals[] = {
   { 0x00, "allSS - all SS" },
   { 0x10 ,"allLineIdentificationSS - all line identification SS" },
   { 0x11 ,"clip - calling line identification presentation" },
@@ -14198,14 +15400,14 @@ static const value_string chargingcharacteristics_values[] = {
 static void range_delete_callback(guint32 ssn)
 {
     if (ssn) {
-       dissector_delete("tcap.itu_ssn", ssn, map_handle);
+       delete_itu_tcap_subdissector(ssn, map_handle);
     }
 }
 
 static void range_add_callback(guint32 ssn)
 {
     if (ssn) {
-       dissector_add("tcap.itu_ssn", ssn, map_handle);
+       add_itu_tcap_subdissector(ssn, map_handle);
     }
 }
 
@@ -14242,7 +15444,9 @@ void proto_reg_handoff_gsm_map(void) {
   register_ber_oid_dissector_handle("0.4.0.0.1.0.14.3", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) infoRetrieval(14) version3(3)" );
   register_ber_oid_dissector_handle("0.4.0.0.1.0.14.2", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) infoRetrieval(14) version2(2)" );
   register_ber_oid_dissector_handle("0.4.0.0.1.0.14.1", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) infoRetrieval(14) version1(1)" );
-  register_ber_oid_dissector_handle("0.4.0.0.1.0.15.1", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) interVlrInfoRetrieval(15) version2(2)" );
+  register_ber_oid_dissector_handle("0.4.0.0.1.0.15.1", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) interVlrInfoRetrieval(15) version1(1)" );
+  register_ber_oid_dissector_handle("0.4.0.0.1.0.15.2", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) interVlrInfoRetrieval(15) version2(2)" );
+  register_ber_oid_dissector_handle("0.4.0.0.1.0.15.3", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) interVlrInfoRetrieval(15) version3(3)" );
   register_ber_oid_dissector_handle("0.4.0.0.1.0.16.3", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) subscriberDataMngt(16) version3(3)" );
   register_ber_oid_dissector_handle("0.4.0.0.1.0.16.2", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) subscriberDataMngt(16) version2(2)" );
   register_ber_oid_dissector_handle("0.4.0.0.1.0.16.1", map_handle, proto_gsm_map,"itu-t(0) identified-organization(4) etsi(0) mobileDomain(0) gsm-Network(1) map-ac(0) subscriberDataMngt(16) version1(1)" );
@@ -14295,6 +15499,7 @@ void proto_register_gsm_map(void) {
 
   /* List of fields */
   static hf_register_info hf[] = {
+         /*
     { &hf_gsm_map_invokeCmd,
       { "invokeCmd", "gsm_map.invokeCmd",
         FT_UINT32, BASE_DEC, VALS(gsm_map_opr_code_strings), 0,
@@ -14311,22 +15516,6 @@ void proto_register_gsm_map(void) {
       { "invokeId", "gsm_map.invokeId",
         FT_UINT32, BASE_DEC, VALS(InvokeId_vals), 0,
         "InvokePDU/invokeId", HFILL }},
-       { &hf_gsm_map_SendAuthenticationInfoArg,
-      { "SendAuthenticationInfoArg", "gsm_map.SendAuthenticationInfoArg",
-        FT_BYTES, BASE_NONE, NULL, 0,
-        "SendAuthenticationInfoArg", HFILL }},
-       { &hf_gsm_map_SendAuthenticationInfoRes,
-      { "SendAuthenticationInfoRes", "gsm_map.SendAuthenticationInfoRes",
-        FT_BYTES, BASE_NONE, NULL, 0,
-        "SendAuthenticationInfoRes", HFILL }},
-    { &hf_gsm_map_currentPassword,
-      { "currentPassword", "gsm_map.currentPassword",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
-       { &hf_gsm_mapSendEndSignal,
-      { "mapSendEndSignalArg", "gsm_map.mapsendendsignalarg",
-        FT_BYTES, BASE_NONE, NULL, 0,
-        "mapSendEndSignalArg", HFILL }},
     { &hf_gsm_map_invoke,
       { "invoke", "gsm_map.invoke",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -14353,7 +15542,7 @@ void proto_register_gsm_map(void) {
         "localerrorCode", HFILL }},
        {&hf_gsm_map_global_errorCode_oid,
       { "Global Error Code OID", "gsm_map.hlobalerrorCodeoid",
-        FT_BYTES, BASE_NONE, NULL, 0,
+        FT_STRING, BASE_NONE, NULL, 0,
         "globalerrorCodeoid", HFILL }},
        {&hf_gsm_map_global_errorCode,
       { "Global Error Code", "gsm_map.globalerrorCode",
@@ -14363,6 +15552,24 @@ void proto_register_gsm_map(void) {
       { "Password", "gsm_map.password",
         FT_UINT8, BASE_DEC, VALS(gsm_map_GetPasswordArg_vals), 0,
         "Password", HFILL }},
+
+               */
+       { &hf_gsm_map_SendAuthenticationInfoArg,
+      { "SendAuthenticationInfoArg", "gsm_map.SendAuthenticationInfoArg",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "SendAuthenticationInfoArg", HFILL }},
+       { &hf_gsm_map_SendAuthenticationInfoRes,
+      { "SendAuthenticationInfoRes", "gsm_map.SendAuthenticationInfoRes",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "SendAuthenticationInfoRes", HFILL }},
+    { &hf_gsm_map_currentPassword,
+      { "currentPassword", "gsm_map.currentPassword",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "", HFILL }},
+       { &hf_gsm_mapSendEndSignal,
+      { "mapSendEndSignalArg", "gsm_map.mapsendendsignalarg",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "mapSendEndSignalArg", HFILL }},
     { &hf_gsm_map_extension,
       { "Extension", "gsm_map.extension",
         FT_BOOLEAN, 8, TFS(&gsm_map_extension_value), 0x80,
@@ -14376,11 +15583,11 @@ void proto_register_gsm_map(void) {
         FT_UINT8, BASE_HEX, VALS(gsm_map_number_plan_values), 0x0f,
         "Number plan", HFILL }},
        { &hf_gsm_map_isdn_address_digits,
-      { "ISDN Address digits", "gsm_map.isdn.adress.digits",
+      { "ISDN Address digits", "gsm_map.isdn.address.digits",
         FT_STRING, BASE_NONE, NULL, 0,
         "ISDN Address digits", HFILL }},
        { &hf_gsm_map_address_digits,
-      { "Address digits", "gsm_map.adress.digits",
+      { "Address digits", "gsm_map.address.digits",
         FT_STRING, BASE_NONE, NULL, 0,
         "Address digits", HFILL }},
        { &hf_gsm_map_servicecentreaddress_digits,
@@ -14443,7 +15650,103 @@ void proto_register_gsm_map(void) {
 
 
 /*--- Included file: packet-gsm_map-hfarr.c ---*/
-
+#line 1 "packet-gsm_map-hfarr.c"
+    { &hf_gsm_map_Component_PDU,
+      { "Component", "gsm_map.Component",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_Component_vals), 0,
+        "Component", HFILL }},
+    { &hf_gsm_map_invoke,
+      { "invoke", "gsm_map.invoke",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Component/invoke", HFILL }},
+    { &hf_gsm_map_returnResultLast,
+      { "returnResultLast", "gsm_map.returnResultLast",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Component/returnResultLast", HFILL }},
+    { &hf_gsm_map_returnError,
+      { "returnError", "gsm_map.returnError",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Component/returnError", HFILL }},
+    { &hf_gsm_map_reject,
+      { "reject", "gsm_map.reject",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Component/reject", HFILL }},
+    { &hf_gsm_map_invokeID,
+      { "invokeID", "gsm_map.invokeID",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "", HFILL }},
+    { &hf_gsm_map_linkedID,
+      { "linkedID", "gsm_map.linkedID",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "Invoke/linkedID", HFILL }},
+    { &hf_gsm_map_opCode,
+      { "opCode", "gsm_map.opCode",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_OPERATION_vals), 0,
+        "", HFILL }},
+    { &hf_gsm_map_invokeparameter,
+      { "invokeparameter", "gsm_map.invokeparameter",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Invoke/invokeparameter", HFILL }},
+    { &hf_gsm_map_resultretres,
+      { "resultretres", "gsm_map.resultretres",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ReturnResult/resultretres", HFILL }},
+    { &hf_gsm_map_returnparameter,
+      { "returnparameter", "gsm_map.returnparameter",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ReturnResult/resultretres/returnparameter", HFILL }},
+    { &hf_gsm_map_errorCode,
+      { "errorCode", "gsm_map.errorCode",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_ERROR_vals), 0,
+        "ReturnError/errorCode", HFILL }},
+    { &hf_gsm_map_parameter,
+      { "parameter", "gsm_map.parameter",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "ReturnError/parameter", HFILL }},
+    { &hf_gsm_map_invokeIDRej,
+      { "invokeIDRej", "gsm_map.invokeIDRej",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_T_invokeIDRej_vals), 0,
+        "Reject/invokeIDRej", HFILL }},
+    { &hf_gsm_map_derivable,
+      { "derivable", "gsm_map.derivable",
+        FT_INT32, BASE_DEC, NULL, 0,
+        "Reject/invokeIDRej/derivable", HFILL }},
+    { &hf_gsm_map_not_derivable,
+      { "not-derivable", "gsm_map.not_derivable",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "Reject/invokeIDRej/not-derivable", HFILL }},
+    { &hf_gsm_map_problem,
+      { "problem", "gsm_map.problem",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_T_problem_vals), 0,
+        "Reject/problem", HFILL }},
+    { &hf_gsm_map_generalProblem,
+      { "generalProblem", "gsm_map.generalProblem",
+        FT_INT32, BASE_DEC, VALS(gsm_map_GeneralProblem_vals), 0,
+        "Reject/problem/generalProblem", HFILL }},
+    { &hf_gsm_map_invokeProblem,
+      { "invokeProblem", "gsm_map.invokeProblem",
+        FT_INT32, BASE_DEC, VALS(gsm_map_InvokeProblem_vals), 0,
+        "Reject/problem/invokeProblem", HFILL }},
+    { &hf_gsm_map_returnResultProblem,
+      { "returnResultProblem", "gsm_map.returnResultProblem",
+        FT_INT32, BASE_DEC, VALS(gsm_map_ReturnResultProblem_vals), 0,
+        "Reject/problem/returnResultProblem", HFILL }},
+    { &hf_gsm_map_returnErrorProblem,
+      { "returnErrorProblem", "gsm_map.returnErrorProblem",
+        FT_INT32, BASE_DEC, VALS(gsm_map_ReturnErrorProblem_vals), 0,
+        "Reject/problem/returnErrorProblem", HFILL }},
+    { &hf_gsm_map_localValue,
+      { "localValue", "gsm_map.localValue",
+        FT_INT32, BASE_DEC, VALS(gsm_map_OperationLocalvalue_vals), 0,
+        "OPERATION/localValue", HFILL }},
+    { &hf_gsm_map_globalValue,
+      { "globalValue", "gsm_map.globalValue",
+        FT_OID, BASE_NONE, NULL, 0,
+        "", HFILL }},
+    { &hf_gsm_map_localValue1,
+      { "localValue", "gsm_map.localValue",
+        FT_INT32, BASE_DEC, VALS(gsm_map_LocalErrorcode_vals), 0,
+        "ERROR/localValue", HFILL }},
     { &hf_gsm_map_protocolId,
       { "protocolId", "gsm_map.protocolId",
         FT_UINT32, BASE_DEC, VALS(gsm_map_ProtocolId_vals), 0,
@@ -14550,7 +15853,7 @@ void proto_register_gsm_map(void) {
         "PrivateExtensionList/_item", HFILL }},
     { &hf_gsm_map_extId,
       { "extId", "gsm_map.extId",
-        FT_STRING, BASE_NONE, NULL, 0,
+        FT_OID, BASE_NONE, NULL, 0,
         "PrivateExtension/extId", HFILL }},
     { &hf_gsm_map_extType,
       { "extType", "gsm_map.extType",
@@ -14576,6 +15879,10 @@ void proto_register_gsm_map(void) {
       { "cancellationType", "gsm_map.cancellationType",
         FT_UINT32, BASE_DEC, VALS(gsm_map_CancellationType_vals), 0,
         "CancelLocationArg/cancellationType", HFILL }},
+    { &hf_gsm_map_imsi_WithLMSI,
+      { "imsi-WithLMSI", "gsm_map.imsi_WithLMSI",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "", HFILL }},
     { &hf_gsm_map_sgsn_Number,
       { "sgsn-Number", "gsm_map.sgsn_Number",
         FT_BYTES, BASE_HEX, NULL, 0,
@@ -15868,10 +17175,6 @@ void proto_register_gsm_map(void) {
       { "suppress-T-CSI", "gsm_map.suppress_T_CSI",
         FT_NONE, BASE_NONE, NULL, 0,
         "CamelInfo/suppress-T-CSI", HFILL }},
-    { &hf_gsm_map_imsi_WithLMSI,
-      { "imsi-WithLMSI", "gsm_map.imsi_WithLMSI",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "Identity/imsi-WithLMSI", HFILL }},
     { &hf_gsm_map_HLR_List_item,
       { "Item", "gsm_map.HLR_List_item",
         FT_BYTES, BASE_HEX, NULL, 0,
@@ -17120,7 +18423,7 @@ void proto_register_gsm_map(void) {
       { "operationCode", "gsm_map.operationCode",
         FT_UINT32, BASE_DEC, VALS(gsm_map_OperationCode_vals), 0,
         "OriginalComponentIdentifier/operationCode", HFILL }},
-    { &hf_gsm_map_errorCode,
+    { &hf_gsm_map_errorCode1,
       { "errorCode", "gsm_map.errorCode",
         FT_UINT32, BASE_DEC, VALS(gsm_map_ErrorCode_vals), 0,
         "OriginalComponentIdentifier/errorCode", HFILL }},
@@ -17128,14 +18431,10 @@ void proto_register_gsm_map(void) {
       { "userInfo", "gsm_map.userInfo",
         FT_NONE, BASE_NONE, NULL, 0,
         "OriginalComponentIdentifier/userInfo", HFILL }},
-    { &hf_gsm_map_localValue,
+    { &hf_gsm_map_localValue2,
       { "localValue", "gsm_map.localValue",
         FT_INT32, BASE_DEC, NULL, 0,
         "", HFILL }},
-    { &hf_gsm_map_globalValue,
-      { "globalValue", "gsm_map.globalValue",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "", HFILL }},
     { &hf_gsm_map_networkResource,
       { "networkResource", "gsm_map.networkResource",
         FT_UINT32, BASE_DEC, VALS(gsm_map_NetworkResource_vals), 0,
@@ -17154,12 +18453,16 @@ void proto_register_gsm_map(void) {
         "RoamingNotAllowedParam/roamingNotAllowedCause", HFILL }},
     { &hf_gsm_map_absentSubscriberReason,
       { "absentSubscriberReason", "gsm_map.absentSubscriberReason",
-        FT_UINT32, BASE_DEC, VALS(gsm_map_T_absentSubscriberReason_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(gsm_map_AbsentSubscriberReason_vals), 0,
         "AbsentSubscriberParam/absentSubscriberReason", HFILL }},
     { &hf_gsm_map_ccbs_Busy,
       { "ccbs-Busy", "gsm_map.ccbs_Busy",
         FT_NONE, BASE_NONE, NULL, 0,
         "BusySubscriberParam/ccbs-Busy", HFILL }},
+    { &hf_gsm_map_gprsConnectionSuspended,
+      { "gprsConnectionSuspended", "gsm_map.gprsConnectionSuspended",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "SubBusyForMT-SMS-Param/gprsConnectionSuspended", HFILL }},
     { &hf_gsm_map_callBarringCause,
       { "callBarringCause", "gsm_map.callBarringCause",
         FT_UINT32, BASE_DEC, VALS(gsm_map_CallBarringCause_vals), 0,
@@ -17171,30 +18474,30 @@ void proto_register_gsm_map(void) {
     { &hf_gsm_map_unauthorisedMessageOriginator,
       { "unauthorisedMessageOriginator", "gsm_map.unauthorisedMessageOriginator",
         FT_NONE, BASE_NONE, NULL, 0,
-        "CallBarredParam/extensibleCallBarredParam/unauthorisedMessageOriginator", HFILL }},
+        "ExtensibleCallBarredParam/unauthorisedMessageOriginator", HFILL }},
     { &hf_gsm_map_cug_RejectCause,
+      { "cug-RejectCause", "gsm_map.cug_RejectCause",
+        FT_UINT32, BASE_DEC, VALS(gsm_map_CUG_RejectCause_vals), 0,
+        "CUG-RejectParam/cug-RejectCause", HFILL }},
+    { &hf_gsm_map_cug_RejectCause1,
       { "cug-RejectCause", "gsm_map.cug_RejectCause",
         FT_UINT32, BASE_DEC, VALS(gsm_map_T_cug_RejectCause_vals), 0,
         "Cug-RejectParam/cug-RejectCause", HFILL }},
-    { &hf_gsm_map_gprsConnectionSuspended,
-      { "gprsConnectionSuspended", "gsm_map.gprsConnectionSuspended",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "SubBusyForMT-SMS-Param/gprsConnectionSuspended", HFILL }},
     { &hf_gsm_map_sm_EnumeratedDeliveryFailureCause,
       { "sm-EnumeratedDeliveryFailureCause", "gsm_map.sm_EnumeratedDeliveryFailureCause",
-        FT_UINT32, BASE_DEC, VALS(gsm_map_T_sm_EnumeratedDeliveryFailureCause_vals), 0,
-        "Sm-DeliveryFailureCause/sm-EnumeratedDeliveryFailureCause", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(gsm_map_SM_EnumeratedDeliveryFailureCause_vals), 0,
+        "SM-DeliveryFailureCause/sm-EnumeratedDeliveryFailureCause", HFILL }},
     { &hf_gsm_map_diagnosticInfo,
       { "diagnosticInfo", "gsm_map.diagnosticInfo",
         FT_BYTES, BASE_HEX, NULL, 0,
-        "Sm-DeliveryFailureCause/diagnosticInfo", HFILL }},
+        "SM-DeliveryFailureCause/diagnosticInfo", HFILL }},
     { &hf_gsm_map_unauthorizedLCSClient_Diagnostic,
       { "unauthorizedLCSClient-Diagnostic", "gsm_map.unauthorizedLCSClient_Diagnostic",
         FT_UINT32, BASE_DEC, VALS(gsm_map_T_unauthorizedLCSClient_Diagnostic_vals), 0,
         "UnauthorizedLCSClient-Param/unauthorizedLCSClient-Diagnostic", HFILL }},
     { &hf_gsm_map_positionMethodFailure_Diagnostic,
       { "positionMethodFailure-Diagnostic", "gsm_map.positionMethodFailure_Diagnostic",
-        FT_UINT32, BASE_DEC, VALS(gsm_map_T_positionMethodFailure_Diagnostic_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(gsm_map_PositionMethodFailure_Diagnostic_vals), 0,
         "PositionMethodFailure-Param/positionMethodFailure-Diagnostic", HFILL }},
     { &hf_gsm_map_pcsExtensions,
       { "pcsExtensions", "gsm_map.pcsExtensions",
@@ -17618,7 +18921,7 @@ void proto_register_gsm_map(void) {
         "", HFILL }},
 
 /*--- End of included file: packet-gsm_map-hfarr.c ---*/
-
+#line 1611 "packet-gsm_map-template.c"
   };
 
   /* List of subtrees */
@@ -17633,7 +18936,17 @@ void proto_register_gsm_map(void) {
     &ett_gsm_map_GSMMAPPDU,
 
 /*--- Included file: packet-gsm_map-ettarr.c ---*/
-
+#line 1 "packet-gsm_map-ettarr.c"
+    &ett_gsm_map_Component,
+    &ett_gsm_map_Invoke,
+    &ett_gsm_map_ReturnResult,
+    &ett_gsm_map_T_resultretres,
+    &ett_gsm_map_ReturnError,
+    &ett_gsm_map_Reject,
+    &ett_gsm_map_T_invokeIDRej,
+    &ett_gsm_map_T_problem,
+    &ett_gsm_map_OPERATION,
+    &ett_gsm_map_ERROR,
     &ett_gsm_map_Bss_APDU,
     &ett_gsm_map_SupportedCamelPhases,
     &ett_gsm_map_UpdateLocationArg,
@@ -17648,6 +18961,7 @@ void proto_register_gsm_map(void) {
     &ett_gsm_map_PcsExtensions,
     &ett_gsm_map_SLR_Arg_PCS_Extensions,
     &ett_gsm_map_CancelLocationArg,
+    &ett_gsm_map_CancelLocationArgV2,
     &ett_gsm_map_CancelLocationRes,
     &ett_gsm_map_PurgeMSArg,
     &ett_gsm_map_PurgeMSRes,
@@ -17973,6 +19287,7 @@ void proto_register_gsm_map(void) {
     &ett_gsm_map_DataMissingParam,
     &ett_gsm_map_UnexpectedDataParam,
     &ett_gsm_map_FacilityNotSupParam,
+    &ett_gsm_map_OR_NotAllowedParam,
     &ett_gsm_map_IncompatibleTerminalParam,
     &ett_gsm_map_ResourceLimitationParam,
     &ett_gsm_map_UnknownSubscriberParam,
@@ -17988,29 +19303,39 @@ void proto_register_gsm_map(void) {
     &ett_gsm_map_AbsentSubscriberParam,
     &ett_gsm_map_BusySubscriberParam,
     &ett_gsm_map_NoSubscriberReplyParam,
-    &ett_gsm_map_CallBarredParam,
-    &ett_gsm_map_T_extensibleCallBarredParam,
+    &ett_gsm_map_ForwardingViolationParam,
     &ett_gsm_map_ForwardingFailedParam,
+    &ett_gsm_map_ATI_NotAllowedParam,
+    &ett_gsm_map_ATSI_NotAllowedParam,
+    &ett_gsm_map_ATM_NotAllowedParam,
+    &ett_gsm_map_IllegalSS_OperationParam,
+    &ett_gsm_map_SS_NotAvailableParam,
+    &ett_gsm_map_SS_SubscriptionViolationParam,
+    &ett_gsm_map_InformationNotAvailableParam,
+    &ett_gsm_map_SubBusyForMT_SMS_Param,
+    &ett_gsm_map_CallBarredParam,
+    &ett_gsm_map_ExtensibleCallBarredParam,
+    &ett_gsm_map_CUG_RejectParam,
     &ett_gsm_map_Or_NotAllowedParam,
-    &ett_gsm_map_ForwardingViolationParam,
     &ett_gsm_map_Cug_RejectParam,
-    &ett_gsm_map_Ati_NotAllowedParam,
     &ett_gsm_map_NoGroupCallNbParam,
     &ett_gsm_map_SS_IncompatibilityCause,
     &ett_gsm_map_ShortTermDenialParam,
     &ett_gsm_map_LongTermDenialParam,
-    &ett_gsm_map_SubBusyForMT_SMS_Param,
-    &ett_gsm_map_Sm_DeliveryFailureCause,
+    &ett_gsm_map_SM_DeliveryFailureCause,
     &ett_gsm_map_MessageWaitListFullParam,
     &ett_gsm_map_AbsentSubscriberSM_Param,
     &ett_gsm_map_UnauthorizedRequestingNetwork_Param,
     &ett_gsm_map_UnauthorizedLCSClient_Param,
     &ett_gsm_map_PositionMethodFailure_Param,
     &ett_gsm_map_UnknownOrUnreachableLCSClient_Param,
+    &ett_gsm_map_MM_EventNotSupported_Param,
+    &ett_gsm_map_TargetCellOutsideGCA_Param,
+    &ett_gsm_map_SecureTransportErrorParam,
     &ett_gsm_map_ExtensionContainer,
 
 /*--- End of included file: packet-gsm_map-ettarr.c ---*/
-
+#line 1624 "packet-gsm_map-template.c"
   };
 
   /* Register protocol */