Regenerate all asn2wrs generated dissectors
[obnox/wireshark/wip.git] / epan / dissectors / packet-x411.c
index 3c1d8fceb4f8f93fe5cbb937ce45e77d806c6330..31290dbc4efaaf7461872188eb0cf9a8a1d5c410 100644 (file)
@@ -1,7 +1,7 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
-/* .\packet-x411.c                                                            */
-/* ../../tools/asn2wrs.py -b -e -p x411 -c x411.cnf -s packet-x411-template x411.asn */
+/* packet-x411.c                                                              */
+/* ../../tools/asn2wrs.py -b -e -p x411 -c x411.cnf -s packet-x411-template MTAAbstractService.asn MTSAbstractService.asn */
 
 /* Input file: packet-x411-template.c */
 
 
 #include <glib.h>
 #include <epan/packet.h>
+#include <epan/prefs.h>
 #include <epan/conversation.h>
-#include <epan/oid_resolv.h>
+#include <epan/oids.h>
 #include <epan/asn1.h>
+#include <epan/expert.h>
 
 #include <stdio.h>
 #include <string.h>
 #define PSNAME "X411"
 #define PFNAME "x411"
 
+static guint global_x411_tcp_port = 102;
+static guint tcp_port = 0;
+static dissector_handle_t tpkt_handle = NULL;
+void prefs_register_x411(void); /* forwad declaration for use in preferences registration */
+
 /* Initialize the protocol and registered fields */
 int proto_x411 = -1;
 
 static struct SESSION_DATA_STRUCTURE* session = NULL;
 static int extension_id = -1; /* integer extension id */
-static const char *object_identifier_id; /* extensions identifier */
-static const char *content_type_id; /* content type identifier */
+static const char *object_identifier_id = NULL; /* extensions identifier */
+static const char *content_type_id = NULL; /* content type identifier */
 
 #define MAX_ORA_STR_LEN     256
 static char *oraddress = NULL;
+static char *ddatype = NULL;
 static gboolean doing_address=FALSE;
 static gboolean doing_subjectid=FALSE;
-static proto_item *address_item;
+static proto_item *address_item = NULL;
 
 static proto_tree *top_tree=NULL;
 
-static int
-call_x411_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
+static int hf_x411_MTS_APDU_PDU = -1;
+static int hf_x411_MTABindArgument_PDU = -1;
+static int hf_x411_MTABindResult_PDU = -1;
+static int hf_x411_MTABindError_PDU = -1;
 
 
 /*--- Included file: packet-x411-hf.c ---*/
 #line 1 "packet-x411-hf.c"
-static int hf_x411_MTABindArgument_PDU = -1;      /* MTABindArgument */
-static int hf_x411_MTABindResult_PDU = -1;        /* MTABindResult */
-static int hf_x411_MTABindError_PDU = -1;         /* MTABindError */
-static int hf_x411_MTS_APDU_PDU = -1;             /* MTS_APDU */
 static int hf_x411_InternalTraceInformation_PDU = -1;  /* InternalTraceInformation */
+static int hf_x411_InternalTraceInformationElement_PDU = -1;  /* InternalTraceInformationElement */
 static int hf_x411_TraceInformation_PDU = -1;     /* TraceInformation */
+static int hf_x411_TraceInformationElement_PDU = -1;  /* TraceInformationElement */
+static int hf_x411_MessageSubmissionTime_PDU = -1;  /* MessageSubmissionTime */
 static int hf_x411_ReportDeliveryArgument_PDU = -1;  /* ReportDeliveryArgument */
 static int hf_x411_RecipientCertificate_PDU = -1;  /* RecipientCertificate */
 static int hf_x411_ProofOfDelivery_PDU = -1;      /* ProofOfDelivery */
+static int hf_x411_MessageSubmissionEnvelope_PDU = -1;  /* MessageSubmissionEnvelope */
+static int hf_x411_PerRecipientMessageSubmissionFields_PDU = -1;  /* PerRecipientMessageSubmissionFields */
+static int hf_x411_ProbeSubmissionEnvelope_PDU = -1;  /* ProbeSubmissionEnvelope */
+static int hf_x411_PerRecipientProbeSubmissionFields_PDU = -1;  /* PerRecipientProbeSubmissionFields */
+static int hf_x411_MessageDeliveryEnvelope_PDU = -1;  /* MessageDeliveryEnvelope */
+static int hf_x411_ReportDeliveryEnvelope_PDU = -1;  /* ReportDeliveryEnvelope */
+static int hf_x411_PerRecipientReportDeliveryFields_PDU = -1;  /* PerRecipientReportDeliveryFields */
 static int hf_x411_ExtendedContentType_PDU = -1;  /* ExtendedContentType */
+static int hf_x411_ContentIdentifier_PDU = -1;    /* ContentIdentifier */
+static int hf_x411_PerMessageIndicators_PDU = -1;  /* PerMessageIndicators */
+static int hf_x411_OriginatorReportRequest_PDU = -1;  /* OriginatorReportRequest */
+static int hf_x411_DeferredDeliveryTime_PDU = -1;  /* DeferredDeliveryTime */
+static int hf_x411_Priority_PDU = -1;             /* Priority */
 static int hf_x411_ContentLength_PDU = -1;        /* ContentLength */
+static int hf_x411_MessageDeliveryTime_PDU = -1;  /* MessageDeliveryTime */
+static int hf_x411_DeliveryFlags_PDU = -1;        /* DeliveryFlags */
+static int hf_x411_SubjectSubmissionIdentifier_PDU = -1;  /* SubjectSubmissionIdentifier */
 static int hf_x411_RecipientReassignmentProhibited_PDU = -1;  /* RecipientReassignmentProhibited */
 static int hf_x411_MTSOriginatorRequestedAlternateRecipient_PDU = -1;  /* MTSOriginatorRequestedAlternateRecipient */
 static int hf_x411_DLExpansionProhibited_PDU = -1;  /* DLExpansionProhibited */
@@ -120,17 +144,22 @@ static int hf_x411_ProofOfDeliveryRequest_PDU = -1;  /* ProofOfDeliveryRequest *
 static int hf_x411_ContentCorrelator_PDU = -1;    /* ContentCorrelator */
 static int hf_x411_ProbeOriginAuthenticationCheck_PDU = -1;  /* ProbeOriginAuthenticationCheck */
 static int hf_x411_RedirectionHistory_PDU = -1;   /* RedirectionHistory */
+static int hf_x411_Redirection_PDU = -1;          /* Redirection */
 static int hf_x411_DLExpansionHistory_PDU = -1;   /* DLExpansionHistory */
+static int hf_x411_DLExpansion_PDU = -1;          /* DLExpansion */
 static int hf_x411_PhysicalForwardingAddress_PDU = -1;  /* PhysicalForwardingAddress */
 static int hf_x411_OriginatorAndDLExpansionHistory_PDU = -1;  /* OriginatorAndDLExpansionHistory */
 static int hf_x411_ReportingDLName_PDU = -1;      /* ReportingDLName */
 static int hf_x411_ReportingMTACertificate_PDU = -1;  /* ReportingMTACertificate */
 static int hf_x411_ReportOriginAuthenticationCheck_PDU = -1;  /* ReportOriginAuthenticationCheck */
+static int hf_x411_OriginatingMTACertificate_PDU = -1;  /* OriginatingMTACertificate */
 static int hf_x411_ProofOfSubmission_PDU = -1;    /* ProofOfSubmission */
 static int hf_x411_ReportingMTAName_PDU = -1;     /* ReportingMTAName */
 static int hf_x411_ExtendedCertificates_PDU = -1;  /* ExtendedCertificates */
 static int hf_x411_DLExemptedRecipients_PDU = -1;  /* DLExemptedRecipients */
 static int hf_x411_CertificateSelectors_PDU = -1;  /* CertificateSelectors */
+static int hf_x411_Content_PDU = -1;              /* Content */
+static int hf_x411_MTSIdentifier_PDU = -1;        /* MTSIdentifier */
 static int hf_x411_ORName_PDU = -1;               /* ORName */
 static int hf_x411_ORAddress_PDU = -1;            /* ORAddress */
 static int hf_x411_CommonName_PDU = -1;           /* CommonName */
@@ -146,6 +175,33 @@ static int hf_x411_PDSName_PDU = -1;              /* PDSName */
 static int hf_x411_PhysicalDeliveryCountryName_PDU = -1;  /* PhysicalDeliveryCountryName */
 static int hf_x411_PostalCode_PDU = -1;           /* PostalCode */
 static int hf_x411_PhysicalDeliveryOfficeName_PDU = -1;  /* PhysicalDeliveryOfficeName */
+static int hf_x411_UniversalPhysicalDeliveryOfficeName_PDU = -1;  /* UniversalPhysicalDeliveryOfficeName */
+static int hf_x411_PhysicalDeliveryOfficeNumber_PDU = -1;  /* PhysicalDeliveryOfficeNumber */
+static int hf_x411_UniversalPhysicalDeliveryOfficeNumber_PDU = -1;  /* UniversalPhysicalDeliveryOfficeNumber */
+static int hf_x411_ExtensionORAddressComponents_PDU = -1;  /* ExtensionORAddressComponents */
+static int hf_x411_UniversalExtensionORAddressComponents_PDU = -1;  /* UniversalExtensionORAddressComponents */
+static int hf_x411_PhysicalDeliveryPersonalName_PDU = -1;  /* PhysicalDeliveryPersonalName */
+static int hf_x411_UniversalPhysicalDeliveryPersonalName_PDU = -1;  /* UniversalPhysicalDeliveryPersonalName */
+static int hf_x411_PhysicalDeliveryOrganizationName_PDU = -1;  /* PhysicalDeliveryOrganizationName */
+static int hf_x411_UniversalPhysicalDeliveryOrganizationName_PDU = -1;  /* UniversalPhysicalDeliveryOrganizationName */
+static int hf_x411_ExtensionPhysicalDeliveryAddressComponents_PDU = -1;  /* ExtensionPhysicalDeliveryAddressComponents */
+static int hf_x411_UniversalExtensionPhysicalDeliveryAddressComponents_PDU = -1;  /* UniversalExtensionPhysicalDeliveryAddressComponents */
+static int hf_x411_UnformattedPostalAddress_PDU = -1;  /* UnformattedPostalAddress */
+static int hf_x411_UniversalUnformattedPostalAddress_PDU = -1;  /* UniversalUnformattedPostalAddress */
+static int hf_x411_StreetAddress_PDU = -1;        /* StreetAddress */
+static int hf_x411_UniversalStreetAddress_PDU = -1;  /* UniversalStreetAddress */
+static int hf_x411_PostOfficeBoxAddress_PDU = -1;  /* PostOfficeBoxAddress */
+static int hf_x411_UniversalPostOfficeBoxAddress_PDU = -1;  /* UniversalPostOfficeBoxAddress */
+static int hf_x411_PosteRestanteAddress_PDU = -1;  /* PosteRestanteAddress */
+static int hf_x411_UniversalPosteRestanteAddress_PDU = -1;  /* UniversalPosteRestanteAddress */
+static int hf_x411_UniquePostalName_PDU = -1;     /* UniquePostalName */
+static int hf_x411_UniversalUniquePostalName_PDU = -1;  /* UniversalUniquePostalName */
+static int hf_x411_LocalPostalAttributes_PDU = -1;  /* LocalPostalAttributes */
+static int hf_x411_UniversalLocalPostalAttributes_PDU = -1;  /* UniversalLocalPostalAttributes */
+static int hf_x411_ExtendedNetworkAddress_PDU = -1;  /* ExtendedNetworkAddress */
+static int hf_x411_TerminalType_PDU = -1;         /* TerminalType */
+static int hf_x411_TeletexDomainDefinedAttributes_PDU = -1;  /* TeletexDomainDefinedAttributes */
+static int hf_x411_UniversalDomainDefinedAttributes_PDU = -1;  /* UniversalDomainDefinedAttributes */
 static int hf_x411_ExtendedEncodedInformationType_PDU = -1;  /* ExtendedEncodedInformationType */
 static int hf_x411_MTANameAndOptionalGDI_PDU = -1;  /* MTANameAndOptionalGDI */
 static int hf_x411_AsymmetricToken_PDU = -1;      /* AsymmetricToken */
@@ -153,6 +209,7 @@ static int hf_x411_BindTokenSignedData_PDU = -1;  /* BindTokenSignedData */
 static int hf_x411_MessageTokenSignedData_PDU = -1;  /* MessageTokenSignedData */
 static int hf_x411_MessageTokenEncryptedData_PDU = -1;  /* MessageTokenEncryptedData */
 static int hf_x411_BindTokenEncryptedData_PDU = -1;  /* BindTokenEncryptedData */
+static int hf_x411_SecurityClassification_PDU = -1;  /* SecurityClassification */
 static int hf_x411_unauthenticated = -1;          /* NULL */
 static int hf_x411_authenticated_argument = -1;   /* AuthenticatedArgument */
 static int hf_x411_authenticated_initiator_name = -1;  /* MTAName */
@@ -222,12 +279,9 @@ static int hf_x411_mta = -1;                      /* MTAName */
 static int hf_x411_domain = -1;                   /* GlobalDomainIdentifier */
 static int hf_x411_deferred_time = -1;            /* DeferredTime */
 static int hf_x411_other_actions = -1;            /* OtherActions */
-static int hf_x411_TraceInformation_item = -1;    /* TraceInformationElement */
+static int hf_x411__untag_item = -1;              /* TraceInformationElement */
 static int hf_x411_domain_supplied_information = -1;  /* DomainSuppliedInformation */
 static int hf_x411_attempted_domain = -1;         /* GlobalDomainIdentifier */
-static int hf_x411_initiator_name = -1;           /* ObjectName */
-static int hf_x411_messages_waiting = -1;         /* MessagesWaiting */
-static int hf_x411_responder_name = -1;           /* ObjectName */
 static int hf_x411_user_agent = -1;               /* ORAddressAndOptionalDirectoryName */
 static int hf_x411_mTA = -1;                      /* MTAName */
 static int hf_x411_message_store = -1;            /* ORAddressAndOptionalDirectoryName */
@@ -253,25 +307,19 @@ static int hf_x411_algorithmIdentifier = -1;      /* AlgorithmIdentifier */
 static int hf_x411_encrypted = -1;                /* BIT_STRING */
 static int hf_x411_SecurityContext_item = -1;     /* SecurityLabel */
 static int hf_x411_message_submission_envelope = -1;  /* MessageSubmissionEnvelope */
-static int hf_x411_message_submission_identifier = -1;  /* MessageSubmissionIdentifier */
-static int hf_x411_message_submission_time = -1;  /* MessageSubmissionTime */
-static int hf_x411_probe_submission_identifier = -1;  /* ProbeSubmissionIdentifier */
-static int hf_x411_probe_submission_time = -1;    /* ProbeSubmissionTime */
 static int hf_x411_ImproperlySpecifiedRecipients_item = -1;  /* MTSRecipientName */
 static int hf_x411_waiting_operations = -1;       /* Operations */
 static int hf_x411_waiting_messages = -1;         /* WaitingMessages */
 static int hf_x411_waiting_content_types = -1;    /* SET_OF_ContentType */
 static int hf_x411_waiting_content_types_item = -1;  /* ContentType */
 static int hf_x411_waiting_encoded_information_types = -1;  /* EncodedInformationTypes */
-static int hf_x411_message_delivery_identifier = -1;  /* MessageDeliveryIdentifier */
-static int hf_x411_message_delivery_time = -1;    /* MessageDeliveryTime */
-static int hf_x411_other_fields = -1;             /* OtherMessageDeliveryFields */
-static int hf_x411_recipient_certificate = -1;    /* RecipientCertificate */
-static int hf_x411_proof_of_delivery = -1;        /* ProofOfDelivery */
 static int hf_x411_subject_submission_identifier = -1;  /* SubjectSubmissionIdentifier */
 static int hf_x411_per_recipient_report_delivery_fields = -1;  /* SEQUENCE_OF_PerRecipientReportDeliveryFields */
 static int hf_x411_per_recipient_report_delivery_fields_item = -1;  /* PerRecipientReportDeliveryFields */
-static int hf_x411_empty_result = -1;             /* NULL */
+static int hf_x411_refused_argument = -1;         /* T_refused_argument */
+static int hf_x411_built_in_argument = -1;        /* RefusedArgument */
+static int hf_x411_refused_extension = -1;        /* T_refused_extension */
+static int hf_x411_refusal_reason = -1;           /* RefusalReason */
 static int hf_x411_restrict = -1;                 /* BOOLEAN */
 static int hf_x411_permissible_operations = -1;   /* Operations */
 static int hf_x411_permissible_maximum_content_length = -1;  /* ContentLength */
@@ -279,10 +327,6 @@ static int hf_x411_permissible_lowest_priority = -1;  /* Priority */
 static int hf_x411_permissible_content_types = -1;  /* ContentTypes */
 static int hf_x411_permissible_encoded_information_types = -1;  /* PermissibleEncodedInformationTypes */
 static int hf_x411_permissible_security_context = -1;  /* SecurityContext */
-static int hf_x411_refused_argument = -1;         /* T_refused_argument */
-static int hf_x411_built_in_argument = -1;        /* RefusedArgument */
-static int hf_x411_refused_extension = -1;        /* T_refused_extension */
-static int hf_x411_refusal_reason = -1;           /* RefusalReason */
 static int hf_x411_user_name = -1;                /* UserName */
 static int hf_x411_user_address = -1;             /* UserAddress */
 static int hf_x411_deliverable_class = -1;        /* SET_OF_DeliverableClass */
@@ -291,12 +335,11 @@ static int hf_x411_default_delivery_controls = -1;  /* DefaultDeliveryControls *
 static int hf_x411_redirections = -1;             /* Redirections */
 static int hf_x411_restricted_delivery = -1;      /* RestrictedDelivery */
 static int hf_x411_retrieve_registrations = -1;   /* RegistrationTypes */
+static int hf_x411_empty_result = -1;             /* NULL */
 static int hf_x411_non_empty_result = -1;         /* T_non_empty_result */
 static int hf_x411_registered_information = -1;   /* RegisterArgument */
-static int hf_x411_old_credentials = -1;          /* Credentials */
-static int hf_x411_new_credentials = -1;          /* Credentials */
 static int hf_x411_x121 = -1;                     /* T_x121 */
-static int hf_x411_x121_address = -1;             /* NumericString */
+static int hf_x411_x121_address = -1;             /* AddrNumericString */
 static int hf_x411_tsap_id = -1;                  /* PrintableString */
 static int hf_x411_presentation = -1;             /* PSAPAddress */
 static int hf_x411_Redirections_item = -1;        /* RecipientRedirection */
@@ -332,12 +375,16 @@ static int hf_x411_originator_report_request = -1;  /* OriginatorReportRequest *
 static int hf_x411_per_recipient_probe_submission_fields = -1;  /* SEQUENCE_OF_PerRecipientProbeSubmissionFields */
 static int hf_x411_per_recipient_probe_submission_fields_item = -1;  /* PerRecipientProbeSubmissionFields */
 static int hf_x411_probe_recipient_name = -1;     /* MTSRecipientName */
+static int hf_x411_message_delivery_identifier = -1;  /* MessageDeliveryIdentifier */
+static int hf_x411_message_delivery_time = -1;    /* MessageDeliveryTime */
+static int hf_x411_other_fields = -1;             /* OtherMessageDeliveryFields */
 static int hf_x411_delivered_content_type = -1;   /* DeliveredContentType */
 static int hf_x411_originator_name = -1;          /* DeliveredOriginatorName */
 static int hf_x411_delivery_flags = -1;           /* DeliveryFlags */
 static int hf_x411_other_recipient_names = -1;    /* OtherRecipientNames */
 static int hf_x411_this_recipient_name = -1;      /* ThisRecipientName */
 static int hf_x411_originally_intended_recipient_name = -1;  /* MTSOriginallyIntendedRecipientName */
+static int hf_x411_message_submission_time = -1;  /* MessageSubmissionTime */
 static int hf_x411_actual_recipient_name = -1;    /* MTSActualRecipientName */
 static int hf_x411_delivery_report_type = -1;     /* ReportType */
 static int hf_x411_delivery = -1;                 /* DeliveryReport */
@@ -349,8 +396,8 @@ static int hf_x411_ContentTypes_item = -1;        /* ContentType */
 static int hf_x411_built_in = -1;                 /* BuiltInContentType */
 static int hf_x411_extended = -1;                 /* ExtendedContentType */
 static int hf_x411_OtherRecipientNames_item = -1;  /* OtherRecipientName */
-static int hf_x411_standard_extension = -1;       /* INTEGER */
-static int hf_x411_private_extension = -1;        /* OBJECT_IDENTIFIER */
+static int hf_x411_standard_extension = -1;       /* StandardExtension */
+static int hf_x411_private_extension = -1;        /* T_private_extension */
 static int hf_x411_extension_type = -1;           /* ExtensionType */
 static int hf_x411_criticality = -1;              /* Criticality */
 static int hf_x411_extension_value = -1;          /* ExtensionValue */
@@ -371,6 +418,7 @@ static int hf_x411_origination_or_expansion_time = -1;  /* Time */
 static int hf_x411_report_type = -1;              /* T_report_type */
 static int hf_x411_report_type_delivery = -1;     /* PerRecipientDeliveryReportFields */
 static int hf_x411_non_delivery_report = -1;      /* PerRecipientNonDeliveryReportFields */
+static int hf_x411_recipient_certificate = -1;    /* RecipientCertificate */
 static int hf_x411_mta_directory_name = -1;       /* Name */
 static int hf_x411_ExtendedCertificates_item = -1;  /* ExtendedCertificate */
 static int hf_x411_directory_entry = -1;          /* Name */
@@ -381,8 +429,8 @@ static int hf_x411_selectors_content_integrity_check = -1;  /* CertificateAssert
 static int hf_x411_token_signature = -1;          /* CertificateAssertion */
 static int hf_x411_message_origin_authentication = -1;  /* CertificateAssertion */
 static int hf_x411_local_identifier = -1;         /* LocalIdentifier */
-static int hf_x411_numeric = -1;                  /* NumericString */
-static int hf_x411_printable = -1;                /* PrintableString */
+static int hf_x411_numeric_private_domain_identifier = -1;  /* AddrNumericString */
+static int hf_x411_printable_private_domain_identifier = -1;  /* AddrPrintableString */
 static int hf_x411_built_in_standard_attributes = -1;  /* BuiltInStandardAttributes */
 static int hf_x411_built_in_domain_defined_attributes = -1;  /* BuiltInDomainDefinedAttributes */
 static int hf_x411_extension_attributes = -1;     /* ExtensionAttributes */
@@ -394,23 +442,27 @@ static int hf_x411_organization_name = -1;        /* OrganizationName */
 static int hf_x411_numeric_user_identifier = -1;  /* NumericUserIdentifier */
 static int hf_x411_personal_name = -1;            /* PersonalName */
 static int hf_x411_organizational_unit_names = -1;  /* OrganizationalUnitNames */
-static int hf_x411_x121_dcc_code = -1;            /* NumericString */
-static int hf_x411_iso_3166_alpha2_code = -1;     /* PrintableString */
-static int hf_x411_printable_surname = -1;        /* PrintableString */
-static int hf_x411_printable_given_name = -1;     /* PrintableString */
-static int hf_x411_printable_initials = -1;       /* PrintableString */
-static int hf_x411_printable_generation_qualifier = -1;  /* PrintableString */
+static int hf_x411_x121_dcc_code = -1;            /* AddrNumericString */
+static int hf_x411_iso_3166_alpha2_code = -1;     /* AddrPrintableString */
+static int hf_x411_numeric = -1;                  /* AddrNumericString */
+static int hf_x411_printable = -1;                /* AddrPrintableString */
+static int hf_x411_numeric_private_domain_name = -1;  /* AddrNumericString */
+static int hf_x411_printable_private_domain_name = -1;  /* AddrPrintableString */
+static int hf_x411_printable_surname = -1;        /* T_printable_surname */
+static int hf_x411_printable_given_name = -1;     /* T_printable_given_name */
+static int hf_x411_printable_initials = -1;       /* T_printable_initials */
+static int hf_x411_printable_generation_qualifier = -1;  /* T_printable_generation_qualifier */
 static int hf_x411_OrganizationalUnitNames_item = -1;  /* OrganizationalUnitName */
 static int hf_x411_BuiltInDomainDefinedAttributes_item = -1;  /* BuiltInDomainDefinedAttribute */
-static int hf_x411_printable_type = -1;           /* PrintableString */
-static int hf_x411_printable_value = -1;          /* PrintableString */
+static int hf_x411_printable_type = -1;           /* T_printable_type */
+static int hf_x411_printable_value = -1;          /* T_printable_value */
 static int hf_x411_ExtensionAttributes_item = -1;  /* ExtensionAttribute */
-static int hf_x411_extension_attribute_type = -1;  /* INTEGER */
+static int hf_x411_extension_attribute_type = -1;  /* ExtensionAttributeType */
 static int hf_x411_extension_attribute_value = -1;  /* T_extension_attribute_value */
-static int hf_x411_teletex_surname = -1;          /* TeletexString */
-static int hf_x411_teletex_given_name = -1;       /* TeletexString */
-static int hf_x411_teletex_initials = -1;         /* TeletexString */
-static int hf_x411_teletex_generation_qualifier = -1;  /* TeletexString */
+static int hf_x411_teletex_surname = -1;          /* AddrTeletexString */
+static int hf_x411_teletex_given_name = -1;       /* AddrTeletexString */
+static int hf_x411_teletex_initials = -1;         /* AddrTeletexString */
+static int hf_x411_teletex_generation_qualifier = -1;  /* AddrTeletexString */
 static int hf_x411_universal_surname = -1;        /* UniversalOrBMPString */
 static int hf_x411_universal_given_name = -1;     /* UniversalOrBMPString */
 static int hf_x411_universal_initials = -1;       /* UniversalOrBMPString */
@@ -421,7 +473,7 @@ static int hf_x411_character_encoding = -1;       /* T_character_encoding */
 static int hf_x411_two_octets = -1;               /* BMPString */
 static int hf_x411_four_octets = -1;              /* UniversalString */
 static int hf_x411_iso_639_language_code = -1;    /* PrintableString */
-static int hf_x411_numeric_code = -1;             /* NumericString */
+static int hf_x411_numeric_code = -1;             /* AddrNumericString */
 static int hf_x411_printable_code = -1;           /* PrintableString */
 static int hf_x411_printable_address = -1;        /* T_printable_address */
 static int hf_x411_printable_address_item = -1;   /* PrintableString */
@@ -432,8 +484,8 @@ static int hf_x411_number = -1;                   /* NumericString */
 static int hf_x411_sub_address = -1;              /* NumericString */
 static int hf_x411_psap_address = -1;             /* PresentationAddress */
 static int hf_x411_TeletexDomainDefinedAttributes_item = -1;  /* TeletexDomainDefinedAttribute */
-static int hf_x411_type = -1;                     /* TeletexString */
-static int hf_x411_teletex_value = -1;            /* TeletexString */
+static int hf_x411_type = -1;                     /* AddrTeletexString */
+static int hf_x411_teletex_value = -1;            /* AddrTeletexString */
 static int hf_x411_UniversalDomainDefinedAttributes_item = -1;  /* UniversalDomainDefinedAttribute */
 static int hf_x411_universal_type = -1;           /* UniversalOrBMPString */
 static int hf_x411_universal_value = -1;          /* UniversalOrBMPString */
@@ -459,7 +511,7 @@ static int hf_x411_encryption_algorithm_identifier = -1;  /* AlgorithmIdentifier
 static int hf_x411_encrypted_data = -1;           /* BIT_STRING */
 static int hf_x411_asymmetric_token_data = -1;    /* AsymmetricTokenData */
 static int hf_x411_algorithm_identifier = -1;     /* AlgorithmIdentifier */
-static int hf_x411_token_data_type = -1;          /* INTEGER */
+static int hf_x411_token_data_type = -1;          /* TokenDataType */
 static int hf_x411_value = -1;                    /* T_value */
 static int hf_x411_content_confidentiality_algorithm_identifier = -1;  /* ContentConfidentialityAlgorithmIdentifier */
 static int hf_x411_content_integrity_check = -1;  /* ContentIntegrityCheck */
@@ -500,14 +552,14 @@ static int hf_x411_T_standard_parameters_deliverable_class = -1;
 static int hf_x411_T_standard_parameters_default_delivery_controls = -1;
 static int hf_x411_T_standard_parameters_redirections = -1;
 static int hf_x411_T_standard_parameters_restricted_delivery = -1;
-static int hf_x411_PerMessageIndicators_disclosure_of_other_recipients = -1;
-static int hf_x411_PerMessageIndicators_implicit_conversion_prohibited = -1;
-static int hf_x411_PerMessageIndicators_alternate_recipient_allowed = -1;
-static int hf_x411_PerMessageIndicators_content_return_request = -1;
-static int hf_x411_PerMessageIndicators_reserved = -1;
-static int hf_x411_PerMessageIndicators_bit_5 = -1;
-static int hf_x411_PerMessageIndicators_bit_6 = -1;
-static int hf_x411_PerMessageIndicators_service_message = -1;
+static int hf_x411_PerMessageIndicators_U_disclosure_of_other_recipients = -1;
+static int hf_x411_PerMessageIndicators_U_implicit_conversion_prohibited = -1;
+static int hf_x411_PerMessageIndicators_U_alternate_recipient_allowed = -1;
+static int hf_x411_PerMessageIndicators_U_content_return_request = -1;
+static int hf_x411_PerMessageIndicators_U_reserved = -1;
+static int hf_x411_PerMessageIndicators_U_bit_5 = -1;
+static int hf_x411_PerMessageIndicators_U_bit_6 = -1;
+static int hf_x411_PerMessageIndicators_U_service_message = -1;
 static int hf_x411_OriginatorReportRequest_report = -1;
 static int hf_x411_OriginatorReportRequest_non_delivery_report = -1;
 static int hf_x411_DeliveryFlags_implicit_conversion_prohibited = -1;
@@ -557,13 +609,16 @@ static int hf_x411_G3FacsimileNonBasicParameters_jpeg = -1;
 static int hf_x411_G3FacsimileNonBasicParameters_processable_mode_26 = -1;
 
 /*--- End of included file: packet-x411-hf.c ---*/
-#line 77 "packet-x411-template.c"
+#line 87 "packet-x411-template.c"
 
 /* Initialize the subtree pointers */
 static gint ett_x411 = -1;
 static gint ett_x411_content_unknown = -1;
 static gint ett_x411_bilateral_information = -1;
 static gint ett_x411_additional_information = -1;
+static gint ett_x411_unknown_standard_extension = -1;
+static gint ett_x411_unknown_extension_attribute_type = -1;
+static gint ett_x411_unknown_tokendata_type = -1;
 
 /*--- Included file: packet-x411-ett.c ---*/
 #line 1 "packet-x411-ett.c"
@@ -595,12 +650,10 @@ static gint ett_x411_InternalTraceInformation = -1;
 static gint ett_x411_InternalTraceInformationElement = -1;
 static gint ett_x411_MTASuppliedInformation = -1;
 static gint ett_x411_T_attempted = -1;
-static gint ett_x411_TraceInformation = -1;
+static gint ett_x411_SEQUENCE_OF_TraceInformationElement = -1;
 static gint ett_x411_TraceInformationElement = -1;
 static gint ett_x411_DomainSuppliedInformation = -1;
 static gint ett_x411_OtherActions = -1;
-static gint ett_x411_MTSBindArgument = -1;
-static gint ett_x411_MTSBindResult = -1;
 static gint ett_x411_ObjectName = -1;
 static gint ett_x411_MessagesWaiting = -1;
 static gint ett_x411_DeliveryQueue = -1;
@@ -611,20 +664,13 @@ static gint ett_x411_ProtectedPassword = -1;
 static gint ett_x411_Signature = -1;
 static gint ett_x411_SecurityContext = -1;
 static gint ett_x411_MessageSubmissionArgument = -1;
-static gint ett_x411_MessageSubmissionResult = -1;
-static gint ett_x411_ProbeSubmissionResult = -1;
 static gint ett_x411_ImproperlySpecifiedRecipients = -1;
 static gint ett_x411_Waiting = -1;
 static gint ett_x411_SET_OF_ContentType = -1;
 static gint ett_x411_Operations = -1;
 static gint ett_x411_WaitingMessages = -1;
-static gint ett_x411_MessageDeliveryArgument = -1;
-static gint ett_x411_MessageDeliveryResult = -1;
 static gint ett_x411_ReportDeliveryArgument = -1;
 static gint ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields = -1;
-static gint ett_x411_ReportDeliveryResult = -1;
-static gint ett_x411_DeliveryControlArgument = -1;
-static gint ett_x411_DeliveryControlResult = -1;
 static gint ett_x411_RefusedOperation = -1;
 static gint ett_x411_T_refused_argument = -1;
 static gint ett_x411_Controls = -1;
@@ -632,7 +678,6 @@ static gint ett_x411_RegisterArgument = -1;
 static gint ett_x411_SET_OF_DeliverableClass = -1;
 static gint ett_x411_RegisterResult = -1;
 static gint ett_x411_T_non_empty_result = -1;
-static gint ett_x411_ChangeCredentialsArgument = -1;
 static gint ett_x411_UserAddress = -1;
 static gint ett_x411_T_x121 = -1;
 static gint ett_x411_Redirections = -1;
@@ -665,7 +710,7 @@ static gint ett_x411_NonDeliveryReport = -1;
 static gint ett_x411_ContentTypes = -1;
 static gint ett_x411_ContentType = -1;
 static gint ett_x411_DeliveredContentType = -1;
-static gint ett_x411_PerMessageIndicators = -1;
+static gint ett_x411_PerMessageIndicators_U = -1;
 static gint ett_x411_OriginatorReportRequest = -1;
 static gint ett_x411_DeliveryFlags = -1;
 static gint ett_x411_OtherRecipientNames = -1;
@@ -691,14 +736,14 @@ static gint ett_x411_ExtendedCertificates = -1;
 static gint ett_x411_ExtendedCertificate = -1;
 static gint ett_x411_DLExemptedRecipients = -1;
 static gint ett_x411_CertificateSelectors = -1;
-static gint ett_x411_MTSIdentifier = -1;
-static gint ett_x411_GlobalDomainIdentifier = -1;
+static gint ett_x411_MTSIdentifier_U = -1;
+static gint ett_x411_GlobalDomainIdentifier_U = -1;
 static gint ett_x411_PrivateDomainIdentifier = -1;
-static gint ett_x411_ORName = -1;
+static gint ett_x411_ORName_U = -1;
 static gint ett_x411_ORAddress = -1;
 static gint ett_x411_BuiltInStandardAttributes = -1;
-static gint ett_x411_CountryName = -1;
-static gint ett_x411_AdministrationDomainName = -1;
+static gint ett_x411_CountryName_U = -1;
+static gint ett_x411_AdministrationDomainName_U = -1;
 static gint ett_x411_PrivateDomainName = -1;
 static gint ett_x411_PersonalName = -1;
 static gint ett_x411_OrganizationalUnitNames = -1;
@@ -723,7 +768,7 @@ static gint ett_x411_TeletexDomainDefinedAttributes = -1;
 static gint ett_x411_TeletexDomainDefinedAttribute = -1;
 static gint ett_x411_UniversalDomainDefinedAttributes = -1;
 static gint ett_x411_UniversalDomainDefinedAttribute = -1;
-static gint ett_x411_EncodedInformationTypes = -1;
+static gint ett_x411_EncodedInformationTypes_U = -1;
 static gint ett_x411_BuiltInEncodedInformationTypes = -1;
 static gint ett_x411_ExtendedEncodedInformationTypes = -1;
 static gint ett_x411_NonBasicParameters = -1;
@@ -742,59 +787,17 @@ static gint ett_x411_SecurityCategories = -1;
 static gint ett_x411_SecurityCategory = -1;
 
 /*--- End of included file: packet-x411-ett.c ---*/
-#line 84 "packet-x411-template.c"
+#line 97 "packet-x411-template.c"
 
+/* Dissector tables */
+static dissector_table_t x411_extension_dissector_table;
+static dissector_table_t x411_extension_attribute_dissector_table;
+static dissector_table_t x411_tokendata_dissector_table;
 
-/*--- Included file: packet-x411-fn.c ---*/
-#line 1 "packet-x411-fn.c"
-/*--- Fields for imported types ---*/
 
-static int dissect_certificate_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509af_Certificates(TRUE, tvb, offset, actx, tree, hf_x411_certificate);
-}
-static int dissect_certificate_selector_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_certificate_selector);
-}
-static int dissect_algorithmIdentifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_algorithmIdentifier);
-}
-static int dissect_mta_directory_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509if_Name(TRUE, tvb, offset, actx, tree, hf_x411_mta_directory_name);
-}
-static int dissect_directory_entry_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509if_Name(TRUE, tvb, offset, actx, tree, hf_x411_directory_entry);
-}
-static int dissect_encryption_recipient_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_encryption_recipient);
-}
-static int dissect_encryption_originator_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_encryption_originator);
-}
-static int dissect_selectors_content_integrity_check_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_selectors_content_integrity_check);
-}
-static int dissect_token_signature_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_token_signature);
-}
-static int dissect_message_origin_authentication_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509ce_CertificateAssertion(TRUE, tvb, offset, actx, tree, hf_x411_message_origin_authentication);
-}
-static int dissect_directory_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509if_Name(TRUE, tvb, offset, actx, tree, hf_x411_directory_name);
-}
-static int dissect_psap_address_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509sat_PresentationAddress(TRUE, tvb, offset, actx, tree, hf_x411_psap_address);
-}
-static int dissect_signature_algorithm_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_signature_algorithm_identifier);
-}
-static int dissect_encryption_algorithm_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509af_AlgorithmIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_encryption_algorithm_identifier);
-}
-static int dissect_algorithm_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_algorithm_identifier);
-}
 
+/*--- Included file: packet-x411-fn.c ---*/
+#line 1 "packet-x411-fn.c"
 
 
 static int
@@ -803,18 +806,12 @@ dissect_x411_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
 
   return offset;
 }
-static int dissect_unauthenticated(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NULL(FALSE, tvb, offset, actx, tree, hf_x411_unauthenticated);
-}
-static int dissect_empty_result(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NULL(FALSE, tvb, offset, actx, tree, hf_x411_empty_result);
-}
 
 
 
 static int
 dissect_x411_MTAName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 405 "x411.cnf"
+#line 519 "x411.cnf"
        tvbuff_t        *mtaname = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
@@ -838,21 +835,6 @@ dissect_x411_MTAName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U
 
   return offset;
 }
-static int dissect_authenticated_initiator_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAName(TRUE, tvb, offset, actx, tree, hf_x411_authenticated_initiator_name);
-}
-static int dissect_authenticated_responder_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAName(TRUE, tvb, offset, actx, tree, hf_x411_authenticated_responder_name);
-}
-static int dissect_mta_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAName(FALSE, tvb, offset, actx, tree, hf_x411_mta_name);
-}
-static int dissect_mta(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAName(FALSE, tvb, offset, actx, tree, hf_x411_mta);
-}
-static int dissect_mTA_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAName(TRUE, tvb, offset, actx, tree, hf_x411_mTA);
-}
 
 
 
@@ -864,12 +846,6 @@ dissect_x411_IA5String(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
 
   return offset;
 }
-static int dissect_ia5_string(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_IA5String(FALSE, tvb, offset, actx, tree, hf_x411_ia5_string);
-}
-static int dissect_ia5text(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_IA5String(FALSE, tvb, offset, actx, tree, hf_x411_ia5text);
-}
 
 
 
@@ -880,18 +856,6 @@ dissect_x411_OCTET_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
 
   return offset;
 }
-static int dissect_octet_string(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OCTET_STRING(FALSE, tvb, offset, actx, tree, hf_x411_octet_string);
-}
-static int dissect_octets(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OCTET_STRING(FALSE, tvb, offset, actx, tree, hf_x411_octets);
-}
-static int dissect_page_formats_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OCTET_STRING(TRUE, tvb, offset, actx, tree, hf_x411_page_formats);
-}
-static int dissect_private_use_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OCTET_STRING(TRUE, tvb, offset, actx, tree, hf_x411_private_use);
-}
 
 
 static const value_string x411_Password_vals[] = {
@@ -900,23 +864,20 @@ static const value_string x411_Password_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t Password_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5_string },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octet_string },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t Password_choice[] = {
+  {   0, &hf_x411_ia5_string     , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_IA5String },
+  {   1, &hf_x411_octet_string   , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_OCTET_STRING },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Password(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     Password_choice, hf_index, ett_x411_Password,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 Password_choice, hf_index, ett_x411_Password,
+                                 NULL);
 
   return offset;
 }
-static int dissect_simple(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Password(FALSE, tvb, offset, actx, tree, hf_x411_simple);
-}
 
 
 
@@ -926,15 +887,12 @@ dissect_x411_TokenTypeIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
 
   return offset;
 }
-static int dissect_token_type_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TokenTypeIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_token_type_identifier);
-}
 
 
 
 static int
 dissect_x411_TokenTypeData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 692 "x411.cnf"
+#line 877 "x411.cnf"
        
        if(object_identifier_id) 
           call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
@@ -943,46 +901,37 @@ dissect_x411_TokenTypeData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_token_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TokenTypeData(TRUE, tvb, offset, actx, tree, hf_x411_token);
-}
 
 
-static const ber_old_sequence_t Token_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_token_type_identifier_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_token_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Token_sequence[] = {
+  { &hf_x411_token_type_identifier, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_TokenTypeIdentifier },
+  { &hf_x411_token          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_TokenTypeData },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Token(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       Token_sequence, hf_index, ett_x411_Token);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   Token_sequence, hf_index, ett_x411_Token);
 
   return offset;
 }
-static int dissect_bind_token_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Token(TRUE, tvb, offset, actx, tree, hf_x411_bind_token);
-}
 
 
-static const ber_old_sequence_t StrongCredentials_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_bind_token_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_certificate_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_certificate_selector_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t StrongCredentials_set[] = {
+  { &hf_x411_bind_token     , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Token },
+  { &hf_x411_certificate    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509af_Certificates },
+  { &hf_x411_certificate_selector, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_StrongCredentials(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  StrongCredentials_set, hf_index, ett_x411_StrongCredentials);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              StrongCredentials_set, hf_index, ett_x411_StrongCredentials);
 
   return offset;
 }
-static int dissect_strong_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_StrongCredentials(TRUE, tvb, offset, actx, tree, hf_x411_strong);
-}
 
 
 
@@ -994,127 +943,93 @@ dissect_x411_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
 
   return offset;
 }
-static int dissect_random1_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BIT_STRING(TRUE, tvb, offset, actx, tree, hf_x411_random1);
-}
-static int dissect_random2_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BIT_STRING(TRUE, tvb, offset, actx, tree, hf_x411_random2);
-}
-static int dissect_encrypted(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BIT_STRING(FALSE, tvb, offset, actx, tree, hf_x411_encrypted);
-}
-static int dissect_encrypted_data_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BIT_STRING(TRUE, tvb, offset, actx, tree, hf_x411_encrypted_data);
-}
 
 
-static const ber_old_sequence_t Signature_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Signature_sequence[] = {
+  { &hf_x411_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_x411_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Signature(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       Signature_sequence, hf_index, ett_x411_Signature);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   Signature_sequence, hf_index, ett_x411_Signature);
 
   return offset;
 }
-static int dissect_signature(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Signature(FALSE, tvb, offset, actx, tree, hf_x411_signature);
-}
 
 
 
 static int
 dissect_x411_UTCTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
-                                            actx, tree, tvb, offset, hf_index,
-                                            NULL);
+  offset = dissect_ber_UTCTime(implicit_tag, actx, tree, tvb, offset, hf_index);
 
   return offset;
 }
-static int dissect_time1_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UTCTime(TRUE, tvb, offset, actx, tree, hf_x411_time1);
-}
-static int dissect_time2_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UTCTime(TRUE, tvb, offset, actx, tree, hf_x411_time2);
-}
 
 
-static const ber_old_sequence_t ProtectedPassword_set[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_time1_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_time2_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_random1_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_random2_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ProtectedPassword_set[] = {
+  { &hf_x411_signature      , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_Signature },
+  { &hf_x411_time1          , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_UTCTime },
+  { &hf_x411_time2          , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_UTCTime },
+  { &hf_x411_random1        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_BIT_STRING },
+  { &hf_x411_random2        , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ProtectedPassword(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ProtectedPassword_set, hf_index, ett_x411_ProtectedPassword);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ProtectedPassword_set, hf_index, ett_x411_ProtectedPassword);
 
   return offset;
 }
-static int dissect_protected_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProtectedPassword(TRUE, tvb, offset, actx, tree, hf_x411_protected);
-}
 
 
-static const value_string x411_Credentials_vals[] = {
+const value_string x411_Credentials_vals[] = {
   {   0, "simple" },
   {   1, "strong" },
   {   2, "protected" },
   { 0, NULL }
 };
 
-static const ber_old_choice_t Credentials_choice[] = {
-  {   0, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_simple },
-  {   1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_strong_impl },
-  {   2, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_protected_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t Credentials_choice[] = {
+  {   0, &hf_x411_simple         , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_x411_Password },
+  {   1, &hf_x411_strong         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_StrongCredentials },
+  {   2, &hf_x411_protected      , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_ProtectedPassword },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_x411_Credentials(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 700 "x411.cnf"
-  guint32 credentials;
+#line 885 "x411.cnf"
+  gint credentials = -1;
 
-    offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     Credentials_choice, hf_index, ett_x411_Credentials,
-                                     &credentials);
+    offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 Credentials_choice, hf_index, ett_x411_Credentials,
+                                 &credentials);
 
 
-  if (check_col(actx->pinfo->cinfo, COL_INFO)) {
-       if(credentials == -1) credentials = 0;
-       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(credentials, x411_Credentials_vals, "Credentials(%d)"));
+  if( (credentials!=-1) && x411_Credentials_vals[credentials].strptr ){
+    if (check_col(actx->pinfo->cinfo, COL_INFO)) {
+      col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", x411_Credentials_vals[credentials].strptr);
+    }
   }
 
 
 
   return offset;
 }
-static int dissect_old_credentials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Credentials(TRUE, tvb, offset, actx, tree, hf_x411_old_credentials);
-}
-static int dissect_new_credentials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Credentials(TRUE, tvb, offset, actx, tree, hf_x411_new_credentials);
-}
 
 
 
-static int
+int
 dissect_x411_InitiatorCredentials(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_Credentials(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_initiator_credentials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_InitiatorCredentials(TRUE, tvb, offset, actx, tree, hf_x411_initiator_credentials);
-}
 
 
 
@@ -1124,9 +1039,6 @@ dissect_x411_SecurityPolicyIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _
 
   return offset;
 }
-static int dissect_security_policy_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityPolicyIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_security_policy_identifier);
-}
 
 
 static const value_string x411_SecurityClassification_vals[] = {
@@ -1143,13 +1055,10 @@ static const value_string x411_SecurityClassification_vals[] = {
 static int
 dissect_x411_SecurityClassification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_security_classification(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityClassification(FALSE, tvb, offset, actx, tree, hf_x411_security_classification);
-}
 
 
 
@@ -1161,36 +1070,21 @@ dissect_x411_PrivacyMark(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
   return offset;
 }
-static int dissect_privacy_mark(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrivacyMark(FALSE, tvb, offset, actx, tree, hf_x411_privacy_mark);
-}
 
 
 
 static int
 dissect_x411_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 339 "x411.cnf"
-
-         offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &object_identifier_id);
-
-       extension_id = -1;
-
-
+  offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
-static int dissect_private_extension_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OBJECT_IDENTIFIER(TRUE, tvb, offset, actx, tree, hf_x411_private_extension);
-}
-static int dissect_category_type_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OBJECT_IDENTIFIER(TRUE, tvb, offset, actx, tree, hf_x411_category_type);
-}
 
 
 
 static int
 dissect_x411_CategoryValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 260 "x411.cnf"
+#line 409 "x411.cnf"
 
        offset = dissect_unknown_ber(actx->pinfo, tvb, offset, tree);
 
@@ -1198,104 +1092,80 @@ dissect_x411_CategoryValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_category_value_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_CategoryValue(TRUE, tvb, offset, actx, tree, hf_x411_category_value);
-}
 
 
-static const ber_old_sequence_t SecurityCategory_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_category_type_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_category_value_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t SecurityCategory_sequence[] = {
+  { &hf_x411_category_type  , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_OBJECT_IDENTIFIER },
+  { &hf_x411_category_value , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_CategoryValue },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_SecurityCategory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       SecurityCategory_sequence, hf_index, ett_x411_SecurityCategory);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   SecurityCategory_sequence, hf_index, ett_x411_SecurityCategory);
 
   return offset;
 }
-static int dissect_SecurityCategories_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityCategory(FALSE, tvb, offset, actx, tree, hf_x411_SecurityCategories_item);
-}
 
 
-static const ber_old_sequence_t SecurityCategories_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_SecurityCategories_item },
+static const ber_sequence_t SecurityCategories_set_of[1] = {
+  { &hf_x411_SecurityCategories_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_SecurityCategory },
 };
 
 static int
 dissect_x411_SecurityCategories(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SecurityCategories_set_of, hf_index, ett_x411_SecurityCategories);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SecurityCategories_set_of, hf_index, ett_x411_SecurityCategories);
 
   return offset;
 }
-static int dissect_security_categories(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityCategories(FALSE, tvb, offset, actx, tree, hf_x411_security_categories);
-}
 
 
-static const ber_old_sequence_t SecurityLabel_set[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_policy_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_classification },
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_privacy_mark },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_security_categories },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t SecurityLabel_set[] = {
+  { &hf_x411_security_policy_identifier, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_SecurityPolicyIdentifier },
+  { &hf_x411_security_classification, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_SecurityClassification },
+  { &hf_x411_privacy_mark   , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PrivacyMark },
+  { &hf_x411_security_categories, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_SecurityCategories },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
 dissect_x411_SecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  SecurityLabel_set, hf_index, ett_x411_SecurityLabel);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              SecurityLabel_set, hf_index, ett_x411_SecurityLabel);
 
   return offset;
 }
-static int dissect_SecurityContext_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityLabel(FALSE, tvb, offset, actx, tree, hf_x411_SecurityContext_item);
-}
 
 
-static const ber_old_sequence_t SecurityContext_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_SecurityContext_item },
+static const ber_sequence_t SecurityContext_set_of[1] = {
+  { &hf_x411_SecurityContext_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_SecurityLabel },
 };
 
 int
 dissect_x411_SecurityContext(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SecurityContext_set_of, hf_index, ett_x411_SecurityContext);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SecurityContext_set_of, hf_index, ett_x411_SecurityContext);
 
   return offset;
 }
-static int dissect_security_context_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityContext(TRUE, tvb, offset, actx, tree, hf_x411_security_context);
-}
-static int dissect_permissible_security_context_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityContext(TRUE, tvb, offset, actx, tree, hf_x411_permissible_security_context);
-}
-static int dissect_security_labels_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SecurityContext(TRUE, tvb, offset, actx, tree, hf_x411_security_labels);
-}
 
 
-static const ber_old_sequence_t AuthenticatedArgument_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_authenticated_initiator_name_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_credentials_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_context_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t AuthenticatedArgument_set[] = {
+  { &hf_x411_authenticated_initiator_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MTAName },
+  { &hf_x411_initiator_credentials, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_InitiatorCredentials },
+  { &hf_x411_security_context, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SecurityContext },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_AuthenticatedArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  AuthenticatedArgument_set, hf_index, ett_x411_AuthenticatedArgument);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              AuthenticatedArgument_set, hf_index, ett_x411_AuthenticatedArgument);
 
   return offset;
 }
-static int dissect_authenticated_argument_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AuthenticatedArgument(TRUE, tvb, offset, actx, tree, hf_x411_authenticated_argument);
-}
 
 
 static const value_string x411_MTABindArgument_vals[] = {
@@ -1304,50 +1174,44 @@ static const value_string x411_MTABindArgument_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t MTABindArgument_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_unauthenticated },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_authenticated_argument_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t MTABindArgument_choice[] = {
+  {   0, &hf_x411_unauthenticated, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x411_NULL },
+  {   1, &hf_x411_authenticated_argument, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_AuthenticatedArgument },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MTABindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     MTABindArgument_choice, hf_index, ett_x411_MTABindArgument,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 MTABindArgument_choice, hf_index, ett_x411_MTABindArgument,
+                                 NULL);
 
   return offset;
 }
 
 
 
-static int
+int
 dissect_x411_ResponderCredentials(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_Credentials(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_responder_credentials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ResponderCredentials(TRUE, tvb, offset, actx, tree, hf_x411_responder_credentials);
-}
 
 
-static const ber_old_sequence_t AuthenticatedResult_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_authenticated_responder_name_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_credentials_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t AuthenticatedResult_set[] = {
+  { &hf_x411_authenticated_responder_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MTAName },
+  { &hf_x411_responder_credentials, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ResponderCredentials },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_AuthenticatedResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  AuthenticatedResult_set, hf_index, ett_x411_AuthenticatedResult);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              AuthenticatedResult_set, hf_index, ett_x411_AuthenticatedResult);
 
   return offset;
 }
-static int dissect_authenticated_result_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AuthenticatedResult(TRUE, tvb, offset, actx, tree, hf_x411_authenticated_result);
-}
 
 
 static const value_string x411_MTABindResult_vals[] = {
@@ -1356,17 +1220,17 @@ static const value_string x411_MTABindResult_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t MTABindResult_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_unauthenticated },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_authenticated_result_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t MTABindResult_choice[] = {
+  {   0, &hf_x411_unauthenticated, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x411_NULL },
+  {   1, &hf_x411_authenticated_result, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_AuthenticatedResult },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MTABindResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     MTABindResult_choice, hf_index, ett_x411_MTABindResult,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 MTABindResult_choice, hf_index, ett_x411_MTABindResult,
+                                 NULL);
 
   return offset;
 }
@@ -1384,10 +1248,10 @@ static const value_string x411_MTABindError_vals[] = {
 
 static int
 dissect_x411_MTABindError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 683 "x411.cnf"
+#line 868 "x411.cnf"
   int error = -1;
     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  &error);
+                                                &error);
 
   if((error != -1) && check_col(actx->pinfo->cinfo, COL_INFO))
     col_append_fstr(actx->pinfo->cinfo, COL_INFO, " (%s)", val_to_str(error, x411_MTABindError_vals, "error(%d)"));
@@ -1400,8 +1264,8 @@ dissect_x411_MTABindError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
 
 
 static int
-dissect_x411_NumericString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 494 "x411.cnf"
+dissect_x411_AddrNumericString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 630 "x411.cnf"
        tvbuff_t        *nstring = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
@@ -1416,131 +1280,59 @@ dissect_x411_NumericString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_x121_address(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(FALSE, tvb, offset, actx, tree, hf_x411_x121_address);
-}
-static int dissect_numeric(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(FALSE, tvb, offset, actx, tree, hf_x411_numeric);
-}
-static int dissect_x121_dcc_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(FALSE, tvb, offset, actx, tree, hf_x411_x121_dcc_code);
-}
-static int dissect_numeric_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(FALSE, tvb, offset, actx, tree, hf_x411_numeric_code);
-}
-static int dissect_number_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(TRUE, tvb, offset, actx, tree, hf_x411_number);
-}
-static int dissect_sub_address_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericString(TRUE, tvb, offset, actx, tree, hf_x411_sub_address);
-}
 
 
 
 static int
-dissect_x411_PrintableString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 516 "x411.cnf"
-       tvbuff_t        *pstring = NULL;
-       char            *fmt = NULL;
+dissect_x411_AddrPrintableString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 619 "x411.cnf"
+       tvbuff_t        *nstring = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
                                             actx, tree, tvb, offset, hf_index,
-                                            &pstring);
-
-
-       if(doing_address && pstring) {
-         if(hf_index == hf_x411_printable_surname)                     fmt = "/S=";
-         else if(hf_index == hf_x411_printable_given_name)             fmt = "/G=";
-         else if(hf_index == hf_x411_printable_initials)               fmt = "/I=";
-         else if(hf_index == hf_x411_printable_generation_qualifier)   fmt = "/GQ=";
-         else if(hf_index == hf_x411_printable_type)                   fmt = "/DD.";
-         else if(hf_index == hf_x411_printable_value)                  fmt = "=";
-               
-         if(fmt)
-           g_strlcat(oraddress, fmt, MAX_ORA_STR_LEN);
+                                            &nstring);
 
-         g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
 
-       }
+       if(doing_address && nstring)
+               g_strlcat(oraddress, tvb_format_text(nstring, 0, tvb_length(nstring)), MAX_ORA_STR_LEN);
 
 
 
   return offset;
 }
-static int dissect_tsap_id(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_tsap_id);
-}
-static int dissect_printable(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable);
-}
-static int dissect_iso_3166_alpha2_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_iso_3166_alpha2_code);
-}
-static int dissect_printable_surname_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(TRUE, tvb, offset, actx, tree, hf_x411_printable_surname);
-}
-static int dissect_printable_given_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(TRUE, tvb, offset, actx, tree, hf_x411_printable_given_name);
-}
-static int dissect_printable_initials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(TRUE, tvb, offset, actx, tree, hf_x411_printable_initials);
-}
-static int dissect_printable_generation_qualifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(TRUE, tvb, offset, actx, tree, hf_x411_printable_generation_qualifier);
-}
-static int dissect_printable_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable_type);
-}
-static int dissect_printable_value(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable_value);
-}
-static int dissect_iso_639_language_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_iso_639_language_code);
-}
-static int dissect_printable_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable_code);
-}
-static int dissect_printable_address_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable_address_item);
-}
-static int dissect_printable_string(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrintableString(FALSE, tvb, offset, actx, tree, hf_x411_printable_string);
-}
 
 
-static const value_string x411_CountryName_vals[] = {
+static const value_string x411_CountryName_U_vals[] = {
   {   0, "x121-dcc-code" },
   {   1, "iso-3166-alpha2-code" },
   { 0, NULL }
 };
 
-static const ber_old_choice_t CountryName_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x121_dcc_code },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_iso_3166_alpha2_code },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t CountryName_U_choice[] = {
+  {   0, &hf_x411_x121_dcc_code  , BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_iso_3166_alpha2_code, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrPrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 271 "x411.cnf"
- gint8 class;
- gboolean pc, ind_field;
- gint32 tag;
- guint32 len1;
-
- if(!implicit_tag){
-   /* XXX  asn2wrs can not yet handle tagged assignment yes so this
-    * XXX is some conformance file magic to work around that bug
-    */
-    offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
-    offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
- }
+dissect_x411_CountryName_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 CountryName_U_choice, hf_index, ett_x411_CountryName_U,
+                                 NULL);
+
+  return offset;
+}
+
 
+
+static int
+dissect_x411_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 436 "x411.cnf"
  if(doing_address)
     g_strlcat(oraddress, "/C=", MAX_ORA_STR_LEN);
-
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                              CountryName_choice, hf_index, ett_x411_CountryName, NULL);
+   offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 1, TRUE, dissect_x411_CountryName_U);
 
 
 
@@ -1548,55 +1340,46 @@ dissect_x411_CountryName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
   return offset;
 }
-static int dissect_country_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_CountryName(FALSE, tvb, offset, actx, tree, hf_x411_country_name);
-}
 
 
-static const value_string x411_AdministrationDomainName_vals[] = {
+static const value_string x411_AdministrationDomainName_U_vals[] = {
   {   0, "numeric" },
   {   1, "printable" },
   { 0, NULL }
 };
 
-static const ber_old_choice_t AdministrationDomainName_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t AdministrationDomainName_U_choice[] = {
+  {   0, &hf_x411_numeric        , BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_printable      , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrPrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_AdministrationDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 293 "x411.cnf"
- gint8 class;
- gboolean pc, ind_field;
- gint32 tag;
- guint32 len1;
-
- if(!implicit_tag){
-   /* XXX  asn2wrs can not yet handle tagged assignment yes so this
-    * XXX is some conformance file magic to work around that bug
-    */
-    offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
-    offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
- }
+dissect_x411_AdministrationDomainName_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 AdministrationDomainName_U_choice, hf_index, ett_x411_AdministrationDomainName_U,
+                                 NULL);
+
+  return offset;
+}
+
 
+
+static int
+dissect_x411_AdministrationDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 443 "x411.cnf"
   if(doing_address)
     g_strlcat(oraddress, "/A=", MAX_ORA_STR_LEN);
 
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                              AdministrationDomainName_choice, hf_index, ett_x411_AdministrationDomainName, NULL);
+   offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 2, TRUE, dissect_x411_AdministrationDomainName_U);
+
+
 
 
 
   return offset;
 }
-static int dissect_administration_domain_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AdministrationDomainName(FALSE, tvb, offset, actx, tree, hf_x411_administration_domain_name);
-}
-static int dissect_administration_domain_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AdministrationDomainName(TRUE, tvb, offset, actx, tree, hf_x411_administration_domain_name);
-}
 
 
 static const value_string x411_PrivateDomainIdentifier_vals[] = {
@@ -1605,52 +1388,56 @@ static const value_string x411_PrivateDomainIdentifier_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t PrivateDomainIdentifier_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t PrivateDomainIdentifier_choice[] = {
+  {   0, &hf_x411_numeric_private_domain_identifier, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_printable_private_domain_identifier, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrPrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PrivateDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 456 "x411.cnf"
+#line 570 "x411.cnf"
 
        if(doing_address)
                g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
 
-         offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     PrivateDomainIdentifier_choice, hf_index, ett_x411_PrivateDomainIdentifier,
-                                     NULL);
+         offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 PrivateDomainIdentifier_choice, hf_index, ett_x411_PrivateDomainIdentifier,
+                                 NULL);
 
 
 
 
   return offset;
 }
-static int dissect_private_domain_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrivateDomainIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_private_domain_identifier);
-}
-static int dissect_private_domain_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrivateDomainIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_private_domain_identifier);
-}
 
 
-static const ber_old_sequence_t GlobalDomainIdentifier_sequence[] = {
-  { BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_country_name },
-  { BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_administration_domain_name },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_identifier },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t GlobalDomainIdentifier_U_sequence[] = {
+  { &hf_x411_country_name   , BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_x411_CountryName },
+  { &hf_x411_administration_domain_name, BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_x411_AdministrationDomainName },
+  { &hf_x411_private_domain_identifier, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_PrivateDomainIdentifier },
+  { NULL, 0, 0, 0, NULL }
 };
 
+static int
+dissect_x411_GlobalDomainIdentifier_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   GlobalDomainIdentifier_U_sequence, hf_index, ett_x411_GlobalDomainIdentifier_U);
+
+  return offset;
+}
+
+
+
 static int
 dissect_x411_GlobalDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 563 "x411.cnf"
+#line 748 "x411.cnf"
        
        oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';     
        address_item = tree;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       GlobalDomainIdentifier_sequence, hf_index, ett_x411_GlobalDomainIdentifier);
+         offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 3, TRUE, dissect_x411_GlobalDomainIdentifier_U);
 
 
        if(*oraddress) {
@@ -1666,21 +1453,12 @@ dissect_x411_GlobalDomainIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_
 
   return offset;
 }
-static int dissect_global_domain_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_global_domain_identifier);
-}
-static int dissect_domain(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_domain);
-}
-static int dissect_attempted_domain(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_GlobalDomainIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_attempted_domain);
-}
 
 
 
 static int
 dissect_x411_LocalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 582 "x411.cnf"
+#line 767 "x411.cnf"
        tvbuff_t        *id = NULL;
        
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_IA5String,
@@ -1700,28 +1478,35 @@ dissect_x411_LocalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
 
   return offset;
 }
-static int dissect_local_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_LocalIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_local_identifier);
-}
 
 
-static const ber_old_sequence_t MTSIdentifier_sequence[] = {
-  { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_local_identifier },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MTSIdentifier_U_sequence[] = {
+  { &hf_x411_global_domain_identifier, BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_local_identifier, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_LocalIdentifier },
+  { NULL, 0, 0, 0, NULL }
 };
 
+static int
+dissect_x411_MTSIdentifier_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MTSIdentifier_U_sequence, hf_index, ett_x411_MTSIdentifier_U);
+
+  return offset;
+}
+
+
+
 static int
 dissect_x411_MTSIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 595 "x411.cnf"
+#line 780 "x411.cnf"
 
        doing_address = TRUE;
 
        if(hf_index == hf_x411_subject_identifier)
                doing_subjectid = TRUE;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MTSIdentifier_sequence, hf_index, ett_x411_MTSIdentifier);
+         offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 4, TRUE, dissect_x411_MTSIdentifier_U);
 
 
        doing_address = FALSE;
@@ -1739,19 +1524,23 @@ dissect_x411_MTSIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
 static int
 dissect_x411_MessageIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
+#line 742 "x411.cnf"
+
+       address_item = NULL;
+
+         offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
+
+
+
 
   return offset;
 }
-static int dissect_message_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_message_identifier);
-}
 
 
 
 static int
 dissect_x411_X121Address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 425 "x411.cnf"
+#line 539 "x411.cnf"
        tvbuff_t        *string = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
@@ -1778,15 +1567,12 @@ dissect_x411_NetworkAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
 
   return offset;
 }
-static int dissect_network_address_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NetworkAddress(TRUE, tvb, offset, actx, tree, hf_x411_network_address);
-}
 
 
 
 static int
 dissect_x411_TerminalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 439 "x411.cnf"
+#line 553 "x411.cnf"
        tvbuff_t        *string = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
@@ -1803,9 +1589,6 @@ dissect_x411_TerminalIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in
 
   return offset;
 }
-static int dissect_terminal_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TerminalIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_terminal_identifier);
-}
 
 
 static const value_string x411_PrivateDomainName_vals[] = {
@@ -1814,37 +1597,34 @@ static const value_string x411_PrivateDomainName_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t PrivateDomainName_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t PrivateDomainName_choice[] = {
+  {   0, &hf_x411_numeric_private_domain_name, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_printable_private_domain_name, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrPrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PrivateDomainName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 449 "x411.cnf"
+#line 563 "x411.cnf"
 
        if(doing_address)
                g_strlcat(oraddress, "/P=", MAX_ORA_STR_LEN);
 
-         offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     PrivateDomainName_choice, hf_index, ett_x411_PrivateDomainName,
-                                     NULL);
+         offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 PrivateDomainName_choice, hf_index, ett_x411_PrivateDomainName,
+                                 NULL);
 
 
 
 
   return offset;
 }
-static int dissect_private_domain_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PrivateDomainName(TRUE, tvb, offset, actx, tree, hf_x411_private_domain_name);
-}
 
 
 
 static int
 dissect_x411_OrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 466 "x411.cnf"
+#line 580 "x411.cnf"
        tvbuff_t        *string = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
@@ -1861,9 +1641,6 @@ dissect_x411_OrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_organization_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OrganizationName(TRUE, tvb, offset, actx, tree, hf_x411_organization_name);
-}
 
 
 
@@ -1875,223 +1652,392 @@ dissect_x411_NumericUserIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_numeric_user_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NumericUserIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_numeric_user_identifier);
-}
 
 
-static const ber_old_sequence_t PersonalName_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_printable_surname_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_given_name_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_initials_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_printable_generation_qualifier_impl },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_PersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PersonalName_set, hf_index, ett_x411_PersonalName);
+dissect_x411_T_printable_surname(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 650 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &pstring);
+
+
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "/S=", MAX_ORA_STR_LEN);
+         g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+       }
+
 
   return offset;
 }
-static int dissect_personal_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PersonalName(TRUE, tvb, offset, actx, tree, hf_x411_personal_name);
-}
 
 
 
 static int
-dissect_x411_OrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+dissect_x411_T_printable_given_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 659 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
                                             actx, tree, tvb, offset, hf_index,
-                                            NULL);
+                                            &pstring);
+
+
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "/G=", MAX_ORA_STR_LEN);
+         g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+       }
+
 
   return offset;
 }
-static int dissect_OrganizationalUnitNames_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OrganizationalUnitName(FALSE, tvb, offset, actx, tree, hf_x411_OrganizationalUnitNames_item);
-}
 
 
-static const ber_old_sequence_t OrganizationalUnitNames_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_OrganizationalUnitNames_item },
-};
 
 static int
-dissect_x411_OrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          OrganizationalUnitNames_sequence_of, hf_index, ett_x411_OrganizationalUnitNames);
+dissect_x411_T_printable_initials(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 668 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &pstring);
+
+
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "/I=", MAX_ORA_STR_LEN);
+         g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+       }
+
 
   return offset;
 }
-static int dissect_organizational_unit_names_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OrganizationalUnitNames(TRUE, tvb, offset, actx, tree, hf_x411_organizational_unit_names);
-}
 
 
-static const ber_old_sequence_t BuiltInStandardAttributes_sequence[] = {
-  { BER_CLASS_APP, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_country_name },
-  { BER_CLASS_APP, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_administration_domain_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_network_address_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_terminal_identifier_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_name_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_organization_name_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_numeric_user_identifier_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_personal_name_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_organizational_unit_names_impl },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_BuiltInStandardAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 619 "x411.cnf"
+dissect_x411_T_printable_generation_qualifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 677 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
 
-       address_item = tree;    
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &pstring);
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       BuiltInStandardAttributes_sequence, hf_index, ett_x411_BuiltInStandardAttributes);
 
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "/GQ=", MAX_ORA_STR_LEN);
+         g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+       }
 
 
 
   return offset;
 }
-static int dissect_built_in_standard_attributes(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInStandardAttributes(FALSE, tvb, offset, actx, tree, hf_x411_built_in_standard_attributes);
-}
 
 
-static const ber_old_sequence_t BuiltInDomainDefinedAttribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_value },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PersonalName_set[] = {
+  { &hf_x411_printable_surname, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_T_printable_surname },
+  { &hf_x411_printable_given_name, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_printable_given_name },
+  { &hf_x411_printable_initials, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_printable_initials },
+  { &hf_x411_printable_generation_qualifier, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_printable_generation_qualifier },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_BuiltInDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       BuiltInDomainDefinedAttribute_sequence, hf_index, ett_x411_BuiltInDomainDefinedAttribute);
+dissect_x411_PersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PersonalName_set, hf_index, ett_x411_PersonalName);
 
   return offset;
 }
-static int dissect_BuiltInDomainDefinedAttributes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInDomainDefinedAttribute(FALSE, tvb, offset, actx, tree, hf_x411_BuiltInDomainDefinedAttributes_item);
-}
 
 
-static const ber_old_sequence_t BuiltInDomainDefinedAttributes_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_BuiltInDomainDefinedAttributes_item },
-};
 
 static int
-dissect_x411_BuiltInDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          BuiltInDomainDefinedAttributes_sequence_of, hf_index, ett_x411_BuiltInDomainDefinedAttributes);
+dissect_x411_OrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 593 "x411.cnf"
+       tvbuff_t        *string = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &string);
+
+
+       if(doing_address && string) {
+               g_strlcat(oraddress, "/OU=", MAX_ORA_STR_LEN);
+               g_strlcat(oraddress, tvb_format_text(string, 0, tvb_length(string)), MAX_ORA_STR_LEN);
+       }
+
+
 
   return offset;
 }
-static int dissect_built_in_domain_defined_attributes(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInDomainDefinedAttributes(FALSE, tvb, offset, actx, tree, hf_x411_built_in_domain_defined_attributes);
-}
 
 
+static const ber_sequence_t OrganizationalUnitNames_sequence_of[1] = {
+  { &hf_x411_OrganizationalUnitNames_item, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_OrganizationalUnitName },
+};
 
 static int
-dissect_x411_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  &extension_id);
+dissect_x411_OrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      OrganizationalUnitNames_sequence_of, hf_index, ett_x411_OrganizationalUnitNames);
 
   return offset;
 }
-static int dissect_messages_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_messages);
-}
-static int dissect_delivery_queue_octets_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_delivery_queue_octets);
+
+
+static const ber_sequence_t BuiltInStandardAttributes_sequence[] = {
+  { &hf_x411_country_name   , BER_CLASS_APP, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_CountryName },
+  { &hf_x411_administration_domain_name, BER_CLASS_APP, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_AdministrationDomainName },
+  { &hf_x411_network_address, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_NetworkAddress },
+  { &hf_x411_terminal_identifier, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TerminalIdentifier },
+  { &hf_x411_private_domain_name, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_PrivateDomainName },
+  { &hf_x411_organization_name, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OrganizationName },
+  { &hf_x411_numeric_user_identifier, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_NumericUserIdentifier },
+  { &hf_x411_personal_name  , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_PersonalName },
+  { &hf_x411_organizational_unit_names, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OrganizationalUnitNames },
+  { NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_x411_BuiltInStandardAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 804 "x411.cnf"
+
+       address_item = tree;    
+
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   BuiltInStandardAttributes_sequence, hf_index, ett_x411_BuiltInStandardAttributes);
+
+
+
+
+  return offset;
 }
-static int dissect_standard_extension_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_standard_extension);
+
+
+
+static int
+dissect_x411_T_printable_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 687 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &pstring);
+
+
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "/DD.", MAX_ORA_STR_LEN);
+           g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+           g_strlcat(ddatype, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+       }
+       
+
+
+  return offset;
 }
-static int dissect_extension_attribute_type_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_extension_attribute_type);
+
+
+
+static int
+dissect_x411_T_printable_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 698 "x411.cnf"
+       tvbuff_t        *pstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &pstring);
+
+
+       if(doing_address && pstring) {
+           g_strlcat(oraddress, "=", MAX_ORA_STR_LEN);
+           g_strlcat(oraddress, tvb_format_text(pstring, 0, tvb_length(pstring)), MAX_ORA_STR_LEN);
+           if (*ddatype) {
+              proto_item_append_text (tree, " (%s=%s)", ddatype, tvb_format_text(pstring, 0, tvb_length(pstring)));
+           }
+       }
+       
+
+
+  return offset;
 }
-static int dissect_token_data_type_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_token_data_type);
+
+
+static const ber_sequence_t BuiltInDomainDefinedAttribute_sequence[] = {
+  { &hf_x411_printable_type , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_T_printable_type },
+  { &hf_x411_printable_value, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_T_printable_value },
+  { NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_x411_BuiltInDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 711 "x411.cnf"
+        ddatype = ep_alloc(MAX_ORA_STR_LEN); ddatype[0] = '\0';
+
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   BuiltInDomainDefinedAttribute_sequence, hf_index, ett_x411_BuiltInDomainDefinedAttribute);
+
+
+
+
+  return offset;
 }
-static int dissect_message_sequence_number_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_INTEGER(TRUE, tvb, offset, actx, tree, hf_x411_message_sequence_number);
+
+
+static const ber_sequence_t BuiltInDomainDefinedAttributes_sequence_of[1] = {
+  { &hf_x411_BuiltInDomainDefinedAttributes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInDomainDefinedAttribute },
+};
+
+static int
+dissect_x411_BuiltInDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      BuiltInDomainDefinedAttributes_sequence_of, hf_index, ett_x411_BuiltInDomainDefinedAttributes);
+
+  return offset;
+}
+
+
+static const value_string x411_ExtensionAttributeType_vals[] = {
+  {   1, "common-name" },
+  {   2, "teletex-common-name" },
+  {   3, "teletex-organization-name" },
+  {   4, "teletex-personal-name" },
+  {   5, "teletex-organizational-unit-names" },
+  {   6, "teletex-domain-defined-attributes" },
+  {   7, "pds-name" },
+  {   8, "physical-delivery-country-name" },
+  {   9, "postal-code" },
+  {  10, "physical-delivery-office-name" },
+  {  11, "physical-delivery-office-number" },
+  {  12, "extension-OR-address-components" },
+  {  13, "physical-delivery-personal-name" },
+  {  14, "physical-delivery-organization-name" },
+  {  15, "extension-physical-delivery-address-components" },
+  {  16, "unformatted-postal-address" },
+  {  17, "street-address" },
+  {  18, "post-office-box-address" },
+  {  19, "poste-restante-address" },
+  {  20, "unique-postal-name" },
+  {  21, "local-postal-attributes" },
+  {  22, "extended-network-address" },
+  {  23, "terminal-type" },
+  {  24, "universal-common-name" },
+  {  25, "universal-organization-name" },
+  {  26, "universal-personal-name" },
+  {  27, "universal-organizational-unit-names" },
+  {  28, "universal-domain-defined-attributes" },
+  {  29, "universal-physical-delivery-office-name" },
+  {  30, "universal-physical-delivery-office-number" },
+  {  31, "universal-extension-OR-address-components" },
+  {  32, "universal-physical-delivery-personal-name" },
+  {  33, "universal-physical-delivery-organization-name" },
+  {  34, "universal-extension-physical-delivery-address-components" },
+  {  35, "universal-unformatted-postal-address" },
+  {  36, "universal-street-address" },
+  {  37, "universal-post-office-box-address" },
+  {  38, "universal-poste-restante-address" },
+  {  39, "universal-unique-postal-name" },
+  {  40, "universal-local-postal-attributes" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_x411_ExtensionAttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &extension_id);
+
+  return offset;
 }
 
 
 
 static int
 dissect_x411_T_extension_attribute_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 264 "x411.cnf"
+#line 416 "x411.cnf"
+
+       proto_item_append_text(tree, " (%s)", val_to_str(extension_id, x411_ExtensionAttributeType_vals, "extension-attribute-type %d")); 
+       if (dissector_try_port(x411_extension_attribute_dissector_table, extension_id, tvb, actx->pinfo, tree)) {
+               offset =tvb_length(tvb);
+       } else {
+               proto_item *item = NULL;
+               proto_tree *next_tree = NULL;
+
+               item = proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), 
+                       "Dissector for extension-attribute-type %d not implemented.  Contact Wireshark developers if you want this supported", extension_id);
+               next_tree = proto_item_add_subtree(item, ett_x411_unknown_extension_attribute_type);
+               offset = dissect_unknown_ber(actx->pinfo, tvb, offset, next_tree);
+               expert_add_info_format(actx->pinfo, item, PI_UNDECODED, PI_WARN, "Unknown extension-attribute-type");
+       }
 
-       offset=call_x411_oid_callback("x411.extension-attribute", tvb, offset, actx->pinfo, tree);
 
 
 
   return offset;
 }
-static int dissect_extension_attribute_value_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_extension_attribute_value(TRUE, tvb, offset, actx, tree, hf_x411_extension_attribute_value);
-}
 
 
-static const ber_old_sequence_t ExtensionAttribute_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_extension_attribute_type_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_extension_attribute_value_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ExtensionAttribute_sequence[] = {
+  { &hf_x411_extension_attribute_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_ExtensionAttributeType },
+  { &hf_x411_extension_attribute_value, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_T_extension_attribute_value },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ExtensionAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       ExtensionAttribute_sequence, hf_index, ett_x411_ExtensionAttribute);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   ExtensionAttribute_sequence, hf_index, ett_x411_ExtensionAttribute);
 
   return offset;
 }
-static int dissect_ExtensionAttributes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtensionAttribute(FALSE, tvb, offset, actx, tree, hf_x411_ExtensionAttributes_item);
-}
 
 
-static const ber_old_sequence_t ExtensionAttributes_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_ExtensionAttributes_item },
+static const ber_sequence_t ExtensionAttributes_set_of[1] = {
+  { &hf_x411_ExtensionAttributes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_ExtensionAttribute },
 };
 
 static int
 dissect_x411_ExtensionAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     ExtensionAttributes_set_of, hf_index, ett_x411_ExtensionAttributes);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 ExtensionAttributes_set_of, hf_index, ett_x411_ExtensionAttributes);
 
   return offset;
 }
-static int dissect_extension_attributes(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtensionAttributes(FALSE, tvb, offset, actx, tree, hf_x411_extension_attributes);
-}
 
 
-static const ber_old_sequence_t ORName_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_built_in_standard_attributes },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_built_in_domain_defined_attributes },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extension_attributes },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_directory_name_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ORName_U_sequence[] = {
+  { &hf_x411_built_in_standard_attributes, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInStandardAttributes },
+  { &hf_x411_built_in_domain_defined_attributes, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInDomainDefinedAttributes },
+  { &hf_x411_extension_attributes, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ExtensionAttributes },
+  { &hf_x411_directory_name , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509if_Name },
+  { NULL, 0, 0, 0, NULL }
 };
 
+static int
+dissect_x411_ORName_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   ORName_U_sequence, hf_index, ett_x411_ORName_U);
+
+  return offset;
+}
+
+
+
 int
 dissect_x411_ORName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 550 "x411.cnf"
+#line 729 "x411.cnf"
        
        oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';     
        address_item = NULL;
        doing_address = TRUE;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       ORName_sequence, hf_index, ett_x411_ORName);
+         offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 0, TRUE, dissect_x411_ORName_U);
 
 
        if(*oraddress && address_item)
@@ -2103,12 +2049,6 @@ dissect_x411_ORName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_
 
   return offset;
 }
-static int dissect_exact_match_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORName(TRUE, tvb, offset, actx, tree, hf_x411_exact_match);
-}
-static int dissect_pattern_match_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORName(TRUE, tvb, offset, actx, tree, hf_x411_pattern_match);
-}
 
 
 
@@ -2118,21 +2058,6 @@ dissect_x411_ORAddressAndOptionalDirectoryName(gboolean implicit_tag _U_, tvbuff
 
   return offset;
 }
-static int dissect_user_agent(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, actx, tree, hf_x411_user_agent);
-}
-static int dissect_message_store_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOptionalDirectoryName(TRUE, tvb, offset, actx, tree, hf_x411_message_store);
-}
-static int dissect_intended_recipient(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, actx, tree, hf_x411_intended_recipient);
-}
-static int dissect_dl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, actx, tree, hf_x411_dl);
-}
-static int dissect_originator_or_dl_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOptionalDirectoryName(FALSE, tvb, offset, actx, tree, hf_x411_originator_or_dl_name);
-}
 
 
 
@@ -2142,9 +2067,6 @@ dissect_x411_MTAOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_mta_originator_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAOriginatorName(FALSE, tvb, offset, actx, tree, hf_x411_mta_originator_name);
-}
 
 
 static const asn_namedbit BuiltInEncodedInformationTypes_bits[] = {
@@ -2168,9 +2090,6 @@ dissect_x411_BuiltInEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t
 
   return offset;
 }
-static int dissect_built_in_encoded_information_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_built_in_encoded_information_types);
-}
 
 
 static const asn_namedbit G3FacsimileNonBasicParameters_bits[] = {
@@ -2209,81 +2128,35 @@ dissect_x411_G3FacsimileNonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *
 
   return offset;
 }
-static int dissect_g3_facsimile_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_G3FacsimileNonBasicParameters(TRUE, tvb, offset, actx, tree, hf_x411_g3_facsimile);
-}
 
 
 
 static int
 dissect_x411_TeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 504 "x411.cnf"
-       tvbuff_t        *tstring = NULL;
-
-         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
                                             actx, tree, tvb, offset, hf_index,
                                             NULL);
 
-
-       if(doing_address && tstring) 
-               g_strlcat(oraddress, tvb_format_text(tstring, 0, tvb_length(tstring)), MAX_ORA_STR_LEN);
-
-
-
-
   return offset;
 }
-static int dissect_teletex_surname_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_teletex_surname);
-}
-static int dissect_teletex_given_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_teletex_given_name);
-}
-static int dissect_teletex_initials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_teletex_initials);
-}
-static int dissect_teletex_generation_qualifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_teletex_generation_qualifier);
-}
-static int dissect_teletex_string(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(FALSE, tvb, offset, actx, tree, hf_x411_teletex_string);
-}
-static int dissect_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(FALSE, tvb, offset, actx, tree, hf_x411_type);
-}
-static int dissect_teletex_value(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(FALSE, tvb, offset, actx, tree, hf_x411_teletex_value);
-}
-static int dissect_graphic_character_sets_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_graphic_character_sets);
-}
-static int dissect_control_character_sets_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_control_character_sets);
-}
-static int dissect_miscellaneous_terminal_capabilities_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexString(TRUE, tvb, offset, actx, tree, hf_x411_miscellaneous_terminal_capabilities);
-}
 
 
-static const ber_old_sequence_t TeletexNonBasicParameters_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_graphic_character_sets_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_control_character_sets_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_page_formats_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_miscellaneous_terminal_capabilities_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_private_use_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t TeletexNonBasicParameters_set[] = {
+  { &hf_x411_graphic_character_sets, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TeletexString },
+  { &hf_x411_control_character_sets, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TeletexString },
+  { &hf_x411_page_formats   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OCTET_STRING },
+  { &hf_x411_miscellaneous_terminal_capabilities, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TeletexString },
+  { &hf_x411_private_use    , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OCTET_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
 dissect_x411_TeletexNonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  TeletexNonBasicParameters_set, hf_index, ett_x411_TeletexNonBasicParameters);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              TeletexNonBasicParameters_set, hf_index, ett_x411_TeletexNonBasicParameters);
 
   return offset;
 }
-static int dissect_teletex_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexNonBasicParameters(TRUE, tvb, offset, actx, tree, hf_x411_teletex);
-}
 
 
 
@@ -2293,72 +2166,58 @@ dissect_x411_ExtendedEncodedInformationType(gboolean implicit_tag _U_, tvbuff_t
 
   return offset;
 }
-static int dissect_ExtendedEncodedInformationTypes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedEncodedInformationType(FALSE, tvb, offset, actx, tree, hf_x411_ExtendedEncodedInformationTypes_item);
-}
 
 
-static const ber_old_sequence_t ExtendedEncodedInformationTypes_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_ExtendedEncodedInformationTypes_item },
+static const ber_sequence_t ExtendedEncodedInformationTypes_set_of[1] = {
+  { &hf_x411_ExtendedEncodedInformationTypes_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x411_ExtendedEncodedInformationType },
 };
 
 static int
 dissect_x411_ExtendedEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     ExtendedEncodedInformationTypes_set_of, hf_index, ett_x411_ExtendedEncodedInformationTypes);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 ExtendedEncodedInformationTypes_set_of, hf_index, ett_x411_ExtendedEncodedInformationTypes);
 
   return offset;
 }
-static int dissect_unacceptable_eits_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_unacceptable_eits);
-}
-static int dissect_acceptable_eits_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_acceptable_eits);
-}
-static int dissect_exclusively_acceptable_eits_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_exclusively_acceptable_eits);
-}
-static int dissect_extended_encoded_information_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_extended_encoded_information_types);
-}
 
 
-static const ber_old_sequence_t EncodedInformationTypes_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_built_in_encoded_information_types_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3_facsimile_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extended_encoded_information_types_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t EncodedInformationTypes_U_set[] = {
+  { &hf_x411_built_in_encoded_information_types, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_BuiltInEncodedInformationTypes },
+  { &hf_x411_g3_facsimile   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_G3FacsimileNonBasicParameters },
+  { &hf_x411_teletex        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TeletexNonBasicParameters },
+  { &hf_x411_extended_encoded_information_types, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExtendedEncodedInformationTypes },
+  { NULL, 0, 0, 0, NULL }
 };
 
+static int
+dissect_x411_EncodedInformationTypes_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              EncodedInformationTypes_U_set, hf_index, ett_x411_EncodedInformationTypes_U);
+
+  return offset;
+}
+
+
+
 int
 dissect_x411_EncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  EncodedInformationTypes_set, hf_index, ett_x411_EncodedInformationTypes);
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 5, TRUE, dissect_x411_EncodedInformationTypes_U);
 
   return offset;
 }
-static int dissect_waiting_encoded_information_types(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_EncodedInformationTypes(FALSE, tvb, offset, actx, tree, hf_x411_waiting_encoded_information_types);
-}
 
 
 
-static int
+int
 dissect_x411_OriginalEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_EncodedInformationTypes(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_original_encoded_information_types(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OriginalEncodedInformationTypes(FALSE, tvb, offset, actx, tree, hf_x411_original_encoded_information_types);
-}
-static int dissect_original_encoded_information_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OriginalEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_original_encoded_information_types);
-}
 
 
-static const value_string x411_BuiltInContentType_vals[] = {
+static const value_string x411_BuiltInContentType_U_vals[] = {
   {   0, "unidentified" },
   {   1, "external" },
   {   2, "interpersonal-messaging-1984" },
@@ -2370,12 +2229,12 @@ static const value_string x411_BuiltInContentType_vals[] = {
 
 
 static int
-dissect_x411_BuiltInContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 363 "x411.cnf"
-  guint32      ict = -1;       
+dissect_x411_BuiltInContentType_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 476 "x411.cnf"
+  static guint32       ict = -1;       
 
     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  &ict);
+                                                &ict);
 
 
   /* convert integer content type to oid for dispatch when the content is found */
@@ -2395,25 +2254,29 @@ dissect_x411_BuiltInContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in
 
   return offset;
 }
-static int dissect_built_in(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInContentType(FALSE, tvb, offset, actx, tree, hf_x411_built_in);
-}
-static int dissect_built_in_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BuiltInContentType(TRUE, tvb, offset, actx, tree, hf_x411_built_in);
+
+
+
+static int
+dissect_x411_BuiltInContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 6, TRUE, dissect_x411_BuiltInContentType_U);
+
+  return offset;
 }
 
 
 
 int
 dissect_x411_ExtendedContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 347 "x411.cnf"
+#line 461 "x411.cnf"
        const char *name = NULL;
 
          offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &content_type_id);
 
 
        if(content_type_id) {
-         name = get_oid_str_name(content_type_id);
+         name = oid_resolved_from_string(content_type_id);
 
          if(!name) name = content_type_id;
 
@@ -2424,78 +2287,52 @@ dissect_x411_ExtendedContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
 
   return offset;
 }
-static int dissect_extended(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedContentType(FALSE, tvb, offset, actx, tree, hf_x411_extended);
-}
 
 
-static const value_string x411_ContentType_vals[] = {
+const value_string x411_ContentType_vals[] = {
   {   0, "built-in" },
   {   1, "extended" },
   { 0, NULL }
 };
 
-static const ber_old_choice_t ContentType_choice[] = {
-  {   0, BER_CLASS_APP, 6, BER_FLAGS_NOOWNTAG, dissect_built_in },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extended },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ContentType_choice[] = {
+  {   0, &hf_x411_built_in       , BER_CLASS_APP, 6, BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInContentType },
+  {   1, &hf_x411_extended       , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x411_ExtendedContentType },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_x411_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ContentType_choice, hf_index, ett_x411_ContentType,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ContentType_choice, hf_index, ett_x411_ContentType,
+                                 NULL);
 
   return offset;
 }
-static int dissect_content_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentType(FALSE, tvb, offset, actx, tree, hf_x411_content_type);
-}
-static int dissect_waiting_content_types_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentType(FALSE, tvb, offset, actx, tree, hf_x411_waiting_content_types_item);
-}
-static int dissect_ContentTypes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentType(FALSE, tvb, offset, actx, tree, hf_x411_ContentTypes_item);
-}
 
 
 
 static int
-dissect_x411_ContentIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 313 "x411.cnf"
- gint8 class;
- gboolean pc, ind_field;
- gint32 tag;
- guint32 len1;
-
- if(!implicit_tag){
-   /* XXX  asn2wrs can not yet handle tagged assignment yes so this
-    * XXX is some conformance file magic to work around that bug
-    */
-    offset = get_ber_identifier(tvb, offset, &class, &pc, &tag);
-    offset = get_ber_length(tree, tvb, offset, &len1, &ind_field);
- }
+dissect_x411_PrintableString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            NULL);
 
-  /* this is magic I haven't seen used before - I've stripped the tag - but now I'm going to say it is IMPLICIT! */
-  offset = dissect_ber_restricted_string(TRUE, BER_UNI_TAG_PrintableString,
-                                         actx, tree, tvb, offset, hf_index,
-                                         NULL);
+  return offset;
+}
 
 
 
+int
+dissect_x411_ContentIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 10, TRUE, dissect_x411_PrintableString);
 
   return offset;
 }
-static int dissect_content_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_content_identifier);
-}
-static int dissect_content_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_content_identifier);
-}
 
 
-static const value_string x411_Priority_vals[] = {
+static const value_string x411_Priority_U_vals[] = {
   {   0, "normal" },
   {   1, "non-urgent" },
   {   2, "urgent" },
@@ -2504,57 +2341,63 @@ static const value_string x411_Priority_vals[] = {
 
 
 static int
-dissect_x411_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_x411_Priority_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                   NULL);
 
   return offset;
 }
-static int dissect_priority(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Priority(FALSE, tvb, offset, actx, tree, hf_x411_priority);
-}
-static int dissect_permissible_lowest_priority(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Priority(FALSE, tvb, offset, actx, tree, hf_x411_permissible_lowest_priority);
-}
-static int dissect_class_priority_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Priority(FALSE, tvb, offset, actx, tree, hf_x411_class_priority_item);
+
+
+
+static int
+dissect_x411_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 7, TRUE, dissect_x411_Priority_U);
+
+  return offset;
 }
 
 
-static const asn_namedbit PerMessageIndicators_bits[] = {
-  {  0, &hf_x411_PerMessageIndicators_disclosure_of_other_recipients, -1, -1, "disclosure-of-other-recipients", NULL },
-  {  1, &hf_x411_PerMessageIndicators_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL },
-  {  2, &hf_x411_PerMessageIndicators_alternate_recipient_allowed, -1, -1, "alternate-recipient-allowed", NULL },
-  {  3, &hf_x411_PerMessageIndicators_content_return_request, -1, -1, "content-return-request", NULL },
-  {  4, &hf_x411_PerMessageIndicators_reserved, -1, -1, "reserved", NULL },
-  {  5, &hf_x411_PerMessageIndicators_bit_5, -1, -1, "bit-5", NULL },
-  {  6, &hf_x411_PerMessageIndicators_bit_6, -1, -1, "bit-6", NULL },
-  {  7, &hf_x411_PerMessageIndicators_service_message, -1, -1, "service-message", NULL },
+static const asn_namedbit PerMessageIndicators_U_bits[] = {
+  {  0, &hf_x411_PerMessageIndicators_U_disclosure_of_other_recipients, -1, -1, "disclosure-of-other-recipients", NULL },
+  {  1, &hf_x411_PerMessageIndicators_U_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL },
+  {  2, &hf_x411_PerMessageIndicators_U_alternate_recipient_allowed, -1, -1, "alternate-recipient-allowed", NULL },
+  {  3, &hf_x411_PerMessageIndicators_U_content_return_request, -1, -1, "content-return-request", NULL },
+  {  4, &hf_x411_PerMessageIndicators_U_reserved, -1, -1, "reserved", NULL },
+  {  5, &hf_x411_PerMessageIndicators_U_bit_5, -1, -1, "bit-5", NULL },
+  {  6, &hf_x411_PerMessageIndicators_U_bit_6, -1, -1, "bit-6", NULL },
+  {  7, &hf_x411_PerMessageIndicators_U_service_message, -1, -1, "service-message", NULL },
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
 static int
-dissect_x411_PerMessageIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_x411_PerMessageIndicators_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
-                                    PerMessageIndicators_bits, hf_index, ett_x411_PerMessageIndicators,
+                                    PerMessageIndicators_U_bits, hf_index, ett_x411_PerMessageIndicators_U,
                                     NULL);
 
   return offset;
 }
-static int dissect_per_message_indicators(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerMessageIndicators(FALSE, tvb, offset, actx, tree, hf_x411_per_message_indicators);
+
+
+
+int
+dissect_x411_PerMessageIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 8, TRUE, dissect_x411_PerMessageIndicators_U);
+
+  return offset;
 }
 
 
 
 static int
 dissect_x411_Time(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 662 "x411.cnf"
+#line 847 "x411.cnf"
        tvbuff_t *arrival = NULL;
 
-         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
-                                            actx, tree, tvb, offset, hf_index,
-                                            &arrival);
+         offset = dissect_ber_UTCTime(implicit_tag, actx, tree, tvb, offset, hf_index);
 
 
        if(arrival && doing_address)
@@ -2564,18 +2407,6 @@ dissect_x411_Time(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
 
   return offset;
 }
-static int dissect_redirection_time(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Time(FALSE, tvb, offset, actx, tree, hf_x411_redirection_time);
-}
-static int dissect_dl_expansion_time(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Time(FALSE, tvb, offset, actx, tree, hf_x411_dl_expansion_time);
-}
-static int dissect_origination_or_expansion_time(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Time(FALSE, tvb, offset, actx, tree, hf_x411_origination_or_expansion_time);
-}
-static int dissect_time(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Time(FALSE, tvb, offset, actx, tree, hf_x411_time);
-}
 
 
 
@@ -2585,27 +2416,21 @@ dissect_x411_DeferredDeliveryTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_deferred_delivery_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeferredDeliveryTime(TRUE, tvb, offset, actx, tree, hf_x411_deferred_delivery_time);
-}
 
 
-static const ber_old_sequence_t T_private_domain_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_administration_domain_name_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_private_domain_identifier_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t T_private_domain_sequence[] = {
+  { &hf_x411_administration_domain_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_AdministrationDomainName },
+  { &hf_x411_private_domain_identifier, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_PrivateDomainIdentifier },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_private_domain(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       T_private_domain_sequence, hf_index, ett_x411_T_private_domain);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   T_private_domain_sequence, hf_index, ett_x411_T_private_domain);
 
   return offset;
 }
-static int dissect_private_domain(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_private_domain(FALSE, tvb, offset, actx, tree, hf_x411_private_domain);
-}
 
 
 static const value_string x411_T_bilateral_domain_vals[] = {
@@ -2614,29 +2439,26 @@ static const value_string x411_T_bilateral_domain_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_bilateral_domain_choice[] = {
-  {   0, BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_administration_domain_name },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_private_domain },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_bilateral_domain_choice[] = {
+  {   0, &hf_x411_administration_domain_name, BER_CLASS_APP, 2, BER_FLAGS_NOOWNTAG, dissect_x411_AdministrationDomainName },
+  {   1, &hf_x411_private_domain , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_T_private_domain },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_bilateral_domain(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_bilateral_domain_choice, hf_index, ett_x411_T_bilateral_domain,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_bilateral_domain_choice, hf_index, ett_x411_T_bilateral_domain,
+                                 NULL);
 
   return offset;
 }
-static int dissect_bilateral_domain(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_bilateral_domain(FALSE, tvb, offset, actx, tree, hf_x411_bilateral_domain);
-}
 
 
 
 static int
 dissect_x411_T_bilateral_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 714 "x411.cnf"
+#line 915 "x411.cnf"
        proto_item *item = NULL;
        int         loffset = 0;
        guint32     len = 0;
@@ -2655,44 +2477,35 @@ dissect_x411_T_bilateral_information(gboolean implicit_tag _U_, tvbuff_t *tvb _U
 
   return offset;
 }
-static int dissect_bilateral_information(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_bilateral_information(FALSE, tvb, offset, actx, tree, hf_x411_bilateral_information);
-}
 
 
-static const ber_old_sequence_t PerDomainBilateralInformation_sequence[] = {
-  { BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_country_name },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_bilateral_domain },
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_bilateral_information },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerDomainBilateralInformation_sequence[] = {
+  { &hf_x411_country_name   , BER_CLASS_APP, 1, BER_FLAGS_NOOWNTAG, dissect_x411_CountryName },
+  { &hf_x411_bilateral_domain, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_bilateral_domain },
+  { &hf_x411_bilateral_information, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x411_T_bilateral_information },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerDomainBilateralInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       PerDomainBilateralInformation_sequence, hf_index, ett_x411_PerDomainBilateralInformation);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   PerDomainBilateralInformation_sequence, hf_index, ett_x411_PerDomainBilateralInformation);
 
   return offset;
 }
-static int dissect_per_domain_bilateral_information_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerDomainBilateralInformation(FALSE, tvb, offset, actx, tree, hf_x411_per_domain_bilateral_information_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerDomainBilateralInformation_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_domain_bilateral_information_item },
+static const ber_sequence_t SEQUENCE_OF_PerDomainBilateralInformation_sequence_of[1] = {
+  { &hf_x411_per_domain_bilateral_information_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_PerDomainBilateralInformation },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerDomainBilateralInformation_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerDomainBilateralInformation);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerDomainBilateralInformation_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerDomainBilateralInformation);
 
   return offset;
 }
-static int dissect_per_domain_bilateral_information_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation(TRUE, tvb, offset, actx, tree, hf_x411_per_domain_bilateral_information);
-}
 
 
 
@@ -2702,9 +2515,6 @@ dissect_x411_ArrivalTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
   return offset;
 }
-static int dissect_arrival_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ArrivalTime(TRUE, tvb, offset, actx, tree, hf_x411_arrival_time);
-}
 
 
 static const value_string x411_RoutingAction_vals[] = {
@@ -2716,7 +2526,7 @@ static const value_string x411_RoutingAction_vals[] = {
 
 static int
 dissect_x411_RoutingAction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 673 "x411.cnf"
+#line 858 "x411.cnf"
        int action = 0;
 
          offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
@@ -2729,9 +2539,6 @@ dissect_x411_RoutingAction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_routing_action_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RoutingAction(TRUE, tvb, offset, actx, tree, hf_x411_routing_action);
-}
 
 
 
@@ -2741,9 +2548,6 @@ dissect_x411_DeferredTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
 
   return offset;
 }
-static int dissect_deferred_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeferredTime(TRUE, tvb, offset, actx, tree, hf_x411_deferred_time);
-}
 
 
 
@@ -2753,12 +2557,6 @@ dissect_x411_ConvertedEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_
 
   return offset;
 }
-static int dissect_converted_encoded_information_types(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ConvertedEncodedInformationTypes(FALSE, tvb, offset, actx, tree, hf_x411_converted_encoded_information_types);
-}
-static int dissect_converted_encoded_information_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ConvertedEncodedInformationTypes(TRUE, tvb, offset, actx, tree, hf_x411_converted_encoded_information_types);
-}
 
 
 static const asn_namedbit OtherActions_bits[] = {
@@ -2775,29 +2573,26 @@ dissect_x411_OtherActions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offs
 
   return offset;
 }
-static int dissect_other_actions_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OtherActions(TRUE, tvb, offset, actx, tree, hf_x411_other_actions);
-}
 
 
-static const ber_old_sequence_t DomainSuppliedInformation_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_routing_action_impl },
-  { BER_CLASS_APP, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_attempted_domain },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_time_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_actions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t DomainSuppliedInformation_set[] = {
+  { &hf_x411_arrival_time   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_ArrivalTime },
+  { &hf_x411_routing_action , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_RoutingAction },
+  { &hf_x411_attempted_domain, BER_CLASS_APP, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_deferred_time  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_DeferredTime },
+  { &hf_x411_converted_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ConvertedEncodedInformationTypes },
+  { &hf_x411_other_actions  , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OtherActions },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_DomainSuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 641 "x411.cnf"
+#line 826 "x411.cnf"
 
        doing_address = FALSE;
 
-         offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  DomainSuppliedInformation_set, hf_index, ett_x411_DomainSuppliedInformation);
+         offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              DomainSuppliedInformation_set, hf_index, ett_x411_DomainSuppliedInformation);
 
 
        doing_address = TRUE;
@@ -2807,25 +2602,22 @@ dissect_x411_DomainSuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb
 
   return offset;
 }
-static int dissect_domain_supplied_information(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DomainSuppliedInformation(FALSE, tvb, offset, actx, tree, hf_x411_domain_supplied_information);
-}
 
 
-static const ber_old_sequence_t TraceInformationElement_sequence[] = {
-  { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_domain_supplied_information },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t TraceInformationElement_sequence[] = {
+  { &hf_x411_global_domain_identifier, BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_domain_supplied_information, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_DomainSuppliedInformation },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_TraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 625 "x411.cnf"
+#line 810 "x411.cnf"
 
        doing_address = TRUE;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       TraceInformationElement_sequence, hf_index, ett_x411_TraceInformationElement);
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   TraceInformationElement_sequence, hf_index, ett_x411_TraceInformationElement);
 
 
        doing_address = FALSE;
@@ -2834,24 +2626,102 @@ dissect_x411_TraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U
 
   return offset;
 }
-static int dissect_TraceInformation_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TraceInformationElement(FALSE, tvb, offset, actx, tree, hf_x411_TraceInformation_item);
-}
 
 
-static const ber_old_sequence_t TraceInformation_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TraceInformation_item },
+static const ber_sequence_t SEQUENCE_OF_TraceInformationElement_sequence_of[1] = {
+  { &hf_x411__untag_item    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_TraceInformationElement },
 };
 
+static int
+dissect_x411_SEQUENCE_OF_TraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_TraceInformationElement_sequence_of, hf_index, ett_x411_SEQUENCE_OF_TraceInformationElement);
+
+  return offset;
+}
+
+
+
 static int
 dissect_x411_TraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          TraceInformation_sequence_of, hf_index, ett_x411_TraceInformation);
+  offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
+                                      hf_index, BER_CLASS_APP, 9, TRUE, dissect_x411_SEQUENCE_OF_TraceInformationElement);
+
+  return offset;
+}
+
+
+static const value_string x411_StandardExtension_vals[] = {
+  {   1, "recipient-reassignment-prohibited" },
+  {   2, "originator-requested-alternate-recipient" },
+  {   3, "dl-expansion-prohibited" },
+  {   4, "conversion-with-loss-prohibited" },
+  {   5, "latest-delivery-time" },
+  {   6, "requested-delivery-method" },
+  {   7, "physical-forwarding-prohibited" },
+  {   8, "physical-forwarding-address-request" },
+  {   9, "physical-delivery-modes" },
+  {  10, "registered-mail-type" },
+  {  11, "recipient-number-for-advice" },
+  {  12, "physical-rendition-attributes" },
+  {  13, "originator-return-address" },
+  {  14, "physical-delivery-report-request" },
+  {  15, "originator-certificate" },
+  {  16, "message-token" },
+  {  17, "content-confidentiality-algorithm-identifier" },
+  {  18, "content-integrity-check" },
+  {  19, "message-origin-authentication-check" },
+  {  20, "message-security-label" },
+  {  21, "proof-of-submission-request" },
+  {  22, "proof-of-delivery-request" },
+  {  23, "content-correlator" },
+  {  24, "probe-origin-authentication-check" },
+  {  25, "redirection-history" },
+  {  26, "dl-expansion-history" },
+  {  27, "physical-forwarding-address" },
+  {  28, "recipient-certificate" },
+  {  29, "proof-of-delivery" },
+  {  30, "originator-and-DL-expansion-history" },
+  {  31, "reporting-DL-name" },
+  {  32, "reporting-MTA-certificate" },
+  {  33, "report-origin-authentication-check" },
+  {  34, "originating-MTA-certificate" },
+  {  35, "proof-of-submission" },
+  {  36, "forwarding-request" },
+  {  37, "trace-information" },
+  {  38, "internal-trace-information" },
+  {  39, "reporting-MTA-name" },
+  {  40, "multiple-originator-certificates" },
+  {  41, "blind-copy-recipients" },
+  {  42, "dl-exempted-recipients" },
+  {  43, "body-part-encryption-token" },
+  {  44, "forwarded-content-token" },
+  {  45, "certificate-selectors" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_x411_StandardExtension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &extension_id);
 
   return offset;
 }
-static int dissect_trace_information(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TraceInformation(FALSE, tvb, offset, actx, tree, hf_x411_trace_information);
+
+
+
+static int
+dissect_x411_T_private_extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 453 "x411.cnf"
+
+         offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &object_identifier_id);
+
+       extension_id = -1;
+
+
+
+  return offset;
 }
 
 
@@ -2861,23 +2731,20 @@ static const value_string x411_ExtensionType_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ExtensionType_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_standard_extension_impl },
-  {   3, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_private_extension_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ExtensionType_choice[] = {
+  {   0, &hf_x411_standard_extension, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_StandardExtension },
+  {   3, &hf_x411_private_extension, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_x411_T_private_extension },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ExtensionType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ExtensionType_choice, hf_index, ett_x411_ExtensionType,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ExtensionType_choice, hf_index, ett_x411_ExtensionType,
+                                 NULL);
 
   return offset;
 }
-static int dissect_extension_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtensionType(FALSE, tvb, offset, actx, tree, hf_x411_extension_type);
-}
 
 
 static const asn_namedbit Criticality_bits[] = {
@@ -2895,22 +2762,31 @@ dissect_x411_Criticality(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
   return offset;
 }
-static int dissect_criticality_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Criticality(TRUE, tvb, offset, actx, tree, hf_x411_criticality);
-}
 
 
 
 static int
 dissect_x411_ExtensionValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 248 "x411.cnf"
+#line 385 "x411.cnf"
        const char *name;
 
-       if(extension_id != -1) 
-               offset=call_x411_oid_callback("x411.extension", tvb, offset, actx->pinfo, tree);
-       else if(object_identifier_id) {
+       if(extension_id != -1) {
+               proto_item_append_text(tree, " (%s)", val_to_str(extension_id, x411_StandardExtension_vals, "standard-extension %d")); 
+               if (dissector_try_port(x411_extension_dissector_table, extension_id, tvb, actx->pinfo, tree)) {
+                       offset = tvb_length(tvb);
+               } else {
+                       proto_item *item = NULL;
+                       proto_tree *next_tree = NULL;
+
+                       item = proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), 
+                               "Dissector for standard-extension %d not implemented.  Contact Wireshark developers if you want this supported", extension_id);
+                       next_tree = proto_item_add_subtree(item, ett_x411_unknown_standard_extension);
+                       offset = dissect_unknown_ber(actx->pinfo, tvb, offset, next_tree);
+                       expert_add_info_format(actx->pinfo, item, PI_UNDECODED, PI_WARN, "Unknown standard-extension");
+               }
+       } else if (object_identifier_id) {
                call_ber_oid_callback(object_identifier_id, tvb, offset, actx->pinfo, tree);
-               name = get_oid_str_name(object_identifier_id);
+               name = oid_resolved_from_string(object_identifier_id);
                proto_item_append_text(tree, " (%s)", name ? name : object_identifier_id); 
        }
                
@@ -2919,47 +2795,35 @@ dissect_x411_ExtensionValue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
 
   return offset;
 }
-static int dissect_extension_value_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtensionValue(TRUE, tvb, offset, actx, tree, hf_x411_extension_value);
-}
 
 
-static const ber_old_sequence_t ExtensionField_sequence[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_extension_type },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_criticality_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_extension_value_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ExtensionField_sequence[] = {
+  { &hf_x411_extension_type , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ExtensionType },
+  { &hf_x411_criticality    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Criticality },
+  { &hf_x411_extension_value, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_ExtensionValue },
+  { NULL, 0, 0, 0, NULL }
 };
 
-static int
+int
 dissect_x411_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       ExtensionField_sequence, hf_index, ett_x411_ExtensionField);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   ExtensionField_sequence, hf_index, ett_x411_ExtensionField);
 
   return offset;
 }
-static int dissect_extensions_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtensionField(FALSE, tvb, offset, actx, tree, hf_x411_extensions_item);
-}
 
 
-static const ber_old_sequence_t SET_OF_ExtensionField_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_extensions_item },
+static const ber_sequence_t SET_OF_ExtensionField_set_of[1] = {
+  { &hf_x411_extensions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_ExtensionField },
 };
 
 static int
 dissect_x411_SET_OF_ExtensionField(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SET_OF_ExtensionField_set_of, hf_index, ett_x411_SET_OF_ExtensionField);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SET_OF_ExtensionField_set_of, hf_index, ett_x411_SET_OF_ExtensionField);
 
   return offset;
 }
-static int dissect_extensions(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_ExtensionField(FALSE, tvb, offset, actx, tree, hf_x411_extensions);
-}
-static int dissect_extensions_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_ExtensionField(TRUE, tvb, offset, actx, tree, hf_x411_extensions);
-}
 
 
 
@@ -2969,22 +2833,16 @@ dissect_x411_MTARecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTARecipientName(FALSE, tvb, offset, actx, tree, hf_x411_recipient_name);
-}
 
 
 
 static int
 dissect_x411_OriginallySpecifiedRecipientNumber(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_originally_specified_recipient_number_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OriginallySpecifiedRecipientNumber(TRUE, tvb, offset, actx, tree, hf_x411_originally_specified_recipient_number);
-}
 
 
 static const asn_namedbit PerRecipientIndicators_bits[] = {
@@ -3007,9 +2865,6 @@ dissect_x411_PerRecipientIndicators(gboolean implicit_tag _U_, tvbuff_t *tvb _U_
 
   return offset;
 }
-static int dissect_per_recipient_indicators_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientIndicators(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_indicators);
-}
 
 
 static const value_string x411_ExplicitConversion_vals[] = {
@@ -3030,84 +2885,72 @@ static const value_string x411_ExplicitConversion_vals[] = {
 static int
 dissect_x411_ExplicitConversion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_explicit_conversion_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExplicitConversion(TRUE, tvb, offset, actx, tree, hf_x411_explicit_conversion);
-}
 
 
-static const ber_old_sequence_t PerRecipientMessageTransferFields_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_recipient_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientMessageTransferFields_set[] = {
+  { &hf_x411_recipient_name , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTARecipientName },
+  { &hf_x411_originally_specified_recipient_number, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_OriginallySpecifiedRecipientNumber },
+  { &hf_x411_per_recipient_indicators, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_PerRecipientIndicators },
+  { &hf_x411_explicit_conversion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExplicitConversion },
+  { &hf_x411_extensions     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientMessageTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientMessageTransferFields_set, hf_index, ett_x411_PerRecipientMessageTransferFields);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientMessageTransferFields_set, hf_index, ett_x411_PerRecipientMessageTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_message_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientMessageTransferFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_message_fields_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_message_fields_item },
+static const ber_sequence_t SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_message_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientMessageTransferFields },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_PerRecipientMessageTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageTransferFields);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientMessageTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_message_fields_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientMessageTransferFields(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_message_fields);
-}
 
 
-static const ber_old_sequence_t MessageTransferEnvelope_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_identifier },
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mta_originator_name },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority },
-  { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_delivery_time_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_per_domain_bilateral_information_impl },
-  { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_message_fields_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageTransferEnvelope_set[] = {
+  { &hf_x411_message_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_MessageIdentifier },
+  { &hf_x411_mta_originator_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTAOriginatorName },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_priority       , BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_Priority },
+  { &hf_x411_per_message_indicators, BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PerMessageIndicators },
+  { &hf_x411_deferred_delivery_time, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_DeferredDeliveryTime },
+  { &hf_x411_per_domain_bilateral_information, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation },
+  { &hf_x411_trace_information, BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_x411_TraceInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_message_fields, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerRecipientMessageTransferFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessageTransferEnvelope_set, hf_index, ett_x411_MessageTransferEnvelope);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              MessageTransferEnvelope_set, hf_index, ett_x411_MessageTransferEnvelope);
 
   return offset;
 }
-static int dissect_message_envelope(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageTransferEnvelope(FALSE, tvb, offset, actx, tree, hf_x411_message_envelope);
-}
 
 
 
-static int
+int
 dissect_x411_Content(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 381 "x411.cnf"
+#line 494 "x411.cnf"
   tvbuff_t *next_tvb;
 
   /* we can do this now constructed octet strings are supported */
@@ -3121,6 +2964,7 @@ dissect_x411_Content(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U
       proto_tree *next_tree = NULL;
 
       item = proto_tree_add_text(top_tree ? top_tree : tree, next_tvb, 0, tvb_length_remaining(tvb, offset), "X.411 Unknown Content (unknown built-in content-type)");
+      expert_add_info_format(actx->pinfo, item, PI_UNDECODED, PI_WARN, "Unknown built-in content-type");
       if (item) {
         next_tree=proto_item_add_subtree(item, ett_x411_content_unknown);
       }
@@ -3132,30 +2976,21 @@ dissect_x411_Content(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U
 
   return offset;
 }
-static int dissect_content(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Content(FALSE, tvb, offset, actx, tree, hf_x411_content);
-}
-static int dissect_returned_content_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Content(TRUE, tvb, offset, actx, tree, hf_x411_returned_content);
-}
 
 
-static const ber_old_sequence_t Message_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_envelope },
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Message_sequence[] = {
+  { &hf_x411_message_envelope, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_MessageTransferEnvelope },
+  { &hf_x411_content        , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_Content },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Message(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       Message_sequence, hf_index, ett_x411_Message);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   Message_sequence, hf_index, ett_x411_Message);
 
   return offset;
 }
-static int dissect_message_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Message(TRUE, tvb, offset, actx, tree, hf_x411_message);
-}
 
 
 
@@ -3165,9 +3000,6 @@ dissect_x411_ReportIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_report_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_report_identifier);
-}
 
 
 
@@ -3177,29 +3009,23 @@ dissect_x411_ReportDestinationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_report_destination_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportDestinationName(FALSE, tvb, offset, actx, tree, hf_x411_report_destination_name);
-}
 
 
-static const ber_old_sequence_t ReportTransferEnvelope_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_report_identifier },
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_report_destination_name },
-  { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ReportTransferEnvelope_set[] = {
+  { &hf_x411_report_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_ReportIdentifier },
+  { &hf_x411_report_destination_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ReportDestinationName },
+  { &hf_x411_trace_information, BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_x411_TraceInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ReportTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ReportTransferEnvelope_set, hf_index, ett_x411_ReportTransferEnvelope);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ReportTransferEnvelope_set, hf_index, ett_x411_ReportTransferEnvelope);
 
   return offset;
 }
-static int dissect_report_envelope(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportTransferEnvelope(FALSE, tvb, offset, actx, tree, hf_x411_report_envelope);
-}
 
 
 
@@ -3218,9 +3044,6 @@ dissect_x411_SubjectIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_subject_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SubjectIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_subject_identifier);
-}
 
 
 
@@ -3230,15 +3053,12 @@ dissect_x411_SubjectIntermediateTraceInformation(gboolean implicit_tag _U_, tvbu
 
   return offset;
 }
-static int dissect_subject_intermediate_trace_information(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SubjectIntermediateTraceInformation(FALSE, tvb, offset, actx, tree, hf_x411_subject_intermediate_trace_information);
-}
 
 
 
 static int
 dissect_x411_AdditionalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 230 "x411.cnf"
+#line 367 "x411.cnf"
    proto_item *item = NULL;
    int         loffset = 0;
    guint32     len = 0;
@@ -3257,9 +3077,6 @@ dissect_x411_AdditionalInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_additional_information_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AdditionalInformation(TRUE, tvb, offset, actx, tree, hf_x411_additional_information);
-}
 
 
 
@@ -3269,9 +3086,6 @@ dissect_x411_MTAActualRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_
 
   return offset;
 }
-static int dissect_mta_actual_recipient_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAActualRecipientName(TRUE, tvb, offset, actx, tree, hf_x411_mta_actual_recipient_name);
-}
 
 
 
@@ -3281,12 +3095,6 @@ dissect_x411_MessageDeliveryTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
 
   return offset;
 }
-static int dissect_message_delivery_time(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageDeliveryTime(FALSE, tvb, offset, actx, tree, hf_x411_message_delivery_time);
-}
-static int dissect_message_delivery_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageDeliveryTime(TRUE, tvb, offset, actx, tree, hf_x411_message_delivery_time);
-}
 
 
 static const value_string x411_TypeOfMTSUser_vals[] = {
@@ -3304,34 +3112,25 @@ static const value_string x411_TypeOfMTSUser_vals[] = {
 static int
 dissect_x411_TypeOfMTSUser(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_type_of_MTS_user(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TypeOfMTSUser(FALSE, tvb, offset, actx, tree, hf_x411_type_of_MTS_user);
-}
-static int dissect_type_of_MTS_user_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TypeOfMTSUser(TRUE, tvb, offset, actx, tree, hf_x411_type_of_MTS_user);
-}
 
 
-static const ber_old_sequence_t DeliveryReport_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_delivery_time_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_type_of_MTS_user_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t DeliveryReport_set[] = {
+  { &hf_x411_message_delivery_time, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MessageDeliveryTime },
+  { &hf_x411_type_of_MTS_user, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TypeOfMTSUser },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_DeliveryReport(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  DeliveryReport_set, hf_index, ett_x411_DeliveryReport);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              DeliveryReport_set, hf_index, ett_x411_DeliveryReport);
 
   return offset;
 }
-static int dissect_delivery_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveryReport(TRUE, tvb, offset, actx, tree, hf_x411_delivery);
-}
 
 
 const value_string x411_NonDeliveryReasonCode_vals[] = {
@@ -3351,16 +3150,10 @@ const value_string x411_NonDeliveryReasonCode_vals[] = {
 int
 dissect_x411_NonDeliveryReasonCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_non_delivery_reason_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NonDeliveryReasonCode(FALSE, tvb, offset, actx, tree, hf_x411_non_delivery_reason_code);
-}
-static int dissect_non_delivery_reason_code_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NonDeliveryReasonCode(TRUE, tvb, offset, actx, tree, hf_x411_non_delivery_reason_code);
-}
 
 
 const value_string x411_NonDeliveryDiagnosticCode_vals[] = {
@@ -3450,34 +3243,25 @@ const value_string x411_NonDeliveryDiagnosticCode_vals[] = {
 int
 dissect_x411_NonDeliveryDiagnosticCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_non_delivery_diagnostic_code(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NonDeliveryDiagnosticCode(FALSE, tvb, offset, actx, tree, hf_x411_non_delivery_diagnostic_code);
-}
-static int dissect_non_delivery_diagnostic_code_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NonDeliveryDiagnosticCode(TRUE, tvb, offset, actx, tree, hf_x411_non_delivery_diagnostic_code);
-}
 
 
-static const ber_old_sequence_t NonDeliveryReport_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_non_delivery_reason_code_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_non_delivery_diagnostic_code_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t NonDeliveryReport_set[] = {
+  { &hf_x411_non_delivery_reason_code, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_NonDeliveryReasonCode },
+  { &hf_x411_non_delivery_diagnostic_code, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_NonDeliveryDiagnosticCode },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_NonDeliveryReport(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  NonDeliveryReport_set, hf_index, ett_x411_NonDeliveryReport);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              NonDeliveryReport_set, hf_index, ett_x411_NonDeliveryReport);
 
   return offset;
 }
-static int dissect_non_delivery_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_NonDeliveryReport(TRUE, tvb, offset, actx, tree, hf_x411_non_delivery);
-}
 
 
 static const value_string x411_ReportType_vals[] = {
@@ -3486,55 +3270,48 @@ static const value_string x411_ReportType_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ReportType_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_delivery_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_non_delivery_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ReportType_choice[] = {
+  {   0, &hf_x411_delivery       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_DeliveryReport },
+  {   1, &hf_x411_non_delivery   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_NonDeliveryReport },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ReportType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 744 "x411.cnf"
-       int report = -1;
+#line 947 "x411.cnf"
+       gint report = -1;
 
-         offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ReportType_choice, hf_index, ett_x411_ReportType,
-                                     &report);
+         offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ReportType_choice, hf_index, ett_x411_ReportType,
+                                 &report);
 
        
-       if(check_col(actx->pinfo->cinfo, COL_INFO)) {
-               col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(report, x411_ReportType_vals, "report-type(%d)"));
+        if( (report!=-1) && x411_ReportType_vals[report].strptr ){
+               if(check_col(actx->pinfo->cinfo, COL_INFO)) {
+                       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", x411_ReportType_vals[report].strptr);
+               }
        }
 
 
 
   return offset;
 }
-static int dissect_trace_report_type_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportType(TRUE, tvb, offset, actx, tree, hf_x411_trace_report_type);
-}
-static int dissect_delivery_report_type_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportType(TRUE, tvb, offset, actx, tree, hf_x411_delivery_report_type);
-}
 
 
-static const ber_old_sequence_t LastTraceInformation_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_trace_report_type_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t LastTraceInformation_set[] = {
+  { &hf_x411_arrival_time   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_ArrivalTime },
+  { &hf_x411_converted_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ConvertedEncodedInformationTypes },
+  { &hf_x411_trace_report_type, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ReportType },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_LastTraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  LastTraceInformation_set, hf_index, ett_x411_LastTraceInformation);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              LastTraceInformation_set, hf_index, ett_x411_LastTraceInformation);
 
   return offset;
 }
-static int dissect_last_trace_information_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_LastTraceInformation(TRUE, tvb, offset, actx, tree, hf_x411_last_trace_information);
-}
 
 
 
@@ -3544,9 +3321,6 @@ dissect_x411_MTAOriginallyIntendedRecipientName(gboolean implicit_tag _U_, tvbuf
 
   return offset;
 }
-static int dissect_report_originally_intended_recipient_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTAOriginallyIntendedRecipientName(TRUE, tvb, offset, actx, tree, hf_x411_report_originally_intended_recipient_name);
-}
 
 
 
@@ -3558,91 +3332,76 @@ dissect_x411_SupplementaryInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _
 
   return offset;
 }
-static int dissect_supplementary_information_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SupplementaryInformation(TRUE, tvb, offset, actx, tree, hf_x411_supplementary_information);
-}
 
 
-static const ber_old_sequence_t PerRecipientReportTransferFields_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mta_actual_recipient_name_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_last_trace_information_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_report_originally_intended_recipient_name_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supplementary_information_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientReportTransferFields_set[] = {
+  { &hf_x411_mta_actual_recipient_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MTAActualRecipientName },
+  { &hf_x411_originally_specified_recipient_number, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_OriginallySpecifiedRecipientNumber },
+  { &hf_x411_per_recipient_indicators, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_PerRecipientIndicators },
+  { &hf_x411_last_trace_information, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_x411_LastTraceInformation },
+  { &hf_x411_report_originally_intended_recipient_name, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_MTAOriginallyIntendedRecipientName },
+  { &hf_x411_supplementary_information, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SupplementaryInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientReportTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientReportTransferFields_set, hf_index, ett_x411_PerRecipientReportTransferFields);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientReportTransferFields_set, hf_index, ett_x411_PerRecipientReportTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_report_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientReportTransferFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_report_fields_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_fields_item },
+static const ber_sequence_t SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_report_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientReportTransferFields },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_PerRecipientReportTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportTransferFields);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientReportTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_report_fields_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientReportTransferFields(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_report_fields);
-}
 
 
-static const ber_old_sequence_t ReportTransferContent_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_identifier },
-  { BER_CLASS_APP, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_subject_intermediate_trace_information },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_content_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_additional_information_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_per_recipient_report_fields_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ReportTransferContent_set[] = {
+  { &hf_x411_subject_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_SubjectIdentifier },
+  { &hf_x411_subject_intermediate_trace_information, BER_CLASS_APP, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_SubjectIntermediateTraceInformation },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_returned_content, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Content },
+  { &hf_x411_additional_information, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_AdditionalInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_report_fields, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerRecipientReportTransferFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ReportTransferContent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ReportTransferContent_set, hf_index, ett_x411_ReportTransferContent);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ReportTransferContent_set, hf_index, ett_x411_ReportTransferContent);
 
   return offset;
 }
-static int dissect_report_content(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ReportTransferContent(FALSE, tvb, offset, actx, tree, hf_x411_report_content);
-}
 
 
-static const ber_old_sequence_t Report_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_report_envelope },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_report_content },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Report_sequence[] = {
+  { &hf_x411_report_envelope, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_ReportTransferEnvelope },
+  { &hf_x411_report_content , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_ReportTransferContent },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Report(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       Report_sequence, hf_index, ett_x411_Report);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   Report_sequence, hf_index, ett_x411_Report);
 
   return offset;
 }
-static int dissect_report_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Report(TRUE, tvb, offset, actx, tree, hf_x411_report);
-}
 
 
 
@@ -3652,86 +3411,68 @@ dissect_x411_ProbeIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
 
   return offset;
 }
-static int dissect_probe_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProbeIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_probe_identifier);
-}
 
 
 
 int
 dissect_x411_ContentLength(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_content_length_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentLength(TRUE, tvb, offset, actx, tree, hf_x411_content_length);
-}
-static int dissect_permissible_maximum_content_length_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentLength(TRUE, tvb, offset, actx, tree, hf_x411_permissible_maximum_content_length);
-}
-static int dissect_maximum_content_length_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentLength(TRUE, tvb, offset, actx, tree, hf_x411_maximum_content_length);
-}
 
 
-static const ber_old_sequence_t PerRecipientProbeTransferFields_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_recipient_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originally_specified_recipient_number_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_indicators_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientProbeTransferFields_set[] = {
+  { &hf_x411_recipient_name , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTARecipientName },
+  { &hf_x411_originally_specified_recipient_number, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_OriginallySpecifiedRecipientNumber },
+  { &hf_x411_per_recipient_indicators, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_PerRecipientIndicators },
+  { &hf_x411_explicit_conversion, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExplicitConversion },
+  { &hf_x411_extensions     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientProbeTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientProbeTransferFields_set, hf_index, ett_x411_PerRecipientProbeTransferFields);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientProbeTransferFields_set, hf_index, ett_x411_PerRecipientProbeTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_probe_transfer_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientProbeTransferFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_probe_transfer_fields_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_probe_transfer_fields_item },
+static const ber_sequence_t SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_probe_transfer_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientProbeTransferFields },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_PerRecipientProbeTransferFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeTransferFields);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientProbeTransferFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeTransferFields);
 
   return offset;
 }
-static int dissect_per_recipient_probe_transfer_fields_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientProbeTransferFields(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_probe_transfer_fields);
-}
 
 
-static const ber_old_sequence_t ProbeTransferEnvelope_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_probe_identifier },
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mta_originator_name },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_length_impl },
-  { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_per_domain_bilateral_information_impl },
-  { BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_trace_information },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_per_recipient_probe_transfer_fields_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ProbeTransferEnvelope_set[] = {
+  { &hf_x411_probe_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_ProbeIdentifier },
+  { &hf_x411_mta_originator_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTAOriginatorName },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_content_length , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentLength },
+  { &hf_x411_per_message_indicators, BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PerMessageIndicators },
+  { &hf_x411_per_domain_bilateral_information, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerDomainBilateralInformation },
+  { &hf_x411_trace_information, BER_CLASS_APP, 9, BER_FLAGS_NOOWNTAG, dissect_x411_TraceInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_probe_transfer_fields, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerRecipientProbeTransferFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ProbeTransferEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ProbeTransferEnvelope_set, hf_index, ett_x411_ProbeTransferEnvelope);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ProbeTransferEnvelope_set, hf_index, ett_x411_ProbeTransferEnvelope);
 
   return offset;
 }
@@ -3744,9 +3485,6 @@ dissect_x411_Probe(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_,
 
   return offset;
 }
-static int dissect_probe_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Probe(TRUE, tvb, offset, actx, tree, hf_x411_probe);
-}
 
 
 static const value_string x411_MTS_APDU_vals[] = {
@@ -3756,25 +3494,27 @@ static const value_string x411_MTS_APDU_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t MTS_APDU_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_report_impl },
-  {   2, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_probe_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t MTS_APDU_choice[] = {
+  {   0, &hf_x411_message        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_Message },
+  {   1, &hf_x411_report         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_Report },
+  {   2, &hf_x411_probe          , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_Probe },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MTS_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 732 "x411.cnf"
-       int apdu = -1;
+#line 933 "x411.cnf"
+       gint apdu = -1;
 
-         offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     MTS_APDU_choice, hf_index, ett_x411_MTS_APDU,
-                                     &apdu);
+         offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 MTS_APDU_choice, hf_index, ett_x411_MTS_APDU,
+                                 &apdu);
 
        
-       if(check_col(actx->pinfo->cinfo, COL_INFO) && (apdu != 0)) { /* we don't show "message" - sub-dissectors have better idea */
-               col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(apdu, x411_MTS_APDU_vals, "MTS-APDU(%d)"));
+       if( (apdu!=-1) && x411_MTS_APDU_vals[apdu].strptr ){
+               if(check_col(actx->pinfo->cinfo, COL_INFO) && (apdu != 0)) { /* we don't show "message" - sub-dissectors have better idea */
+                       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", x411_MTS_APDU_vals[apdu].strptr);
+               }
        }
 
 
@@ -3783,58 +3523,46 @@ dissect_x411_MTS_APDU(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _
 }
 
 
-
-static int
-dissect_x411_MTAOriginatorRequestedAlternateRecipient(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
 static const value_string x411_T_attempted_vals[] = {
   {   0, "mta" },
   {   1, "domain" },
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_attempted_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta },
-  {   1, BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_domain },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_attempted_choice[] = {
+  {   0, &hf_x411_mta            , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_MTAName },
+  {   1, &hf_x411_domain         , BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_attempted(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_attempted_choice, hf_index, ett_x411_T_attempted,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_attempted_choice, hf_index, ett_x411_T_attempted,
+                                 NULL);
 
   return offset;
 }
-static int dissect_attempted(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_attempted(FALSE, tvb, offset, actx, tree, hf_x411_attempted);
-}
 
 
-static const ber_old_sequence_t MTASuppliedInformation_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_arrival_time_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_routing_action_impl },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_attempted },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_time_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_actions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MTASuppliedInformation_set[] = {
+  { &hf_x411_arrival_time   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_ArrivalTime },
+  { &hf_x411_routing_action , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_RoutingAction },
+  { &hf_x411_attempted      , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_attempted },
+  { &hf_x411_deferred_time  , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_DeferredTime },
+  { &hf_x411_converted_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ConvertedEncodedInformationTypes },
+  { &hf_x411_other_actions  , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OtherActions },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MTASuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 650 "x411.cnf"
+#line 835 "x411.cnf"
 
        doing_address = FALSE;
 
-         offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MTASuppliedInformation_set, hf_index, ett_x411_MTASuppliedInformation);
+         offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              MTASuppliedInformation_set, hf_index, ett_x411_MTASuppliedInformation);
 
 
        doing_address = TRUE;
@@ -3844,26 +3572,23 @@ dissect_x411_MTASuppliedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_
 
   return offset;
 }
-static int dissect_mta_supplied_information(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTASuppliedInformation(FALSE, tvb, offset, actx, tree, hf_x411_mta_supplied_information);
-}
 
 
-static const ber_old_sequence_t InternalTraceInformationElement_sequence[] = {
-  { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta_name },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_mta_supplied_information },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t InternalTraceInformationElement_sequence[] = {
+  { &hf_x411_global_domain_identifier, BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_mta_name       , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_MTAName },
+  { &hf_x411_mta_supplied_information, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_MTASuppliedInformation },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_InternalTraceInformationElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 633 "x411.cnf"
+#line 818 "x411.cnf"
 
        doing_address = TRUE;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       InternalTraceInformationElement_sequence, hf_index, ett_x411_InternalTraceInformationElement);
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   InternalTraceInformationElement_sequence, hf_index, ett_x411_InternalTraceInformationElement);
 
 
        doing_address = FALSE;
@@ -3872,19 +3597,16 @@ dissect_x411_InternalTraceInformationElement(gboolean implicit_tag _U_, tvbuff_t
 
   return offset;
 }
-static int dissect_InternalTraceInformation_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_InternalTraceInformationElement(FALSE, tvb, offset, actx, tree, hf_x411_InternalTraceInformation_item);
-}
 
 
-static const ber_old_sequence_t InternalTraceInformation_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_InternalTraceInformation_item },
+static const ber_sequence_t InternalTraceInformation_sequence_of[1] = {
+  { &hf_x411_InternalTraceInformation_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_InternalTraceInformationElement },
 };
 
 static int
 dissect_x411_InternalTraceInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          InternalTraceInformation_sequence_of, hf_index, ett_x411_InternalTraceInformation);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      InternalTraceInformation_sequence_of, hf_index, ett_x411_InternalTraceInformation);
 
   return offset;
 }
@@ -3897,148 +3619,80 @@ static const value_string x411_ObjectName_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ObjectName_choice[] = {
-  {   0, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_user_agent },
-  {   1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_mTA_impl },
-  {   2, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_message_store_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ObjectName_choice[] = {
+  {   0, &hf_x411_user_agent     , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ORAddressAndOptionalDirectoryName },
+  {   1, &hf_x411_mTA            , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MTAName },
+  {   2, &hf_x411_message_store  , BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_x411_ORAddressAndOptionalDirectoryName },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ObjectName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ObjectName_choice, hf_index, ett_x411_ObjectName,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ObjectName_choice, hf_index, ett_x411_ObjectName,
+                                 NULL);
 
   return offset;
 }
-static int dissect_initiator_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ObjectName(FALSE, tvb, offset, actx, tree, hf_x411_initiator_name);
-}
-static int dissect_responder_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ObjectName(FALSE, tvb, offset, actx, tree, hf_x411_responder_name);
-}
 
 
-static const ber_old_sequence_t DeliveryQueue_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_messages_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_queue_octets_impl },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_DeliveryQueue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  DeliveryQueue_set, hf_index, ett_x411_DeliveryQueue);
-
-  return offset;
-}
-static int dissect_urgent_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveryQueue(TRUE, tvb, offset, actx, tree, hf_x411_urgent);
-}
-static int dissect_normal_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveryQueue(TRUE, tvb, offset, actx, tree, hf_x411_normal);
-}
-static int dissect_non_urgent_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveryQueue(TRUE, tvb, offset, actx, tree, hf_x411_non_urgent);
-}
-
-
-static const ber_old_sequence_t MessagesWaiting_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_urgent_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_normal_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_non_urgent_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_MessagesWaiting(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessagesWaiting_set, hf_index, ett_x411_MessagesWaiting);
-
-  return offset;
-}
-static int dissect_messages_waiting(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessagesWaiting(FALSE, tvb, offset, actx, tree, hf_x411_messages_waiting);
-}
-
-
-static const ber_old_sequence_t MTSBindArgument_set[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_name },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_messages_waiting },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator_credentials_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_context_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_MTSBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MTSBindArgument_set, hf_index, ett_x411_MTSBindArgument);
+dissect_x411_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                NULL);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t MTSBindResult_set[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_name },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_messages_waiting },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_responder_credentials_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t DeliveryQueue_set[] = {
+  { &hf_x411_messages       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_INTEGER },
+  { &hf_x411_delivery_queue_octets, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_MTSBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MTSBindResult_set, hf_index, ett_x411_MTSBindResult);
+dissect_x411_DeliveryQueue(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              DeliveryQueue_set, hf_index, ett_x411_DeliveryQueue);
 
   return offset;
 }
 
 
-static const value_string x411_MTSBindError_vals[] = {
-  {   0, "busy" },
-  {   2, "authentication-error" },
-  {   3, "unacceptable-dialogue-mode" },
-  {   4, "unacceptable-security-context" },
-  {   5, "inadequate-association-confidentiality" },
-  { 0, NULL }
+static const ber_sequence_t MessagesWaiting_set[] = {
+  { &hf_x411_urgent         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_DeliveryQueue },
+  { &hf_x411_normal         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_DeliveryQueue },
+  { &hf_x411_non_urgent     , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_DeliveryQueue },
+  { NULL, 0, 0, 0, NULL }
 };
 
-
 static int
-dissect_x411_MTSBindError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+dissect_x411_MessagesWaiting(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              MessagesWaiting_set, hf_index, ett_x411_MessagesWaiting);
 
   return offset;
 }
 
 
 
-static int
+int
 dissect_x411_ORAddressAndOrDirectoryName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_ORName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_DLExemptedRecipients_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ORAddressAndOrDirectoryName(FALSE, tvb, offset, actx, tree, hf_x411_DLExemptedRecipients_item);
-}
 
 
 
-static int
+int
 dissect_x411_MTSOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_mts_originator_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSOriginatorName(FALSE, tvb, offset, actx, tree, hf_x411_mts_originator_name);
-}
 
 
 
@@ -4048,18 +3702,6 @@ dissect_x411_MTSRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_ImproperlySpecifiedRecipients_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_ImproperlySpecifiedRecipients_item);
-}
-static int dissect_submission_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_submission_recipient_name);
-}
-static int dissect_probe_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_probe_recipient_name);
-}
-static int dissect_token_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_token_recipient_name);
-}
 
 
 static const asn_namedbit OriginatorReportRequest_bits[] = {
@@ -4076,454 +3718,89 @@ dissect_x411_OriginatorReportRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U
 
   return offset;
 }
-static int dissect_originator_report_request_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OriginatorReportRequest(TRUE, tvb, offset, actx, tree, hf_x411_originator_report_request);
-}
 
 
-static const ber_old_sequence_t PerRecipientMessageSubmissionFields_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_submission_recipient_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originator_report_request_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientMessageSubmissionFields_set[] = {
+  { &hf_x411_submission_recipient_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSRecipientName },
+  { &hf_x411_originator_report_request, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_OriginatorReportRequest },
+  { &hf_x411_explicit_conversion, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExplicitConversion },
+  { &hf_x411_extensions     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientMessageSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientMessageSubmissionFields_set, hf_index, ett_x411_PerRecipientMessageSubmissionFields);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientMessageSubmissionFields_set, hf_index, ett_x411_PerRecipientMessageSubmissionFields);
 
   return offset;
 }
-static int dissect_per_recipient_message_submission_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientMessageSubmissionFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_message_submission_fields_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_message_submission_fields_item },
+static const ber_sequence_t SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_message_submission_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientMessageSubmissionFields },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientMessageSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields);
 
   return offset;
 }
-static int dissect_per_recipient_message_submission_fields_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_message_submission_fields);
-}
 
 
-static const ber_old_sequence_t MessageSubmissionEnvelope_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mts_originator_name },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority },
-  { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_deferred_delivery_time_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_per_recipient_message_submission_fields_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageSubmissionEnvelope_set[] = {
+  { &hf_x411_mts_originator_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSOriginatorName },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_priority       , BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_Priority },
+  { &hf_x411_per_message_indicators, BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PerMessageIndicators },
+  { &hf_x411_deferred_delivery_time, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_DeferredDeliveryTime },
+  { &hf_x411_extensions     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_message_submission_fields, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerRecipientMessageSubmissionFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
 dissect_x411_MessageSubmissionEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessageSubmissionEnvelope_set, hf_index, ett_x411_MessageSubmissionEnvelope);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              MessageSubmissionEnvelope_set, hf_index, ett_x411_MessageSubmissionEnvelope);
 
   return offset;
 }
-static int dissect_message_submission_envelope(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageSubmissionEnvelope(FALSE, tvb, offset, actx, tree, hf_x411_message_submission_envelope);
-}
 
 
-static const ber_old_sequence_t MessageSubmissionArgument_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_message_submission_envelope },
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageSubmissionArgument_sequence[] = {
+  { &hf_x411_message_submission_envelope, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_MessageSubmissionEnvelope },
+  { &hf_x411_content        , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_Content },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageSubmissionArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MessageSubmissionArgument_sequence, hf_index, ett_x411_MessageSubmissionArgument);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_MessageSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-static int dissect_message_submission_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageSubmissionIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_message_submission_identifier);
-}
-
-
-
-static int
-dissect_x411_MessageSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Time(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-static int dissect_message_submission_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageSubmissionTime(TRUE, tvb, offset, actx, tree, hf_x411_message_submission_time);
-}
-
-
-static const ber_old_sequence_t MessageSubmissionResult_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_submission_identifier },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_message_submission_time_impl },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_MessageSubmissionResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessageSubmissionResult_set, hf_index, ett_x411_MessageSubmissionResult);
-
-  return offset;
-}
-
-
-static const ber_old_sequence_t PerRecipientProbeSubmissionFields_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_probe_recipient_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_originator_report_request_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_explicit_conversion_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientProbeSubmissionFields_set, hf_index, ett_x411_PerRecipientProbeSubmissionFields);
-
-  return offset;
-}
-static int dissect_per_recipient_probe_submission_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientProbeSubmissionFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_probe_submission_fields_item);
-}
-
-
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_probe_submission_fields_item },
-};
-
-static int
-dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields);
-
-  return offset;
-}
-static int dissect_per_recipient_probe_submission_fields_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields(TRUE, tvb, offset, actx, tree, hf_x411_per_recipient_probe_submission_fields);
-}
-
-
-static const ber_old_sequence_t ProbeSubmissionEnvelope_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_mts_originator_name },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_length_impl },
-  { BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_per_message_indicators },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_per_recipient_probe_submission_fields_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_ProbeSubmissionEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ProbeSubmissionEnvelope_set, hf_index, ett_x411_ProbeSubmissionEnvelope);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_ProbeSubmissionArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ProbeSubmissionEnvelope(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_ProbeSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-static int dissect_probe_submission_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProbeSubmissionIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_probe_submission_identifier);
-}
-
-
-
-static int
-dissect_x411_ProbeSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Time(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-static int dissect_probe_submission_time_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProbeSubmissionTime(TRUE, tvb, offset, actx, tree, hf_x411_probe_submission_time);
-}
-
-
-static const ber_old_sequence_t ProbeSubmissionResult_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_probe_submission_identifier },
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_probe_submission_time_impl },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_ProbeSubmissionResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ProbeSubmissionResult_set, hf_index, ett_x411_ProbeSubmissionResult);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_CancelDeferredDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_MessageSubmissionIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_CancelDeferredDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MessageSubmissionArgument_sequence, hf_index, ett_x411_MessageSubmissionArgument);
 
   return offset;
 }
 
 
-
-static int
-dissect_x411_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index);
-
-  return offset;
-}
-static int dissect_restrict_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BOOLEAN(TRUE, tvb, offset, actx, tree, hf_x411_restrict);
-}
-static int dissect_permitted(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BOOLEAN(FALSE, tvb, offset, actx, tree, hf_x411_permitted);
-}
-
-
-static const asn_namedbit Operations_bits[] = {
-  {  0, &hf_x411_Operations_probe_submission_or_report_delivery, -1, -1, "probe-submission-or-report-delivery", NULL },
-  {  1, &hf_x411_Operations_message_submission_or_message_delivery, -1, -1, "message-submission-or-message-delivery", NULL },
-  { 0, NULL, 0, 0, NULL, NULL }
-};
-
-static int
-dissect_x411_Operations(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
-                                    Operations_bits, hf_index, ett_x411_Operations,
-                                    NULL);
-
-  return offset;
-}
-static int dissect_waiting_operations_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Operations(TRUE, tvb, offset, actx, tree, hf_x411_waiting_operations);
-}
-static int dissect_permissible_operations_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Operations(TRUE, tvb, offset, actx, tree, hf_x411_permissible_operations);
-}
-
-
-static const ber_old_sequence_t ContentTypes_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ContentTypes_item },
-};
-
-static int
-dissect_x411_ContentTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     ContentTypes_set_of, hf_index, ett_x411_ContentTypes);
-
-  return offset;
-}
-static int dissect_permissible_content_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentTypes(TRUE, tvb, offset, actx, tree, hf_x411_permissible_content_types);
-}
-static int dissect_content_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentTypes(TRUE, tvb, offset, actx, tree, hf_x411_content_types);
-}
-
-
-static const ber_old_sequence_t EncodedInformationTypesConstraints_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_unacceptable_eits_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_acceptable_eits_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_exclusively_acceptable_eits_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ImproperlySpecifiedRecipients_sequence_of[1] = {
+  { &hf_x411_ImproperlySpecifiedRecipients_item, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSRecipientName },
 };
 
 int
-dissect_x411_EncodedInformationTypesConstraints(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       EncodedInformationTypesConstraints_sequence, hf_index, ett_x411_EncodedInformationTypesConstraints);
-
-  return offset;
-}
-static int dissect_encoded_information_types_constraints_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_EncodedInformationTypesConstraints(TRUE, tvb, offset, actx, tree, hf_x411_encoded_information_types_constraints);
-}
-
-
-
-static int
-dissect_x411_PermissibleEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_EncodedInformationTypesConstraints(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-static int dissect_permissible_encoded_information_types(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PermissibleEncodedInformationTypes(FALSE, tvb, offset, actx, tree, hf_x411_permissible_encoded_information_types);
-}
-
-
-static const ber_old_sequence_t Controls_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrict_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_operations_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_maximum_content_length_impl },
-  { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_lowest_priority },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_content_types_impl },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_encoded_information_types },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_security_context_impl },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_Controls(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  Controls_set, hf_index, ett_x411_Controls);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_SubmissionControls(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Controls(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_SubmissionControlArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_SubmissionControls(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-static const asn_namedbit WaitingMessages_bits[] = {
-  {  0, &hf_x411_WaitingMessages_long_content, -1, -1, "long-content", NULL },
-  {  1, &hf_x411_WaitingMessages_low_priority, -1, -1, "low-priority", NULL },
-  {  2, &hf_x411_WaitingMessages_other_security_labels, -1, -1, "other-security-labels", NULL },
-  { 0, NULL, 0, 0, NULL, NULL }
-};
-
-static int
-dissect_x411_WaitingMessages(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
-                                    WaitingMessages_bits, hf_index, ett_x411_WaitingMessages,
-                                    NULL);
-
-  return offset;
-}
-static int dissect_waiting_messages_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_WaitingMessages(TRUE, tvb, offset, actx, tree, hf_x411_waiting_messages);
-}
-
-
-static const ber_old_sequence_t SET_OF_ContentType_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_waiting_content_types_item },
-};
-
-static int
-dissect_x411_SET_OF_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SET_OF_ContentType_set_of, hf_index, ett_x411_SET_OF_ContentType);
-
-  return offset;
-}
-static int dissect_waiting_content_types_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_ContentType(TRUE, tvb, offset, actx, tree, hf_x411_waiting_content_types);
-}
-
-
-static const ber_old_sequence_t Waiting_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_operations_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_messages_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_content_types_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_waiting_encoded_information_types },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_x411_Waiting(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  Waiting_set, hf_index, ett_x411_Waiting);
-
-  return offset;
-}
-
-
-
-static int
-dissect_x411_SubmissionControlResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Waiting(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-static const ber_old_sequence_t ImproperlySpecifiedRecipients_sequence_of[1] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_ImproperlySpecifiedRecipients_item },
-};
-
-static int
 dissect_x411_ImproperlySpecifiedRecipients(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          ImproperlySpecifiedRecipients_sequence_of, hf_index, ett_x411_ImproperlySpecifiedRecipients);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      ImproperlySpecifiedRecipients_sequence_of, hf_index, ett_x411_ImproperlySpecifiedRecipients);
 
   return offset;
 }
 
 
-static const value_string x411_SecurityProblem_vals[] = {
+const value_string x411_SecurityProblem_vals[] = {
   {   0, "assemby-instructions-conflict-with-security-services" },
   {   1, "authentication-problem" },
   {   2, "authentication-failure-on-subject-message" },
@@ -4564,10 +3841,10 @@ static const value_string x411_SecurityProblem_vals[] = {
 };
 
 
-static int
+int
 dissect_x411_SecurityProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
@@ -4575,352 +3852,253 @@ dissect_x411_SecurityProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
 
 
 int
-dissect_x411_MessageDeliveryIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+dissect_x411_MessageSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_message_delivery_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageDeliveryIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_message_delivery_identifier);
-}
-
 
-static const value_string x411_DeliveredContentType_vals[] = {
-  {   0, "built-in" },
-  {   1, "extended" },
-  { 0, NULL }
-};
 
-static const ber_old_choice_t DeliveredContentType_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_built_in_impl },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_extended },
-  { 0, 0, 0, 0, NULL }
-};
 
-static int
-dissect_x411_DeliveredContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     DeliveredContentType_choice, hf_index, ett_x411_DeliveredContentType,
-                                     NULL);
+int
+dissect_x411_MessageSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_Time(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_delivered_content_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveredContentType(FALSE, tvb, offset, actx, tree, hf_x411_delivered_content_type);
-}
 
 
 
-static int
-dissect_x411_DeliveredOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+int
+dissect_x411_ProbeSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_originator_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveredOriginatorName(FALSE, tvb, offset, actx, tree, hf_x411_originator_name);
-}
 
 
-static const asn_namedbit DeliveryFlags_bits[] = {
-  {  1, &hf_x411_DeliveryFlags_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL },
-  { 0, NULL, 0, 0, NULL, NULL }
-};
 
-static int
-dissect_x411_DeliveryFlags(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
-                                    DeliveryFlags_bits, hf_index, ett_x411_DeliveryFlags,
-                                    NULL);
+int
+dissect_x411_ProbeSubmissionTime(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_Time(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_delivery_flags_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliveryFlags(TRUE, tvb, offset, actx, tree, hf_x411_delivery_flags);
-}
 
 
 
 static int
-dissect_x411_OtherRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
-static int dissect_OtherRecipientNames_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OtherRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_OtherRecipientNames_item);
-}
 
 
-static const ber_old_sequence_t OtherRecipientNames_sequence_of[1] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_OtherRecipientNames_item },
+static const asn_namedbit Operations_bits[] = {
+  {  0, &hf_x411_Operations_probe_submission_or_report_delivery, -1, -1, "probe-submission-or-report-delivery", NULL },
+  {  1, &hf_x411_Operations_message_submission_or_message_delivery, -1, -1, "message-submission-or-message-delivery", NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
 };
 
 static int
-dissect_x411_OtherRecipientNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          OtherRecipientNames_sequence_of, hf_index, ett_x411_OtherRecipientNames);
-
-  return offset;
-}
-static int dissect_other_recipient_names_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OtherRecipientNames(TRUE, tvb, offset, actx, tree, hf_x411_other_recipient_names);
-}
-
-
-
-static int
-dissect_x411_ThisRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_Operations(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
+                                    Operations_bits, hf_index, ett_x411_Operations,
+                                    NULL);
 
   return offset;
 }
-static int dissect_this_recipient_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ThisRecipientName(TRUE, tvb, offset, actx, tree, hf_x411_this_recipient_name);
-}
 
 
+static const ber_sequence_t ContentTypes_set_of[1] = {
+  { &hf_x411_ContentTypes_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+};
 
 static int
-dissect_x411_MTSOriginallyIntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_ContentTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 ContentTypes_set_of, hf_index, ett_x411_ContentTypes);
 
   return offset;
 }
-static int dissect_originally_intended_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSOriginallyIntendedRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_originally_intended_recipient_name);
-}
-static int dissect_originally_intended_recipient_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSOriginallyIntendedRecipientName(TRUE, tvb, offset, actx, tree, hf_x411_originally_intended_recipient_name);
-}
 
 
-static const ber_old_sequence_t OtherMessageDeliveryFields_set[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_delivered_content_type },
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_originator_name },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_original_encoded_information_types_impl },
-  { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_priority },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_delivery_flags_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_other_recipient_names_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_this_recipient_name_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originally_intended_recipient_name_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_converted_encoded_information_types_impl },
-  { BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_message_submission_time_impl },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_identifier_impl },
-  { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t EncodedInformationTypesConstraints_sequence[] = {
+  { &hf_x411_unacceptable_eits, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExtendedEncodedInformationTypes },
+  { &hf_x411_acceptable_eits, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExtendedEncodedInformationTypes },
+  { &hf_x411_exclusively_acceptable_eits, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExtendedEncodedInformationTypes },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_x411_OtherMessageDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  OtherMessageDeliveryFields_set, hf_index, ett_x411_OtherMessageDeliveryFields);
+dissect_x411_EncodedInformationTypesConstraints(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   EncodedInformationTypesConstraints_sequence, hf_index, ett_x411_EncodedInformationTypesConstraints);
 
   return offset;
 }
-static int dissect_other_fields(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OtherMessageDeliveryFields(FALSE, tvb, offset, actx, tree, hf_x411_other_fields);
-}
 
 
-static const ber_old_sequence_t MessageDeliveryArgument_sequence[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_delivery_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_other_fields },
-  { BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_content },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_MessageDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MessageDeliveryArgument_sequence, hf_index, ett_x411_MessageDeliveryArgument);
+dissect_x411_PermissibleEncodedInformationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_EncodedInformationTypesConstraints(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
 
 
+static const ber_sequence_t Controls_set[] = {
+  { &hf_x411_restrict       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_BOOLEAN },
+  { &hf_x411_permissible_operations, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Operations },
+  { &hf_x411_permissible_maximum_content_length, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentLength },
+  { &hf_x411_permissible_lowest_priority, BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_Priority },
+  { &hf_x411_permissible_content_types, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentTypes },
+  { &hf_x411_permissible_encoded_information_types, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PermissibleEncodedInformationTypes },
+  { &hf_x411_permissible_security_context, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SecurityContext },
+  { NULL, 0, 0, 0, NULL }
+};
 
 static int
-dissect_x411_RecipientCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_Controls(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              Controls_set, hf_index, ett_x411_Controls);
 
   return offset;
 }
-static int dissect_recipient_certificate_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RecipientCertificate(TRUE, tvb, offset, actx, tree, hf_x411_recipient_certificate);
-}
 
 
 
 static int
-dissect_x411_ProofOfDelivery(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Signature(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_SubmissionControls(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_Controls(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_proof_of_delivery_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProofOfDelivery(TRUE, tvb, offset, actx, tree, hf_x411_proof_of_delivery);
-}
 
 
-static const ber_old_sequence_t MessageDeliveryResult_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_certificate_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_proof_of_delivery_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const asn_namedbit WaitingMessages_bits[] = {
+  {  0, &hf_x411_WaitingMessages_long_content, -1, -1, "long-content", NULL },
+  {  1, &hf_x411_WaitingMessages_low_priority, -1, -1, "low-priority", NULL },
+  {  2, &hf_x411_WaitingMessages_other_security_labels, -1, -1, "other-security-labels", NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
 };
 
 static int
-dissect_x411_MessageDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessageDeliveryResult_set, hf_index, ett_x411_MessageDeliveryResult);
+dissect_x411_WaitingMessages(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
+                                    WaitingMessages_bits, hf_index, ett_x411_WaitingMessages,
+                                    NULL);
 
   return offset;
 }
 
 
+static const ber_sequence_t SET_OF_ContentType_set_of[1] = {
+  { &hf_x411_waiting_content_types_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+};
 
 static int
-dissect_x411_SubjectSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_SET_OF_ContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SET_OF_ContentType_set_of, hf_index, ett_x411_SET_OF_ContentType);
 
   return offset;
 }
-static int dissect_subject_submission_identifier(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SubjectSubmissionIdentifier(FALSE, tvb, offset, actx, tree, hf_x411_subject_submission_identifier);
-}
 
 
+static const ber_sequence_t Waiting_set[] = {
+  { &hf_x411_waiting_operations, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Operations },
+  { &hf_x411_waiting_messages, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_WaitingMessages },
+  { &hf_x411_waiting_content_types, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ContentType },
+  { &hf_x411_waiting_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_EncodedInformationTypes },
+  { NULL, 0, 0, 0, NULL }
+};
 
 static int
-dissect_x411_MTSActualRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_Waiting(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              Waiting_set, hf_index, ett_x411_Waiting);
 
   return offset;
 }
-static int dissect_actual_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSActualRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_actual_recipient_name);
-}
-static int dissect_actual_recipient_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTSActualRecipientName(TRUE, tvb, offset, actx, tree, hf_x411_actual_recipient_name);
-}
 
 
-static const ber_old_sequence_t PerRecipientReportDeliveryFields_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_actual_recipient_name_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_delivery_report_type_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_converted_encoded_information_types },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_originally_intended_recipient_name_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_supplementary_information_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PerRecipientReportDeliveryFields_set, hf_index, ett_x411_PerRecipientReportDeliveryFields);
+dissect_x411_SubjectSubmissionIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_per_recipient_report_delivery_fields_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientReportDeliveryFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_report_delivery_fields_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields_item },
-};
 
 static int
-dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields);
+dissect_x411_MTSActualRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_ORAddressAndOrDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_per_recipient_report_delivery_fields(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields(FALSE, tvb, offset, actx, tree, hf_x411_per_recipient_report_delivery_fields);
-}
 
 
-static const ber_old_sequence_t ReportDeliveryArgument_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_submission_identifier },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_returned_content_impl },
-  { 0, 0, 0, NULL }
-};
 
 static int
-dissect_x411_ReportDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ReportDeliveryArgument_set, hf_index, ett_x411_ReportDeliveryArgument);
+dissect_x411_MTSOriginallyIntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
 
 
-static const value_string x411_ReportDeliveryResult_vals[] = {
-  {   0, "empty-result" },
-  {   1, "extensions" },
-  { 0, NULL }
-};
-
-static const ber_old_choice_t ReportDeliveryResult_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_empty_result },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_extensions },
-  { 0, 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientReportDeliveryFields_set[] = {
+  { &hf_x411_actual_recipient_name, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_MTSActualRecipientName },
+  { &hf_x411_delivery_report_type, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ReportType },
+  { &hf_x411_converted_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ConvertedEncodedInformationTypes },
+  { &hf_x411_originally_intended_recipient_name, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_MTSOriginallyIntendedRecipientName },
+  { &hf_x411_supplementary_information, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SupplementaryInformation },
+  { &hf_x411_extensions     , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_ReportDeliveryResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ReportDeliveryResult_choice, hf_index, ett_x411_ReportDeliveryResult,
-                                     NULL);
+dissect_x411_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientReportDeliveryFields_set, hf_index, ett_x411_PerRecipientReportDeliveryFields);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t DeliveryControlArgument_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restrict_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_operations_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_maximum_content_length_impl },
-  { BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_lowest_priority },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_content_types_impl },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permissible_encoded_information_types },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_permissible_security_context_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_report_delivery_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientReportDeliveryFields },
 };
 
 static int
-dissect_x411_DeliveryControlArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  DeliveryControlArgument_set, hf_index, ett_x411_DeliveryControlArgument);
+dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientReportDeliveryFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t DeliveryControlResult_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_operations_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_messages_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_waiting_content_types_impl },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_waiting_encoded_information_types },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ReportDeliveryArgument_set[] = {
+  { &hf_x411_subject_submission_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_SubjectSubmissionIdentifier },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_extensions     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_report_delivery_fields, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields },
+  { &hf_x411_returned_content, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Content },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_x411_DeliveryControlResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  DeliveryControlResult_set, hf_index, ett_x411_DeliveryControlResult);
+dissect_x411_ReportDeliveryArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ReportDeliveryArgument_set, hf_index, ett_x411_ReportDeliveryArgument);
 
   return offset;
 }
@@ -4950,28 +4128,22 @@ static const value_string x411_RefusedArgument_vals[] = {
 static int
 dissect_x411_RefusedArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_built_in_argument_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RefusedArgument(TRUE, tvb, offset, actx, tree, hf_x411_built_in_argument);
-}
 
 
 
 static int
 dissect_x411_T_refused_extension(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 268 "x411.cnf"
+#line 433 "x411.cnf"
 /*XXX not implemented yet */
 
 
 
   return offset;
 }
-static int dissect_refused_extension(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_refused_extension(FALSE, tvb, offset, actx, tree, hf_x411_refused_extension);
-}
 
 
 static const value_string x411_T_refused_argument_vals[] = {
@@ -4980,23 +4152,20 @@ static const value_string x411_T_refused_argument_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_refused_argument_choice[] = {
-  {   0, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_built_in_argument_impl },
-  {   1, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_refused_extension },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_refused_argument_choice[] = {
+  {   0, &hf_x411_built_in_argument, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_RefusedArgument },
+  {   1, &hf_x411_refused_extension, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x411_T_refused_extension },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_refused_argument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_refused_argument_choice, hf_index, ett_x411_T_refused_argument,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_refused_argument_choice, hf_index, ett_x411_T_refused_argument,
+                                 NULL);
 
   return offset;
 }
-static int dissect_refused_argument(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_refused_argument(FALSE, tvb, offset, actx, tree, hf_x411_refused_argument);
-}
 
 
 static const value_string x411_RefusalReason_vals[] = {
@@ -5010,25 +4179,22 @@ static const value_string x411_RefusalReason_vals[] = {
 static int
 dissect_x411_RefusalReason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_refusal_reason_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RefusalReason(TRUE, tvb, offset, actx, tree, hf_x411_refusal_reason);
-}
 
 
-static const ber_old_sequence_t RefusedOperation_set[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_refused_argument },
-  { BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_refusal_reason_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t RefusedOperation_set[] = {
+  { &hf_x411_refused_argument, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_refused_argument },
+  { &hf_x411_refusal_reason , BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_x411_RefusalReason },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_RefusedOperation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  RefusedOperation_set, hf_index, ett_x411_RefusedOperation);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              RefusedOperation_set, hf_index, ett_x411_RefusedOperation);
 
   return offset;
 }
@@ -5036,8 +4202,8 @@ dissect_x411_RefusedOperation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
 
 static int
-dissect_x411_ProofOfDeliveryAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_RecipientCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x509af_Certificates(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -5045,8 +4211,8 @@ dissect_x411_ProofOfDeliveryAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuf
 
 
 static int
-dissect_x411_DeliveryControls(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_Controls(implicit_tag, tvb, offset, actx, tree, hf_index);
+dissect_x411_ProofOfDelivery(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_Signature(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -5059,27 +4225,21 @@ dissect_x411_UserName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _
 
   return offset;
 }
-static int dissect_user_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UserName(FALSE, tvb, offset, actx, tree, hf_x411_user_name);
-}
 
 
-static const ber_old_sequence_t T_x121_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x121_address },
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_tsap_id },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t T_x121_sequence[] = {
+  { &hf_x411_x121_address   , BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  { &hf_x411_tsap_id        , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PrintableString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_x121(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       T_x121_sequence, hf_index, ett_x411_T_x121);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   T_x121_sequence, hf_index, ett_x411_T_x121);
 
   return offset;
 }
-static int dissect_x121_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_x121(TRUE, tvb, offset, actx, tree, hf_x411_x121);
-}
 
 
 
@@ -5089,9 +4249,6 @@ dissect_x411_PSAPAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
   return offset;
 }
-static int dissect_presentation_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PSAPAddress(TRUE, tvb, offset, actx, tree, hf_x411_presentation);
-}
 
 
 static const value_string x411_UserAddress_vals[] = {
@@ -5100,39 +4257,33 @@ static const value_string x411_UserAddress_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t UserAddress_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x121_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_presentation_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t UserAddress_choice[] = {
+  {   0, &hf_x411_x121           , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_T_x121 },
+  {   1, &hf_x411_presentation   , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_PSAPAddress },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_UserAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     UserAddress_choice, hf_index, ett_x411_UserAddress,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 UserAddress_choice, hf_index, ett_x411_UserAddress,
+                                 NULL);
 
   return offset;
 }
-static int dissect_user_address_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UserAddress(TRUE, tvb, offset, actx, tree, hf_x411_user_address);
-}
 
 
-static const ber_old_sequence_t SET_OF_Priority_set_of[1] = {
-  { BER_CLASS_APP, 7, BER_FLAGS_NOOWNTAG, dissect_class_priority_item },
+static const ber_sequence_t SET_OF_Priority_set_of[1] = {
+  { &hf_x411_class_priority_item, BER_CLASS_APP, 7, BER_FLAGS_NOOWNTAG, dissect_x411_Priority },
 };
 
 static int
 dissect_x411_SET_OF_Priority(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SET_OF_Priority_set_of, hf_index, ett_x411_SET_OF_Priority);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SET_OF_Priority_set_of, hf_index, ett_x411_SET_OF_Priority);
 
   return offset;
 }
-static int dissect_class_priority_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_Priority(TRUE, tvb, offset, actx, tree, hf_x411_class_priority);
-}
 
 
 static const value_string x411_T_objects_vals[] = {
@@ -5150,9 +4301,6 @@ dissect_x411_T_objects(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
 
   return offset;
 }
-static int dissect_objects_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_objects(TRUE, tvb, offset, actx, tree, hf_x411_objects);
-}
 
 
 static const asn_namedbit T_source_type_bits[] = {
@@ -5170,9 +4318,6 @@ dissect_x411_T_source_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_source_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_source_type(FALSE, tvb, offset, actx, tree, hf_x411_source_type);
-}
 
 
 static const value_string x411_ExactOrPattern_vals[] = {
@@ -5181,79 +4326,67 @@ static const value_string x411_ExactOrPattern_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ExactOrPattern_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_exact_match_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_pattern_match_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ExactOrPattern_choice[] = {
+  {   0, &hf_x411_exact_match    , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_ORName },
+  {   1, &hf_x411_pattern_match  , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_ORName },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ExactOrPattern(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ExactOrPattern_choice, hf_index, ett_x411_ExactOrPattern,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ExactOrPattern_choice, hf_index, ett_x411_ExactOrPattern,
+                                 NULL);
 
   return offset;
 }
-static int dissect_source_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExactOrPattern(FALSE, tvb, offset, actx, tree, hf_x411_source_name);
-}
 
 
-static const ber_old_sequence_t Restriction_set[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_permitted },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_source_type },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_source_name },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Restriction_set[] = {
+  { &hf_x411_permitted      , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_BOOLEAN },
+  { &hf_x411_source_type    , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_T_source_type },
+  { &hf_x411_source_name    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ExactOrPattern },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Restriction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  Restriction_set, hf_index, ett_x411_Restriction);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              Restriction_set, hf_index, ett_x411_Restriction);
 
   return offset;
 }
-static int dissect_applies_only_to_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Restriction(FALSE, tvb, offset, actx, tree, hf_x411_applies_only_to_item);
-}
-static int dissect_RestrictedDelivery_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Restriction(FALSE, tvb, offset, actx, tree, hf_x411_RestrictedDelivery_item);
-}
 
 
-static const ber_old_sequence_t SEQUENCE_OF_Restriction_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_applies_only_to_item },
+static const ber_sequence_t SEQUENCE_OF_Restriction_sequence_of[1] = {
+  { &hf_x411_applies_only_to_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_Restriction },
 };
 
 static int
 dissect_x411_SEQUENCE_OF_Restriction(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          SEQUENCE_OF_Restriction_sequence_of, hf_index, ett_x411_SEQUENCE_OF_Restriction);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_Restriction_sequence_of, hf_index, ett_x411_SEQUENCE_OF_Restriction);
 
   return offset;
 }
-static int dissect_applies_only_to_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SEQUENCE_OF_Restriction(TRUE, tvb, offset, actx, tree, hf_x411_applies_only_to);
-}
 
 
-static const ber_old_sequence_t MessageClass_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_types_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_maximum_content_length_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encoded_information_types_constraints_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_security_labels_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_class_priority_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_objects_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_applies_only_to_impl },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageClass_set[] = {
+  { &hf_x411_content_types  , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentTypes },
+  { &hf_x411_maximum_content_length, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentLength },
+  { &hf_x411_encoded_information_types_constraints, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_EncodedInformationTypesConstraints },
+  { &hf_x411_security_labels, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SecurityContext },
+  { &hf_x411_class_priority , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_Priority },
+  { &hf_x411_objects        , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_objects },
+  { &hf_x411_applies_only_to, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_Restriction },
+  { &hf_x411_extensions     , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageClass(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  MessageClass_set, hf_index, ett_x411_MessageClass);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              MessageClass_set, hf_index, ett_x411_MessageClass);
 
   return offset;
 }
@@ -5266,25 +4399,19 @@ dissect_x411_DeliverableClass(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_deliverable_class_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DeliverableClass(FALSE, tvb, offset, actx, tree, hf_x411_deliverable_class_item);
-}
 
 
-static const ber_old_sequence_t SET_OF_DeliverableClass_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_deliverable_class_item },
+static const ber_sequence_t SET_OF_DeliverableClass_set_of[1] = {
+  { &hf_x411_deliverable_class_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_DeliverableClass },
 };
 
 static int
 dissect_x411_SET_OF_DeliverableClass(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SET_OF_DeliverableClass_set_of, hf_index, ett_x411_SET_OF_DeliverableClass);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SET_OF_DeliverableClass_set_of, hf_index, ett_x411_SET_OF_DeliverableClass);
 
   return offset;
 }
-static int dissect_deliverable_class(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_DeliverableClass(FALSE, tvb, offset, actx, tree, hf_x411_deliverable_class);
-}
 
 
 
@@ -5294,9 +4421,6 @@ dissect_x411_DefaultDeliveryControls(gboolean implicit_tag _U_, tvbuff_t *tvb _U
 
   return offset;
 }
-static int dissect_default_delivery_controls(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DefaultDeliveryControls(FALSE, tvb, offset, actx, tree, hf_x411_default_delivery_controls);
-}
 
 
 
@@ -5306,25 +4430,19 @@ dissect_x411_RedirectionClass(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_redirection_classes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RedirectionClass(FALSE, tvb, offset, actx, tree, hf_x411_redirection_classes_item);
-}
 
 
-static const ber_old_sequence_t SET_OF_RedirectionClass_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_redirection_classes_item },
+static const ber_sequence_t SET_OF_RedirectionClass_set_of[1] = {
+  { &hf_x411_redirection_classes_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_RedirectionClass },
 };
 
 static int
 dissect_x411_SET_OF_RedirectionClass(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     SET_OF_RedirectionClass_set_of, hf_index, ett_x411_SET_OF_RedirectionClass);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 SET_OF_RedirectionClass_set_of, hf_index, ett_x411_SET_OF_RedirectionClass);
 
   return offset;
 }
-static int dissect_redirection_classes_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_SET_OF_RedirectionClass(TRUE, tvb, offset, actx, tree, hf_x411_redirection_classes);
-}
 
 
 
@@ -5334,59 +4452,47 @@ dissect_x411_RecipientAssignedAlternateRecipient(gboolean implicit_tag _U_, tvbu
 
   return offset;
 }
-static int dissect_recipient_assigned_alternate_recipient_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RecipientAssignedAlternateRecipient(TRUE, tvb, offset, actx, tree, hf_x411_recipient_assigned_alternate_recipient);
-}
 
 
-static const ber_old_sequence_t RecipientRedirection_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirection_classes_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_assigned_alternate_recipient_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t RecipientRedirection_set[] = {
+  { &hf_x411_redirection_classes, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_RedirectionClass },
+  { &hf_x411_recipient_assigned_alternate_recipient, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_RecipientAssignedAlternateRecipient },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_RecipientRedirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  RecipientRedirection_set, hf_index, ett_x411_RecipientRedirection);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              RecipientRedirection_set, hf_index, ett_x411_RecipientRedirection);
 
   return offset;
 }
-static int dissect_Redirections_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RecipientRedirection(FALSE, tvb, offset, actx, tree, hf_x411_Redirections_item);
-}
 
 
-static const ber_old_sequence_t Redirections_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_Redirections_item },
+static const ber_sequence_t Redirections_sequence_of[1] = {
+  { &hf_x411_Redirections_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_RecipientRedirection },
 };
 
 static int
 dissect_x411_Redirections(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          Redirections_sequence_of, hf_index, ett_x411_Redirections);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      Redirections_sequence_of, hf_index, ett_x411_Redirections);
 
   return offset;
 }
-static int dissect_redirections_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Redirections(TRUE, tvb, offset, actx, tree, hf_x411_redirections);
-}
 
 
-static const ber_old_sequence_t RestrictedDelivery_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_RestrictedDelivery_item },
+static const ber_sequence_t RestrictedDelivery_sequence_of[1] = {
+  { &hf_x411_RestrictedDelivery_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_Restriction },
 };
 
 static int
 dissect_x411_RestrictedDelivery(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          RestrictedDelivery_sequence_of, hf_index, ett_x411_RestrictedDelivery);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      RestrictedDelivery_sequence_of, hf_index, ett_x411_RestrictedDelivery);
 
   return offset;
 }
-static int dissect_restricted_delivery_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RestrictedDelivery(TRUE, tvb, offset, actx, tree, hf_x411_restricted_delivery);
-}
 
 
 static const asn_namedbit T_standard_parameters_bits[] = {
@@ -5407,100 +4513,82 @@ dissect_x411_T_standard_parameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_standard_parameters_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_standard_parameters(TRUE, tvb, offset, actx, tree, hf_x411_standard_parameters);
-}
 
 
 
 static int
 dissect_x411_T_type_extensions_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 245 "x411.cnf"
+#line 382 "x411.cnf"
 /*XXX not implemented yet */
 
 
 
   return offset;
 }
-static int dissect_type_extensions_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_type_extensions_item(FALSE, tvb, offset, actx, tree, hf_x411_type_extensions_item);
-}
 
 
-static const ber_old_sequence_t T_type_extensions_set_of[1] = {
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_type_extensions_item },
+static const ber_sequence_t T_type_extensions_set_of[1] = {
+  { &hf_x411_type_extensions_item, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_x411_T_type_extensions_item },
 };
 
 static int
 dissect_x411_T_type_extensions(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     T_type_extensions_set_of, hf_index, ett_x411_T_type_extensions);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 T_type_extensions_set_of, hf_index, ett_x411_T_type_extensions);
 
   return offset;
 }
-static int dissect_type_extensions_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_type_extensions(TRUE, tvb, offset, actx, tree, hf_x411_type_extensions);
-}
 
 
-static const ber_old_sequence_t RegistrationTypes_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_standard_parameters_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_type_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t RegistrationTypes_sequence[] = {
+  { &hf_x411_standard_parameters, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_standard_parameters },
+  { &hf_x411_type_extensions, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_T_type_extensions },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_RegistrationTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       RegistrationTypes_sequence, hf_index, ett_x411_RegistrationTypes);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   RegistrationTypes_sequence, hf_index, ett_x411_RegistrationTypes);
 
   return offset;
 }
-static int dissect_retrieve_registrations_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RegistrationTypes(TRUE, tvb, offset, actx, tree, hf_x411_retrieve_registrations);
-}
 
 
-static const ber_old_sequence_t RegisterArgument_set[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_user_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_user_address_impl },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_deliverable_class },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_default_delivery_controls },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_redirections_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_restricted_delivery_impl },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_retrieve_registrations_impl },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t RegisterArgument_set[] = {
+  { &hf_x411_user_name      , BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_UserName },
+  { &hf_x411_user_address   , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_UserAddress },
+  { &hf_x411_deliverable_class, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_SET_OF_DeliverableClass },
+  { &hf_x411_default_delivery_controls, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_x411_DefaultDeliveryControls },
+  { &hf_x411_redirections   , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_Redirections },
+  { &hf_x411_restricted_delivery, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_RestrictedDelivery },
+  { &hf_x411_retrieve_registrations, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_RegistrationTypes },
+  { &hf_x411_extensions     , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_RegisterArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  RegisterArgument_set, hf_index, ett_x411_RegisterArgument);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              RegisterArgument_set, hf_index, ett_x411_RegisterArgument);
 
   return offset;
 }
-static int dissect_registered_information_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RegisterArgument(TRUE, tvb, offset, actx, tree, hf_x411_registered_information);
-}
 
 
-static const ber_old_sequence_t T_non_empty_result_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_registered_information_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t T_non_empty_result_set[] = {
+  { &hf_x411_registered_information, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_RegisterArgument },
+  { &hf_x411_extensions     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_non_empty_result(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  T_non_empty_result_set, hf_index, ett_x411_T_non_empty_result);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              T_non_empty_result_set, hf_index, ett_x411_T_non_empty_result);
 
   return offset;
 }
-static int dissect_non_empty_result(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_non_empty_result(FALSE, tvb, offset, actx, tree, hf_x411_non_empty_result);
-}
 
 
 static const value_string x411_RegisterResult_vals[] = {
@@ -5509,67 +4597,214 @@ static const value_string x411_RegisterResult_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t RegisterResult_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_empty_result },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_non_empty_result },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t RegisterResult_choice[] = {
+  {   0, &hf_x411_empty_result   , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_x411_NULL },
+  {   1, &hf_x411_non_empty_result, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_T_non_empty_result },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_RegisterResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     RegisterResult_choice, hf_index, ett_x411_RegisterResult,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 RegisterResult_choice, hf_index, ett_x411_RegisterResult,
+                                 NULL);
+
+  return offset;
+}
+
+
+static const ber_sequence_t PerRecipientProbeSubmissionFields_set[] = {
+  { &hf_x411_probe_recipient_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSRecipientName },
+  { &hf_x411_originator_report_request, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_OriginatorReportRequest },
+  { &hf_x411_explicit_conversion, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ExplicitConversion },
+  { &hf_x411_extensions     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
+};
+
+int
+dissect_x411_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PerRecipientProbeSubmissionFields_set, hf_index, ett_x411_PerRecipientProbeSubmissionFields);
+
+  return offset;
+}
+
+
+static const ber_sequence_t SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of[1] = {
+  { &hf_x411_per_recipient_probe_submission_fields_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_PerRecipientProbeSubmissionFields },
+};
+
+static int
+dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      SEQUENCE_OF_PerRecipientProbeSubmissionFields_sequence_of, hf_index, ett_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields);
+
+  return offset;
+}
+
+
+static const ber_sequence_t ProbeSubmissionEnvelope_set[] = {
+  { &hf_x411_mts_originator_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSOriginatorName },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_content_length , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentLength },
+  { &hf_x411_per_message_indicators, BER_CLASS_APP, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PerMessageIndicators },
+  { &hf_x411_extensions     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_probe_submission_fields, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_x411_SEQUENCE_OF_PerRecipientProbeSubmissionFields },
+  { NULL, 0, 0, 0, NULL }
+};
+
+int
+dissect_x411_ProbeSubmissionEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ProbeSubmissionEnvelope_set, hf_index, ett_x411_ProbeSubmissionEnvelope);
+
+  return offset;
+}
+
+
+
+int
+dissect_x411_MessageDeliveryIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_MTSIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+static const value_string x411_DeliveredContentType_vals[] = {
+  {   0, "built-in" },
+  {   1, "extended" },
+  { 0, NULL }
+};
+
+static const ber_choice_t DeliveredContentType_choice[] = {
+  {   0, &hf_x411_built_in       , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_BuiltInContentType },
+  {   1, &hf_x411_extended       , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x411_ExtendedContentType },
+  { 0, NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_x411_DeliveredContentType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 DeliveredContentType_choice, hf_index, ett_x411_DeliveredContentType,
+                                 NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_x411_DeliveredOriginatorName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+static const asn_namedbit DeliveryFlags_bits[] = {
+  {  1, &hf_x411_DeliveryFlags_implicit_conversion_prohibited, -1, -1, "implicit-conversion-prohibited", NULL },
+  { 0, NULL, 0, 0, NULL, NULL }
+};
+
+static int
+dissect_x411_DeliveryFlags(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
+                                    DeliveryFlags_bits, hf_index, ett_x411_DeliveryFlags,
+                                    NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_x411_OtherRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t ChangeCredentialsArgument_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_old_credentials_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_new_credentials_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t OtherRecipientNames_sequence_of[1] = {
+  { &hf_x411_OtherRecipientNames_item, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_OtherRecipientName },
 };
 
 static int
-dissect_x411_ChangeCredentialsArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ChangeCredentialsArgument_set, hf_index, ett_x411_ChangeCredentialsArgument);
+dissect_x411_OtherRecipientNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      OtherRecipientNames_sequence_of, hf_index, ett_x411_OtherRecipientNames);
+
+  return offset;
+}
+
+
+
+static int
+dissect_x411_ThisRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_ORAddressAndOptionalDirectoryName(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t MessageDeliveryEnvelope_sequence[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_message_delivery_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_other_fields },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t OtherMessageDeliveryFields_set[] = {
+  { &hf_x411_delivered_content_type, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_DeliveredContentType },
+  { &hf_x411_originator_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_DeliveredOriginatorName },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_priority       , BER_CLASS_APP, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_Priority },
+  { &hf_x411_delivery_flags , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_DeliveryFlags },
+  { &hf_x411_other_recipient_names, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_OtherRecipientNames },
+  { &hf_x411_this_recipient_name, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_x411_ThisRecipientName },
+  { &hf_x411_originally_intended_recipient_name, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_MTSOriginallyIntendedRecipientName },
+  { &hf_x411_converted_encoded_information_types, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ConvertedEncodedInformationTypes },
+  { &hf_x411_message_submission_time, BER_CLASS_CON, 7, BER_FLAGS_IMPLTAG, dissect_x411_MessageSubmissionTime },
+  { &hf_x411_content_identifier, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_extensions     , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { NULL, 0, 0, 0, NULL }
+};
+
+int
+dissect_x411_OtherMessageDeliveryFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              OtherMessageDeliveryFields_set, hf_index, ett_x411_OtherMessageDeliveryFields);
+
+  return offset;
+}
+
+
+static const ber_sequence_t MessageDeliveryEnvelope_sequence[] = {
+  { &hf_x411_message_delivery_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_MessageDeliveryIdentifier },
+  { &hf_x411_message_delivery_time, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_MessageDeliveryTime },
+  { &hf_x411_other_fields   , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_OtherMessageDeliveryFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageDeliveryEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MessageDeliveryEnvelope_sequence, hf_index, ett_x411_MessageDeliveryEnvelope);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MessageDeliveryEnvelope_sequence, hf_index, ett_x411_MessageDeliveryEnvelope);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t ReportDeliveryEnvelope_set[] = {
-  { BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_subject_submission_identifier },
-  { BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_content_identifier },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_content_type },
-  { BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_original_encoded_information_types },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_extensions_impl },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_per_recipient_report_delivery_fields },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ReportDeliveryEnvelope_set[] = {
+  { &hf_x411_subject_submission_identifier, BER_CLASS_APP, 4, BER_FLAGS_NOOWNTAG, dissect_x411_SubjectSubmissionIdentifier },
+  { &hf_x411_content_identifier, BER_CLASS_APP, 10, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ContentIdentifier },
+  { &hf_x411_content_type   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ContentType },
+  { &hf_x411_original_encoded_information_types, BER_CLASS_APP, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_OriginalEncodedInformationTypes },
+  { &hf_x411_extensions     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_SET_OF_ExtensionField },
+  { &hf_x411_per_recipient_report_delivery_fields, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ReportDeliveryEnvelope(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  ReportDeliveryEnvelope_set, hf_index, ett_x411_ReportDeliveryEnvelope);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              ReportDeliveryEnvelope_set, hf_index, ett_x411_ReportDeliveryEnvelope);
 
   return offset;
 }
@@ -5659,23 +4894,20 @@ static const value_string x411_RequestedDeliveryMethod_item_vals[] = {
 static int
 dissect_x411_RequestedDeliveryMethod_item(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
-static int dissect_RequestedDeliveryMethod_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RequestedDeliveryMethod_item(FALSE, tvb, offset, actx, tree, hf_x411_RequestedDeliveryMethod_item);
-}
 
 
-static const ber_old_sequence_t RequestedDeliveryMethod_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_RequestedDeliveryMethod_item },
+static const ber_sequence_t RequestedDeliveryMethod_sequence_of[1] = {
+  { &hf_x411_RequestedDeliveryMethod_item, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x411_RequestedDeliveryMethod_item },
 };
 
 int
 dissect_x411_RequestedDeliveryMethod(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          RequestedDeliveryMethod_sequence_of, hf_index, ett_x411_RequestedDeliveryMethod);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      RequestedDeliveryMethod_sequence_of, hf_index, ett_x411_RequestedDeliveryMethod);
 
   return offset;
 }
@@ -5746,7 +4978,7 @@ static const value_string x411_RegisteredMailType_vals[] = {
 static int
 dissect_x411_RegisteredMailType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
@@ -5772,23 +5004,23 @@ dissect_x411_PhysicalRenditionAttributes(gboolean implicit_tag _U_, tvbuff_t *tv
 }
 
 
-static const ber_old_sequence_t ORAddress_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_built_in_standard_attributes },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_built_in_domain_defined_attributes },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_extension_attributes },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ORAddress_sequence[] = {
+  { &hf_x411_built_in_standard_attributes, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInStandardAttributes },
+  { &hf_x411_built_in_domain_defined_attributes, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_BuiltInDomainDefinedAttributes },
+  { &hf_x411_extension_attributes, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_ExtensionAttributes },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
 dissect_x411_ORAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 537 "x411.cnf"
+#line 716 "x411.cnf"
        
        oraddress = ep_alloc(MAX_ORA_STR_LEN); oraddress[0] = '\0';     
        doing_address = TRUE;
        address_item = NULL;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       ORAddress_sequence, hf_index, ett_x411_ORAddress);
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   ORAddress_sequence, hf_index, ett_x411_ORAddress);
 
 
        if(*oraddress && address_item)
@@ -5823,7 +5055,7 @@ static const value_string x411_PhysicalDeliveryReportRequest_vals[] = {
 static int
 dissect_x411_PhysicalDeliveryReportRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
@@ -5839,7 +5071,7 @@ dissect_x411_OriginatorCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
 
 
-static int
+int
 dissect_x411_MessageToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_Token(implicit_tag, tvb, offset, actx, tree, hf_index);
 
@@ -5854,34 +5086,19 @@ dissect_x411_ContentConfidentialityAlgorithmIdentifier(gboolean implicit_tag _U_
 
   return offset;
 }
-static int dissect_content_confidentiality_algorithm_identifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentConfidentialityAlgorithmIdentifier(TRUE, tvb, offset, actx, tree, hf_x411_content_confidentiality_algorithm_identifier);
-}
 
 
 
-static int
+int
 dissect_x411_ContentIntegrityCheck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_Signature(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_content_integrity_check_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ContentIntegrityCheck(TRUE, tvb, offset, actx, tree, hf_x411_content_integrity_check);
-}
-
-
-
-static int
-dissect_x411_ContentIntegrityAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
 
 
 
-static int
+int
 dissect_x411_MessageOriginAuthenticationCheck(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_Signature(implicit_tag, tvb, offset, actx, tree, hf_index);
 
@@ -5890,24 +5107,12 @@ dissect_x411_MessageOriginAuthenticationCheck(gboolean implicit_tag _U_, tvbuff_
 
 
 
-static int
-dissect_x411_MessageOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-
-static int
+int
 dissect_x411_MessageSecurityLabel(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_SecurityLabel(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
-static int dissect_message_security_label_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MessageSecurityLabel(TRUE, tvb, offset, actx, tree, hf_x411_message_security_label);
-}
 
 
 static const value_string x411_ProofOfSubmissionRequest_vals[] = {
@@ -5940,9 +5145,6 @@ dissect_x411_ProofOfDeliveryRequest(gboolean implicit_tag _U_, tvbuff_t *tvb _U_
 
   return offset;
 }
-static int dissect_proof_of_delivery_request_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ProofOfDeliveryRequest(TRUE, tvb, offset, actx, tree, hf_x411_proof_of_delivery_request);
-}
 
 
 static const value_string x411_ContentCorrelator_vals[] = {
@@ -5951,17 +5153,17 @@ static const value_string x411_ContentCorrelator_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ContentCorrelator_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_ia5text },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_octets },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ContentCorrelator_choice[] = {
+  {   0, &hf_x411_ia5text        , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_IA5String },
+  {   1, &hf_x411_octets         , BER_CLASS_UNI, BER_UNI_TAG_OCTETSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_OCTET_STRING },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ContentCorrelator(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ContentCorrelator_choice, hf_index, ett_x411_ContentCorrelator,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ContentCorrelator_choice, hf_index, ett_x411_ContentCorrelator,
+                                 NULL);
 
   return offset;
 }
@@ -5976,31 +5178,19 @@ dissect_x411_ProbeOriginAuthenticationCheck(gboolean implicit_tag _U_, tvbuff_t
 }
 
 
-
-static int
-dissect_x411_ProbeOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-static const ber_old_sequence_t IntendedRecipientName_sequence[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_intended_recipient },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_redirection_time },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t IntendedRecipientName_sequence[] = {
+  { &hf_x411_intended_recipient, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ORAddressAndOptionalDirectoryName },
+  { &hf_x411_redirection_time, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_Time },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_IntendedRecipientName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       IntendedRecipientName_sequence, hf_index, ett_x411_IntendedRecipientName);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   IntendedRecipientName_sequence, hf_index, ett_x411_IntendedRecipientName);
 
   return offset;
 }
-static int dissect_intended_recipient_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_IntendedRecipientName(FALSE, tvb, offset, actx, tree, hf_x411_intended_recipient_name);
-}
 
 
 static const value_string x411_RedirectionReason_vals[] = {
@@ -6020,68 +5210,59 @@ dissect_x411_RedirectionReason(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 
   return offset;
 }
-static int dissect_redirection_reason(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_RedirectionReason(FALSE, tvb, offset, actx, tree, hf_x411_redirection_reason);
-}
 
 
-static const ber_old_sequence_t Redirection_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_intended_recipient_name },
-  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_redirection_reason },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t Redirection_sequence[] = {
+  { &hf_x411_intended_recipient_name, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_IntendedRecipientName },
+  { &hf_x411_redirection_reason, BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_x411_RedirectionReason },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_Redirection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       Redirection_sequence, hf_index, ett_x411_Redirection);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   Redirection_sequence, hf_index, ett_x411_Redirection);
 
   return offset;
 }
-static int dissect_RedirectionHistory_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_Redirection(FALSE, tvb, offset, actx, tree, hf_x411_RedirectionHistory_item);
-}
 
 
-static const ber_old_sequence_t RedirectionHistory_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_RedirectionHistory_item },
+static const ber_sequence_t RedirectionHistory_sequence_of[1] = {
+  { &hf_x411_RedirectionHistory_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_Redirection },
 };
 
 static int
 dissect_x411_RedirectionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          RedirectionHistory_sequence_of, hf_index, ett_x411_RedirectionHistory);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      RedirectionHistory_sequence_of, hf_index, ett_x411_RedirectionHistory);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t DLExpansion_sequence[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_dl },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_dl_expansion_time },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t DLExpansion_sequence[] = {
+  { &hf_x411_dl             , BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ORAddressAndOptionalDirectoryName },
+  { &hf_x411_dl_expansion_time, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_Time },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_DLExpansion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       DLExpansion_sequence, hf_index, ett_x411_DLExpansion);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   DLExpansion_sequence, hf_index, ett_x411_DLExpansion);
 
   return offset;
 }
-static int dissect_DLExpansionHistory_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_DLExpansion(FALSE, tvb, offset, actx, tree, hf_x411_DLExpansionHistory_item);
-}
 
 
-static const ber_old_sequence_t DLExpansionHistory_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DLExpansionHistory_item },
+static const ber_sequence_t DLExpansionHistory_sequence_of[1] = {
+  { &hf_x411_DLExpansionHistory_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_DLExpansion },
 };
 
 static int
 dissect_x411_DLExpansionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          DLExpansionHistory_sequence_of, hf_index, ett_x411_DLExpansionHistory);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      DLExpansionHistory_sequence_of, hf_index, ett_x411_DLExpansionHistory);
 
   return offset;
 }
@@ -6096,32 +5277,29 @@ dissect_x411_PhysicalForwardingAddress(gboolean implicit_tag _U_, tvbuff_t *tvb
 }
 
 
-static const ber_old_sequence_t OriginatorAndDLExpansion_sequence[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_originator_or_dl_name },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_origination_or_expansion_time },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t OriginatorAndDLExpansion_sequence[] = {
+  { &hf_x411_originator_or_dl_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ORAddressAndOptionalDirectoryName },
+  { &hf_x411_origination_or_expansion_time, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_Time },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_OriginatorAndDLExpansion(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       OriginatorAndDLExpansion_sequence, hf_index, ett_x411_OriginatorAndDLExpansion);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   OriginatorAndDLExpansion_sequence, hf_index, ett_x411_OriginatorAndDLExpansion);
 
   return offset;
 }
-static int dissect_OriginatorAndDLExpansionHistory_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_OriginatorAndDLExpansion(FALSE, tvb, offset, actx, tree, hf_x411_OriginatorAndDLExpansionHistory_item);
-}
 
 
-static const ber_old_sequence_t OriginatorAndDLExpansionHistory_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_OriginatorAndDLExpansionHistory_item },
+static const ber_sequence_t OriginatorAndDLExpansionHistory_sequence_of[1] = {
+  { &hf_x411_OriginatorAndDLExpansionHistory_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_OriginatorAndDLExpansion },
 };
 
 static int
 dissect_x411_OriginatorAndDLExpansionHistory(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          OriginatorAndDLExpansionHistory_sequence_of, hf_index, ett_x411_OriginatorAndDLExpansionHistory);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      OriginatorAndDLExpansionHistory_sequence_of, hf_index, ett_x411_OriginatorAndDLExpansionHistory);
 
   return offset;
 }
@@ -6154,50 +5332,35 @@ dissect_x411_ReportOriginAuthenticationCheck(gboolean implicit_tag _U_, tvbuff_t
 }
 
 
-
-static int
-dissect_x411_ReportOriginAuthenticationAlgorithmIdentifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x509af_AlgorithmIdentifier(implicit_tag, tvb, offset, actx, tree, hf_index);
-
-  return offset;
-}
-
-
-static const ber_old_sequence_t PerRecipientDeliveryReportFields_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_message_delivery_time },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_type_of_MTS_user },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_recipient_certificate_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientDeliveryReportFields_sequence[] = {
+  { &hf_x411_message_delivery_time, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_MessageDeliveryTime },
+  { &hf_x411_type_of_MTS_user, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x411_TypeOfMTSUser },
+  { &hf_x411_recipient_certificate, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_RecipientCertificate },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientDeliveryReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       PerRecipientDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientDeliveryReportFields);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   PerRecipientDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientDeliveryReportFields);
 
   return offset;
 }
-static int dissect_report_type_delivery_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientDeliveryReportFields(TRUE, tvb, offset, actx, tree, hf_x411_report_type_delivery);
-}
 
 
-static const ber_old_sequence_t PerRecipientNonDeliveryReportFields_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_non_delivery_reason_code },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_non_delivery_diagnostic_code },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientNonDeliveryReportFields_sequence[] = {
+  { &hf_x411_non_delivery_reason_code, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_x411_NonDeliveryReasonCode },
+  { &hf_x411_non_delivery_diagnostic_code, BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_NonDeliveryDiagnosticCode },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientNonDeliveryReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       PerRecipientNonDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientNonDeliveryReportFields);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   PerRecipientNonDeliveryReportFields_sequence, hf_index, ett_x411_PerRecipientNonDeliveryReportFields);
 
   return offset;
 }
-static int dissect_non_delivery_report_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_PerRecipientNonDeliveryReportFields(TRUE, tvb, offset, actx, tree, hf_x411_non_delivery_report);
-}
 
 
 static const value_string x411_T_report_type_vals[] = {
@@ -6206,36 +5369,33 @@ static const value_string x411_T_report_type_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_report_type_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_report_type_delivery_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_non_delivery_report_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_report_type_choice[] = {
+  {   0, &hf_x411_report_type_delivery, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_PerRecipientDeliveryReportFields },
+  {   1, &hf_x411_non_delivery_report, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_PerRecipientNonDeliveryReportFields },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_report_type(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_report_type_choice, hf_index, ett_x411_T_report_type,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_report_type_choice, hf_index, ett_x411_T_report_type,
+                                 NULL);
 
   return offset;
 }
-static int dissect_report_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_report_type(FALSE, tvb, offset, actx, tree, hf_x411_report_type);
-}
 
 
-static const ber_old_sequence_t PerRecipientReportFields_sequence[] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_actual_recipient_name },
-  { BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_originally_intended_recipient_name },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_report_type },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PerRecipientReportFields_sequence[] = {
+  { &hf_x411_actual_recipient_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSActualRecipientName },
+  { &hf_x411_originally_intended_recipient_name, BER_CLASS_APP, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_MTSOriginallyIntendedRecipientName },
+  { &hf_x411_report_type    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_report_type },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PerRecipientReportFields(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       PerRecipientReportFields_sequence, hf_index, ett_x411_PerRecipientReportFields);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   PerRecipientReportFields_sequence, hf_index, ett_x411_PerRecipientReportFields);
 
   return offset;
 }
@@ -6259,17 +5419,17 @@ dissect_x411_ProofOfSubmission(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int
 }
 
 
-static const ber_old_sequence_t ReportingMTAName_sequence[] = {
-  { BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_domain },
-  { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta_name },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_mta_directory_name_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t ReportingMTAName_sequence[] = {
+  { &hf_x411_domain         , BER_CLASS_APP, 3, BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_mta_name       , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_MTAName },
+  { &hf_x411_mta_directory_name, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509if_Name },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ReportingMTAName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       ReportingMTAName_sequence, hf_index, ett_x411_ReportingMTAName);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   ReportingMTAName_sequence, hf_index, ett_x411_ReportingMTAName);
 
   return offset;
 }
@@ -6281,64 +5441,61 @@ static const value_string x411_ExtendedCertificate_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ExtendedCertificate_choice[] = {
-  {   0, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_directory_entry_impl },
-  {   1, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_certificate_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ExtendedCertificate_choice[] = {
+  {   0, &hf_x411_directory_entry, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x509if_Name },
+  {   1, &hf_x411_certificate    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x509af_Certificates },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ExtendedCertificate(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ExtendedCertificate_choice, hf_index, ett_x411_ExtendedCertificate,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ExtendedCertificate_choice, hf_index, ett_x411_ExtendedCertificate,
+                                 NULL);
 
   return offset;
 }
-static int dissect_ExtendedCertificates_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_ExtendedCertificate(FALSE, tvb, offset, actx, tree, hf_x411_ExtendedCertificates_item);
-}
 
 
-static const ber_old_sequence_t ExtendedCertificates_set_of[1] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_ExtendedCertificates_item },
+static const ber_sequence_t ExtendedCertificates_set_of[1] = {
+  { &hf_x411_ExtendedCertificates_item, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_ExtendedCertificate },
 };
 
 int
 dissect_x411_ExtendedCertificates(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     ExtendedCertificates_set_of, hf_index, ett_x411_ExtendedCertificates);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 ExtendedCertificates_set_of, hf_index, ett_x411_ExtendedCertificates);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t DLExemptedRecipients_set_of[1] = {
-  { BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_DLExemptedRecipients_item },
+static const ber_sequence_t DLExemptedRecipients_set_of[1] = {
+  { &hf_x411_DLExemptedRecipients_item, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_ORAddressAndOrDirectoryName },
 };
 
 static int
 dissect_x411_DLExemptedRecipients(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set_of(implicit_tag, actx, tree, tvb, offset,
-                                     DLExemptedRecipients_set_of, hf_index, ett_x411_DLExemptedRecipients);
+  offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
+                                 DLExemptedRecipients_set_of, hf_index, ett_x411_DLExemptedRecipients);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t CertificateSelectors_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryption_recipient_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryption_originator_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_selectors_content_integrity_check_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_token_signature_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_origin_authentication_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t CertificateSelectors_set[] = {
+  { &hf_x411_encryption_recipient, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { &hf_x411_encryption_originator, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { &hf_x411_selectors_content_integrity_check, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { &hf_x411_token_signature, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { &hf_x411_message_origin_authentication, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509ce_CertificateAssertion },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_CertificateSelectors(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  CertificateSelectors_set, hf_index, ett_x411_CertificateSelectors);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              CertificateSelectors_set, hf_index, ett_x411_CertificateSelectors);
 
   return offset;
 }
@@ -6347,7 +5504,7 @@ dissect_x411_CertificateSelectors(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
 static int
 dissect_x411_CommonName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 479 "x411.cnf"
+#line 606 "x411.cnf"
        tvbuff_t        *string = NULL;
 
          offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_PrintableString,
@@ -6362,8 +5519,6 @@ dissect_x411_CommonName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
 
 
 
-
-
   return offset;
 }
 
@@ -6388,9 +5543,6 @@ dissect_x411_BMPString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
 
   return offset;
 }
-static int dissect_two_octets(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_BMPString(FALSE, tvb, offset, actx, tree, hf_x411_two_octets);
-}
 
 
 
@@ -6402,9 +5554,6 @@ dissect_x411_UniversalString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int o
 
   return offset;
 }
-static int dissect_four_octets(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalString(FALSE, tvb, offset, actx, tree, hf_x411_four_octets);
-}
 
 
 static const value_string x411_T_character_encoding_vals[] = {
@@ -6413,56 +5562,35 @@ static const value_string x411_T_character_encoding_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_character_encoding_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_two_octets },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_UniversalString, BER_FLAGS_NOOWNTAG, dissect_four_octets },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_character_encoding_choice[] = {
+  {   0, &hf_x411_two_octets     , BER_CLASS_UNI, BER_UNI_TAG_BMPString, BER_FLAGS_NOOWNTAG, dissect_x411_BMPString },
+  {   1, &hf_x411_four_octets    , BER_CLASS_UNI, BER_UNI_TAG_UniversalString, BER_FLAGS_NOOWNTAG, dissect_x411_UniversalString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_character_encoding(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_character_encoding_choice, hf_index, ett_x411_T_character_encoding,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_character_encoding_choice, hf_index, ett_x411_T_character_encoding,
+                                 NULL);
 
   return offset;
 }
-static int dissect_character_encoding(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_character_encoding(FALSE, tvb, offset, actx, tree, hf_x411_character_encoding);
-}
 
 
-static const ber_old_sequence_t UniversalOrBMPString_set[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_character_encoding },
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_iso_639_language_code },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t UniversalOrBMPString_set[] = {
+  { &hf_x411_character_encoding, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_character_encoding },
+  { &hf_x411_iso_639_language_code, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PrintableString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
 dissect_x411_UniversalOrBMPString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  UniversalOrBMPString_set, hf_index, ett_x411_UniversalOrBMPString);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              UniversalOrBMPString_set, hf_index, ett_x411_UniversalOrBMPString);
 
   return offset;
 }
-static int dissect_universal_surname_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, actx, tree, hf_x411_universal_surname);
-}
-static int dissect_universal_given_name_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, actx, tree, hf_x411_universal_given_name);
-}
-static int dissect_universal_initials_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, actx, tree, hf_x411_universal_initials);
-}
-static int dissect_universal_generation_qualifier_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(TRUE, tvb, offset, actx, tree, hf_x411_universal_generation_qualifier);
-}
-static int dissect_universal_type(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(FALSE, tvb, offset, actx, tree, hf_x411_universal_type);
-}
-static int dissect_universal_value(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrBMPString(FALSE, tvb, offset, actx, tree, hf_x411_universal_value);
-}
 
 
 
@@ -6486,43 +5614,64 @@ dissect_x411_TeletexOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U
 
 
 
-static int
-dissect_x411_UniversalOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, actx, tree, hf_index);
+static int
+dissect_x411_UniversalOrganizationName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_UniversalOrBMPString(implicit_tag, tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+
+static int
+dissect_x411_AddrTeletexString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 641 "x411.cnf"
+       tvbuff_t        *tstring = NULL;
+
+         offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_TeletexString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            &tstring);
+
+
+       if(doing_address && tstring) 
+               g_strlcat(oraddress, tvb_format_text(tstring, 0, tvb_length(tstring)), MAX_ORA_STR_LEN);
+
+
+
 
   return offset;
 }
 
 
-static const ber_old_sequence_t TeletexPersonalName_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_teletex_surname_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_given_name_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_initials_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_generation_qualifier_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t TeletexPersonalName_set[] = {
+  { &hf_x411_teletex_surname, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_AddrTeletexString },
+  { &hf_x411_teletex_given_name, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_AddrTeletexString },
+  { &hf_x411_teletex_initials, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_AddrTeletexString },
+  { &hf_x411_teletex_generation_qualifier, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_AddrTeletexString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_TeletexPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  TeletexPersonalName_set, hf_index, ett_x411_TeletexPersonalName);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              TeletexPersonalName_set, hf_index, ett_x411_TeletexPersonalName);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t UniversalPersonalName_set[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_universal_surname_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_given_name_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_initials_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_universal_generation_qualifier_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t UniversalPersonalName_set[] = {
+  { &hf_x411_universal_surname, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_UniversalOrBMPString },
+  { &hf_x411_universal_given_name, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_UniversalOrBMPString },
+  { &hf_x411_universal_initials, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_UniversalOrBMPString },
+  { &hf_x411_universal_generation_qualifier, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_UniversalOrBMPString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_UniversalPersonalName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  UniversalPersonalName_set, hf_index, ett_x411_UniversalPersonalName);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              UniversalPersonalName_set, hf_index, ett_x411_UniversalPersonalName);
 
   return offset;
 }
@@ -6537,19 +5686,16 @@ dissect_x411_TeletexOrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t *
 
   return offset;
 }
-static int dissect_TeletexOrganizationalUnitNames_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexOrganizationalUnitName(FALSE, tvb, offset, actx, tree, hf_x411_TeletexOrganizationalUnitNames_item);
-}
 
 
-static const ber_old_sequence_t TeletexOrganizationalUnitNames_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_TeletexOrganizationalUnitNames_item },
+static const ber_sequence_t TeletexOrganizationalUnitNames_sequence_of[1] = {
+  { &hf_x411_TeletexOrganizationalUnitNames_item, BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_x411_TeletexOrganizationalUnitName },
 };
 
 static int
 dissect_x411_TeletexOrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          TeletexOrganizationalUnitNames_sequence_of, hf_index, ett_x411_TeletexOrganizationalUnitNames);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      TeletexOrganizationalUnitNames_sequence_of, hf_index, ett_x411_TeletexOrganizationalUnitNames);
 
   return offset;
 }
@@ -6562,19 +5708,16 @@ dissect_x411_UniversalOrganizationalUnitName(gboolean implicit_tag _U_, tvbuff_t
 
   return offset;
 }
-static int dissect_UniversalOrganizationalUnitNames_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalOrganizationalUnitName(FALSE, tvb, offset, actx, tree, hf_x411_UniversalOrganizationalUnitNames_item);
-}
 
 
-static const ber_old_sequence_t UniversalOrganizationalUnitNames_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_UniversalOrganizationalUnitNames_item },
+static const ber_sequence_t UniversalOrganizationalUnitNames_sequence_of[1] = {
+  { &hf_x411_UniversalOrganizationalUnitNames_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_UniversalOrganizationalUnitName },
 };
 
 static int
 dissect_x411_UniversalOrganizationalUnitNames(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          UniversalOrganizationalUnitNames_sequence_of, hf_index, ett_x411_UniversalOrganizationalUnitNames);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      UniversalOrganizationalUnitNames_sequence_of, hf_index, ett_x411_UniversalOrganizationalUnitNames);
 
   return offset;
 }
@@ -6597,17 +5740,17 @@ static const value_string x411_PhysicalDeliveryCountryName_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t PhysicalDeliveryCountryName_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x121_dcc_code },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_iso_3166_alpha2_code },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t PhysicalDeliveryCountryName_choice[] = {
+  {   0, &hf_x411_x121_dcc_code  , BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_iso_3166_alpha2_code, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrPrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PhysicalDeliveryCountryName(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     PhysicalDeliveryCountryName_choice, hf_index, ett_x411_PhysicalDeliveryCountryName,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 PhysicalDeliveryCountryName_choice, hf_index, ett_x411_PhysicalDeliveryCountryName,
+                                 NULL);
 
   return offset;
 }
@@ -6619,32 +5762,32 @@ static const value_string x411_PostalCode_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t PostalCode_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_numeric_code },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_code },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t PostalCode_choice[] = {
+  {   0, &hf_x411_numeric_code   , BER_CLASS_UNI, BER_UNI_TAG_NumericString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrNumericString },
+  {   1, &hf_x411_printable_code , BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_PrintableString },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PostalCode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     PostalCode_choice, hf_index, ett_x411_PostalCode,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 PostalCode_choice, hf_index, ett_x411_PostalCode,
+                                 NULL);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t PDSParameter_set[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_printable_string },
-  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_teletex_string },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t PDSParameter_set[] = {
+  { &hf_x411_printable_string, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_PrintableString },
+  { &hf_x411_teletex_string , BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_TeletexString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_PDSParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  PDSParameter_set, hf_index, ett_x411_PDSParameter);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              PDSParameter_set, hf_index, ett_x411_PDSParameter);
 
   return offset;
 }
@@ -6767,32 +5910,29 @@ dissect_x411_UniversalExtensionPhysicalDeliveryAddressComponents(gboolean implic
 }
 
 
-static const ber_old_sequence_t T_printable_address_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_printable_address_item },
+static const ber_sequence_t T_printable_address_sequence_of[1] = {
+  { &hf_x411_printable_address_item, BER_CLASS_UNI, BER_UNI_TAG_PrintableString, BER_FLAGS_NOOWNTAG, dissect_x411_PrintableString },
 };
 
 static int
 dissect_x411_T_printable_address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          T_printable_address_sequence_of, hf_index, ett_x411_T_printable_address);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      T_printable_address_sequence_of, hf_index, ett_x411_T_printable_address);
 
   return offset;
 }
-static int dissect_printable_address(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_printable_address(FALSE, tvb, offset, actx, tree, hf_x411_printable_address);
-}
 
 
-static const ber_old_sequence_t UnformattedPostalAddress_set[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_printable_address },
-  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_teletex_string },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t UnformattedPostalAddress_set[] = {
+  { &hf_x411_printable_address, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_T_printable_address },
+  { &hf_x411_teletex_string , BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_TeletexString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_UnformattedPostalAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  UnformattedPostalAddress_set, hf_index, ett_x411_UnformattedPostalAddress);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              UnformattedPostalAddress_set, hf_index, ett_x411_UnformattedPostalAddress);
 
   return offset;
 }
@@ -6844,6 +5984,15 @@ dissect_x411_UniversalPostOfficeBoxAddress(gboolean implicit_tag _U_, tvbuff_t *
 
 
 
+static int
+dissect_x411_PosteRestanteAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_x411_PDSParameter(implicit_tag, tvb, offset, actx, tree, hf_index);
+
+  return offset;
+}
+
+
+
 static int
 dissect_x411_UniversalPosteRestanteAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_x411_UniversalPDSParameter(implicit_tag, tvb, offset, actx, tree, hf_index);
@@ -6888,22 +6037,30 @@ dissect_x411_UniversalLocalPostalAttributes(gboolean implicit_tag _U_, tvbuff_t
 }
 
 
-static const ber_old_sequence_t T_e163_4_address_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_number_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_sub_address_impl },
-  { 0, 0, 0, NULL }
+
+static int
+dissect_x411_NumericString(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_NumericString,
+                                            actx, tree, tvb, offset, hf_index,
+                                            NULL);
+
+  return offset;
+}
+
+
+static const ber_sequence_t T_e163_4_address_sequence[] = {
+  { &hf_x411_number         , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_NumericString },
+  { &hf_x411_sub_address    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_NumericString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_e163_4_address(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       T_e163_4_address_sequence, hf_index, ett_x411_T_e163_4_address);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   T_e163_4_address_sequence, hf_index, ett_x411_T_e163_4_address);
 
   return offset;
 }
-static int dissect_e163_4_address(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_e163_4_address(FALSE, tvb, offset, actx, tree, hf_x411_e163_4_address);
-}
 
 
 static const value_string x411_ExtendedNetworkAddress_vals[] = {
@@ -6912,17 +6069,17 @@ static const value_string x411_ExtendedNetworkAddress_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t ExtendedNetworkAddress_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_e163_4_address },
-  {   1, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_psap_address_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t ExtendedNetworkAddress_choice[] = {
+  {   0, &hf_x411_e163_4_address , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_T_e163_4_address },
+  {   1, &hf_x411_psap_address   , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x509sat_PresentationAddress },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_ExtendedNetworkAddress(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     ExtendedNetworkAddress_choice, hf_index, ett_x411_ExtendedNetworkAddress,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 ExtendedNetworkAddress_choice, hf_index, ett_x411_ExtendedNetworkAddress,
+                                 NULL);
 
   return offset;
 }
@@ -6942,103 +6099,97 @@ static const value_string x411_TerminalType_vals[] = {
 static int
 dissect_x411_TerminalType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
-                                  NULL);
+                                                NULL);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t TeletexDomainDefinedAttribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_teletex_value },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t TeletexDomainDefinedAttribute_sequence[] = {
+  { &hf_x411_type           , BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrTeletexString },
+  { &hf_x411_teletex_value  , BER_CLASS_UNI, BER_UNI_TAG_TeletexString, BER_FLAGS_NOOWNTAG, dissect_x411_AddrTeletexString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_TeletexDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       TeletexDomainDefinedAttribute_sequence, hf_index, ett_x411_TeletexDomainDefinedAttribute);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   TeletexDomainDefinedAttribute_sequence, hf_index, ett_x411_TeletexDomainDefinedAttribute);
 
   return offset;
 }
-static int dissect_TeletexDomainDefinedAttributes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TeletexDomainDefinedAttribute(FALSE, tvb, offset, actx, tree, hf_x411_TeletexDomainDefinedAttributes_item);
-}
 
 
-static const ber_old_sequence_t TeletexDomainDefinedAttributes_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_TeletexDomainDefinedAttributes_item },
+static const ber_sequence_t TeletexDomainDefinedAttributes_sequence_of[1] = {
+  { &hf_x411_TeletexDomainDefinedAttributes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_TeletexDomainDefinedAttribute },
 };
 
 static int
 dissect_x411_TeletexDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          TeletexDomainDefinedAttributes_sequence_of, hf_index, ett_x411_TeletexDomainDefinedAttributes);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      TeletexDomainDefinedAttributes_sequence_of, hf_index, ett_x411_TeletexDomainDefinedAttributes);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t UniversalDomainDefinedAttribute_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_universal_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_universal_value },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t UniversalDomainDefinedAttribute_sequence[] = {
+  { &hf_x411_universal_type , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_UniversalOrBMPString },
+  { &hf_x411_universal_value, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x411_UniversalOrBMPString },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_UniversalDomainDefinedAttribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       UniversalDomainDefinedAttribute_sequence, hf_index, ett_x411_UniversalDomainDefinedAttribute);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   UniversalDomainDefinedAttribute_sequence, hf_index, ett_x411_UniversalDomainDefinedAttribute);
 
   return offset;
 }
-static int dissect_UniversalDomainDefinedAttributes_item(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_UniversalDomainDefinedAttribute(FALSE, tvb, offset, actx, tree, hf_x411_UniversalDomainDefinedAttributes_item);
-}
 
 
-static const ber_old_sequence_t UniversalDomainDefinedAttributes_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_UniversalDomainDefinedAttributes_item },
+static const ber_sequence_t UniversalDomainDefinedAttributes_sequence_of[1] = {
+  { &hf_x411_UniversalDomainDefinedAttributes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_UniversalDomainDefinedAttribute },
 };
 
 static int
 dissect_x411_UniversalDomainDefinedAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence_of(implicit_tag, actx, tree, tvb, offset,
-                                          UniversalDomainDefinedAttributes_sequence_of, hf_index, ett_x411_UniversalDomainDefinedAttributes);
+  offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
+                                      UniversalDomainDefinedAttributes_sequence_of, hf_index, ett_x411_UniversalDomainDefinedAttributes);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t NonBasicParameters_set[] = {
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_g3_facsimile_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_teletex_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t NonBasicParameters_set[] = {
+  { &hf_x411_g3_facsimile   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_G3FacsimileNonBasicParameters },
+  { &hf_x411_teletex        , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TeletexNonBasicParameters },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_NonBasicParameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_set(implicit_tag, actx, tree, tvb, offset,
-                                  NonBasicParameters_set, hf_index, ett_x411_NonBasicParameters);
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              NonBasicParameters_set, hf_index, ett_x411_NonBasicParameters);
 
   return offset;
 }
 
 
-static const ber_old_sequence_t MTANameAndOptionalGDI_sequence[] = {
-  { BER_CLASS_APP, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_global_domain_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_mta_name },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MTANameAndOptionalGDI_sequence[] = {
+  { &hf_x411_global_domain_identifier, BER_CLASS_APP, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_x411_GlobalDomainIdentifier },
+  { &hf_x411_mta_name       , BER_CLASS_UNI, BER_UNI_TAG_IA5String, BER_FLAGS_NOOWNTAG, dissect_x411_MTAName },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MTANameAndOptionalGDI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 610 "x411.cnf"
+#line 795 "x411.cnf"
 
        doing_address = TRUE;
 
-         offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MTANameAndOptionalGDI_sequence, hf_index, ett_x411_MTANameAndOptionalGDI);
+         offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MTANameAndOptionalGDI_sequence, hf_index, ett_x411_MTANameAndOptionalGDI);
 
 
        doing_address = FALSE;
@@ -7048,9 +6199,6 @@ dissect_x411_MTANameAndOptionalGDI(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
 
   return offset;
 }
-static int dissect_token_mta_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_MTANameAndOptionalGDI(TRUE, tvb, offset, actx, tree, hf_x411_token_mta);
-}
 
 
 static const value_string x411_T_name_vals[] = {
@@ -7059,92 +6207,110 @@ static const value_string x411_T_name_vals[] = {
   { 0, NULL }
 };
 
-static const ber_old_choice_t T_name_choice[] = {
-  {   0, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_token_recipient_name },
-  {   1, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_token_mta_impl },
-  { 0, 0, 0, 0, NULL }
+static const ber_choice_t T_name_choice[] = {
+  {   0, &hf_x411_token_recipient_name, BER_CLASS_APP, 0, BER_FLAGS_NOOWNTAG, dissect_x411_MTSRecipientName },
+  {   1, &hf_x411_token_mta      , BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_x411_MTANameAndOptionalGDI },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_T_name(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_choice(actx, tree, tvb, offset,
-                                     T_name_choice, hf_index, ett_x411_T_name,
-                                     NULL);
+  offset = dissect_ber_choice(actx, tree, tvb, offset,
+                                 T_name_choice, hf_index, ett_x411_T_name,
+                                 NULL);
 
   return offset;
 }
-static int dissect_name(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_name(FALSE, tvb, offset, actx, tree, hf_x411_name);
+
+
+static const value_string x411_TokenDataType_vals[] = {
+  {   1, "bind-token-signed-data" },
+  {   2, "message-token-signed-data" },
+  {   3, "message-token-encrypted-data" },
+  {   4, "bind-token-encrypted-data" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_x411_TokenDataType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &extension_id);
+
+  return offset;
 }
 
 
 
 static int
 dissect_x411_T_value(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 710 "x411.cnf"
+#line 899 "x411.cnf"
 
-       offset=call_x411_oid_callback("x411.tokendata", tvb, offset, actx->pinfo, tree);
+       proto_item_append_text(tree, " (%s)", val_to_str(extension_id, x411_TokenDataType_vals, "tokendata-type %d")); 
+       if (dissector_try_port(x411_tokendata_dissector_table, extension_id, tvb, actx->pinfo, tree)) {
+               offset = tvb_length(tvb);
+       } else {
+               proto_item *item = NULL;
+               proto_tree *next_tree = NULL;
+
+               item = proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), 
+                       "Dissector for tokendata-type %d not implemented.  Contact Wireshark developers if you want this supported", extension_id);
+               next_tree = proto_item_add_subtree(item, ett_x411_unknown_tokendata_type);
+               offset = dissect_unknown_ber(actx->pinfo, tvb, offset, next_tree);
+               expert_add_info_format(actx->pinfo, item, PI_UNDECODED, PI_WARN, "Unknown tokendata-type");
+       }
 
 
 
   return offset;
 }
-static int dissect_value_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_T_value(TRUE, tvb, offset, actx, tree, hf_x411_value);
-}
 
 
-static const ber_old_sequence_t TokenData_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_token_data_type_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_value_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t TokenData_sequence[] = {
+  { &hf_x411_token_data_type, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_x411_TokenDataType },
+  { &hf_x411_value          , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_x411_T_value },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_TokenData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       TokenData_sequence, hf_index, ett_x411_TokenData);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   TokenData_sequence, hf_index, ett_x411_TokenData);
 
   return offset;
 }
-static int dissect_signed_data_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_TokenData(TRUE, tvb, offset, actx, tree, hf_x411_signed_data);
-}
 
 
-static const ber_old_sequence_t AsymmetricTokenData_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signature_algorithm_identifier },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_name },
-  { BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_time },
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_signed_data_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encryption_algorithm_identifier_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_encrypted_data_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t AsymmetricTokenData_sequence[] = {
+  { &hf_x411_signature_algorithm_identifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_x411_name           , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_x411_T_name },
+  { &hf_x411_time           , BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_x411_Time },
+  { &hf_x411_signed_data    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_TokenData },
+  { &hf_x411_encryption_algorithm_identifier, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_x411_encrypted_data , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_AsymmetricTokenData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       AsymmetricTokenData_sequence, hf_index, ett_x411_AsymmetricTokenData);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   AsymmetricTokenData_sequence, hf_index, ett_x411_AsymmetricTokenData);
 
   return offset;
 }
-static int dissect_asymmetric_token_data(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_AsymmetricTokenData(FALSE, tvb, offset, actx, tree, hf_x411_asymmetric_token_data);
-}
 
 
-static const ber_old_sequence_t AsymmetricToken_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_asymmetric_token_data },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithm_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t AsymmetricToken_sequence[] = {
+  { &hf_x411_asymmetric_token_data, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x411_AsymmetricTokenData },
+  { &hf_x411_algorithm_identifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_x411_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_x411_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_AsymmetricToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       AsymmetricToken_sequence, hf_index, ett_x411_AsymmetricToken);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   AsymmetricToken_sequence, hf_index, ett_x411_AsymmetricToken);
 
   return offset;
 }
@@ -7170,19 +6336,19 @@ dissect_x411_BindTokenSignedData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
 }
 
 
-static const ber_old_sequence_t MessageTokenSignedData_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_confidentiality_algorithm_identifier_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_integrity_check_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_security_label_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_proof_of_delivery_request_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_sequence_number_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageTokenSignedData_sequence[] = {
+  { &hf_x411_content_confidentiality_algorithm_identifier, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentConfidentialityAlgorithmIdentifier },
+  { &hf_x411_content_integrity_check, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentIntegrityCheck },
+  { &hf_x411_message_security_label, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_MessageSecurityLabel },
+  { &hf_x411_proof_of_delivery_request, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ProofOfDeliveryRequest },
+  { &hf_x411_message_sequence_number, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageTokenSignedData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MessageTokenSignedData_sequence, hf_index, ett_x411_MessageTokenSignedData);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MessageTokenSignedData_sequence, hf_index, ett_x411_MessageTokenSignedData);
 
   return offset;
 }
@@ -7197,27 +6363,21 @@ dissect_x411_EncryptionKey(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int off
 
   return offset;
 }
-static int dissect_content_confidentiality_key_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_EncryptionKey(TRUE, tvb, offset, actx, tree, hf_x411_content_confidentiality_key);
-}
-static int dissect_content_integrity_key_impl(proto_tree *tree _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_) {
-  return dissect_x411_EncryptionKey(TRUE, tvb, offset, actx, tree, hf_x411_content_integrity_key);
-}
 
 
-static const ber_old_sequence_t MessageTokenEncryptedData_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_confidentiality_key_impl },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_integrity_check_impl },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_security_label_impl },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_content_integrity_key_impl },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_message_sequence_number_impl },
-  { 0, 0, 0, NULL }
+static const ber_sequence_t MessageTokenEncryptedData_sequence[] = {
+  { &hf_x411_content_confidentiality_key, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_EncryptionKey },
+  { &hf_x411_content_integrity_check, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_ContentIntegrityCheck },
+  { &hf_x411_message_security_label, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_MessageSecurityLabel },
+  { &hf_x411_content_integrity_key, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_EncryptionKey },
+  { &hf_x411_message_sequence_number, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x411_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
 dissect_x411_MessageTokenEncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_ber_old_sequence(implicit_tag, actx, tree, tvb, offset,
-                                       MessageTokenEncryptedData_sequence, hf_index, ett_x411_MessageTokenEncryptedData);
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   MessageTokenEncryptedData_sequence, hf_index, ett_x411_MessageTokenEncryptedData);
 
   return offset;
 }
@@ -7226,42 +6386,37 @@ dissect_x411_MessageTokenEncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb
 
 static int
 dissect_x411_BindTokenEncryptedData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-  offset = dissect_acse_EXTERNALt(implicit_tag, tvb, offset, actx, tree, hf_index);
+  offset = dissect_ber_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
 
   return offset;
 }
 
 /*--- PDUs ---*/
 
-static void dissect_MTABindArgument_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
-  asn1_ctx_t asn1_ctx;
-  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_MTABindArgument(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MTABindArgument_PDU);
-}
-static void dissect_MTABindResult_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_InternalTraceInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_MTABindResult(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MTABindResult_PDU);
+  dissect_x411_InternalTraceInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_InternalTraceInformation_PDU);
 }
-static void dissect_MTABindError_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_InternalTraceInformationElement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_MTABindError(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MTABindError_PDU);
+  dissect_x411_InternalTraceInformationElement(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_InternalTraceInformationElement_PDU);
 }
-static void dissect_MTS_APDU_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_TraceInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_MTS_APDU(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MTS_APDU_PDU);
+  dissect_x411_TraceInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TraceInformation_PDU);
 }
-static void dissect_InternalTraceInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_TraceInformationElement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_InternalTraceInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_InternalTraceInformation_PDU);
+  dissect_x411_TraceInformationElement(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TraceInformationElement_PDU);
 }
-static void dissect_TraceInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_MessageSubmissionTime_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_TraceInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TraceInformation_PDU);
+  dissect_x411_MessageSubmissionTime(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MessageSubmissionTime_PDU);
 }
 static void dissect_ReportDeliveryArgument_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
@@ -7278,16 +6433,91 @@ static void dissect_ProofOfDelivery_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
   dissect_x411_ProofOfDelivery(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProofOfDelivery_PDU);
 }
+static void dissect_MessageSubmissionEnvelope_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_MessageSubmissionEnvelope(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MessageSubmissionEnvelope_PDU);
+}
+static void dissect_PerRecipientMessageSubmissionFields_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PerRecipientMessageSubmissionFields(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PerRecipientMessageSubmissionFields_PDU);
+}
+static void dissect_ProbeSubmissionEnvelope_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ProbeSubmissionEnvelope(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProbeSubmissionEnvelope_PDU);
+}
+static void dissect_PerRecipientProbeSubmissionFields_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PerRecipientProbeSubmissionFields(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PerRecipientProbeSubmissionFields_PDU);
+}
+static void dissect_MessageDeliveryEnvelope_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_MessageDeliveryEnvelope(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MessageDeliveryEnvelope_PDU);
+}
+static void dissect_ReportDeliveryEnvelope_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ReportDeliveryEnvelope(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportDeliveryEnvelope_PDU);
+}
+static void dissect_PerRecipientReportDeliveryFields_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PerRecipientReportDeliveryFields(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PerRecipientReportDeliveryFields_PDU);
+}
 static void dissect_ExtendedContentType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
   dissect_x411_ExtendedContentType(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtendedContentType_PDU);
 }
+static void dissect_ContentIdentifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ContentIdentifier(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ContentIdentifier_PDU);
+}
+static void dissect_PerMessageIndicators_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PerMessageIndicators(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PerMessageIndicators_PDU);
+}
+static void dissect_OriginatorReportRequest_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_OriginatorReportRequest(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_OriginatorReportRequest_PDU);
+}
+static void dissect_DeferredDeliveryTime_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_DeferredDeliveryTime(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DeferredDeliveryTime_PDU);
+}
+static void dissect_Priority_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_Priority(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_Priority_PDU);
+}
 static void dissect_ContentLength_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
   dissect_x411_ContentLength(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ContentLength_PDU);
 }
+static void dissect_MessageDeliveryTime_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_MessageDeliveryTime(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MessageDeliveryTime_PDU);
+}
+static void dissect_DeliveryFlags_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_DeliveryFlags(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DeliveryFlags_PDU);
+}
+static void dissect_SubjectSubmissionIdentifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_SubjectSubmissionIdentifier(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_SubjectSubmissionIdentifier_PDU);
+}
 static void dissect_RecipientReassignmentProhibited_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
@@ -7403,145 +6633,305 @@ static void dissect_ContentCorrelator_PDU(tvbuff_t *tvb _U_, packet_info *pinfo
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
   dissect_x411_ContentCorrelator(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ContentCorrelator_PDU);
 }
-static void dissect_ProbeOriginAuthenticationCheck_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_ProbeOriginAuthenticationCheck_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ProbeOriginAuthenticationCheck(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProbeOriginAuthenticationCheck_PDU);
+}
+static void dissect_RedirectionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_RedirectionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_RedirectionHistory_PDU);
+}
+static void dissect_Redirection_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_Redirection(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_Redirection_PDU);
+}
+static void dissect_DLExpansionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_DLExpansionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DLExpansionHistory_PDU);
+}
+static void dissect_DLExpansion_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_DLExpansion(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DLExpansion_PDU);
+}
+static void dissect_PhysicalForwardingAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PhysicalForwardingAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalForwardingAddress_PDU);
+}
+static void dissect_OriginatorAndDLExpansionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_OriginatorAndDLExpansionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_OriginatorAndDLExpansionHistory_PDU);
+}
+static void dissect_ReportingDLName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ReportingDLName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingDLName_PDU);
+}
+static void dissect_ReportingMTACertificate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ReportingMTACertificate(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingMTACertificate_PDU);
+}
+static void dissect_ReportOriginAuthenticationCheck_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ReportOriginAuthenticationCheck(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportOriginAuthenticationCheck_PDU);
+}
+static void dissect_OriginatingMTACertificate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_OriginatingMTACertificate(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_OriginatingMTACertificate_PDU);
+}
+static void dissect_ProofOfSubmission_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ProofOfSubmission(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProofOfSubmission_PDU);
+}
+static void dissect_ReportingMTAName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ReportingMTAName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingMTAName_PDU);
+}
+static void dissect_ExtendedCertificates_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ExtendedCertificates(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtendedCertificates_PDU);
+}
+static void dissect_DLExemptedRecipients_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_DLExemptedRecipients(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DLExemptedRecipients_PDU);
+}
+static void dissect_CertificateSelectors_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_CertificateSelectors(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_CertificateSelectors_PDU);
+}
+static void dissect_Content_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_Content(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_Content_PDU);
+}
+static void dissect_MTSIdentifier_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_MTSIdentifier(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_MTSIdentifier_PDU);
+}
+static void dissect_ORName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ORName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ORName_PDU);
+}
+static void dissect_ORAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_ORAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ORAddress_PDU);
+}
+static void dissect_CommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_CommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_CommonName_PDU);
+}
+static void dissect_TeletexCommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_TeletexCommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexCommonName_PDU);
+}
+static void dissect_UniversalCommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_UniversalCommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalCommonName_PDU);
+}
+static void dissect_TeletexOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_TeletexOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexOrganizationName_PDU);
+}
+static void dissect_UniversalOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_UniversalOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalOrganizationName_PDU);
+}
+static void dissect_TeletexPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_TeletexPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexPersonalName_PDU);
+}
+static void dissect_UniversalPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_UniversalPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPersonalName_PDU);
+}
+static void dissect_TeletexOrganizationalUnitNames_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_TeletexOrganizationalUnitNames(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexOrganizationalUnitNames_PDU);
+}
+static void dissect_UniversalOrganizationalUnitNames_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_UniversalOrganizationalUnitNames(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalOrganizationalUnitNames_PDU);
+}
+static void dissect_PDSName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PDSName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PDSName_PDU);
+}
+static void dissect_PhysicalDeliveryCountryName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PhysicalDeliveryCountryName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryCountryName_PDU);
+}
+static void dissect_PostalCode_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_PostalCode(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PostalCode_PDU);
+}
+static void dissect_PhysicalDeliveryOfficeName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ProbeOriginAuthenticationCheck(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProbeOriginAuthenticationCheck_PDU);
+  dissect_x411_PhysicalDeliveryOfficeName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryOfficeName_PDU);
 }
-static void dissect_RedirectionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPhysicalDeliveryOfficeName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_RedirectionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_RedirectionHistory_PDU);
+  dissect_x411_UniversalPhysicalDeliveryOfficeName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPhysicalDeliveryOfficeName_PDU);
 }
-static void dissect_DLExpansionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_PhysicalDeliveryOfficeNumber_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_DLExpansionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DLExpansionHistory_PDU);
+  dissect_x411_PhysicalDeliveryOfficeNumber(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryOfficeNumber_PDU);
 }
-static void dissect_PhysicalForwardingAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPhysicalDeliveryOfficeNumber_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_PhysicalForwardingAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalForwardingAddress_PDU);
+  dissect_x411_UniversalPhysicalDeliveryOfficeNumber(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPhysicalDeliveryOfficeNumber_PDU);
 }
-static void dissect_OriginatorAndDLExpansionHistory_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_ExtensionORAddressComponents_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_OriginatorAndDLExpansionHistory(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_OriginatorAndDLExpansionHistory_PDU);
+  dissect_x411_ExtensionORAddressComponents(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtensionORAddressComponents_PDU);
 }
-static void dissect_ReportingDLName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalExtensionORAddressComponents_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ReportingDLName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingDLName_PDU);
+  dissect_x411_UniversalExtensionORAddressComponents(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalExtensionORAddressComponents_PDU);
 }
-static void dissect_ReportingMTACertificate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_PhysicalDeliveryPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ReportingMTACertificate(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingMTACertificate_PDU);
+  dissect_x411_PhysicalDeliveryPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryPersonalName_PDU);
 }
-static void dissect_ReportOriginAuthenticationCheck_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPhysicalDeliveryPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ReportOriginAuthenticationCheck(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportOriginAuthenticationCheck_PDU);
+  dissect_x411_UniversalPhysicalDeliveryPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPhysicalDeliveryPersonalName_PDU);
 }
-static void dissect_ProofOfSubmission_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_PhysicalDeliveryOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ProofOfSubmission(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ProofOfSubmission_PDU);
+  dissect_x411_PhysicalDeliveryOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryOrganizationName_PDU);
 }
-static void dissect_ReportingMTAName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPhysicalDeliveryOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ReportingMTAName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ReportingMTAName_PDU);
+  dissect_x411_UniversalPhysicalDeliveryOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPhysicalDeliveryOrganizationName_PDU);
 }
-static void dissect_ExtendedCertificates_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_ExtensionPhysicalDeliveryAddressComponents_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ExtendedCertificates(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtendedCertificates_PDU);
+  dissect_x411_ExtensionPhysicalDeliveryAddressComponents(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtensionPhysicalDeliveryAddressComponents_PDU);
 }
-static void dissect_DLExemptedRecipients_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalExtensionPhysicalDeliveryAddressComponents_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_DLExemptedRecipients(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_DLExemptedRecipients_PDU);
+  dissect_x411_UniversalExtensionPhysicalDeliveryAddressComponents(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalExtensionPhysicalDeliveryAddressComponents_PDU);
 }
-static void dissect_CertificateSelectors_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UnformattedPostalAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_CertificateSelectors(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_CertificateSelectors_PDU);
+  dissect_x411_UnformattedPostalAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UnformattedPostalAddress_PDU);
 }
-static void dissect_ORName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalUnformattedPostalAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ORName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ORName_PDU);
+  dissect_x411_UniversalUnformattedPostalAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalUnformattedPostalAddress_PDU);
 }
-static void dissect_ORAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_StreetAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_ORAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ORAddress_PDU);
+  dissect_x411_StreetAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_StreetAddress_PDU);
 }
-static void dissect_CommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalStreetAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_CommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_CommonName_PDU);
+  dissect_x411_UniversalStreetAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalStreetAddress_PDU);
 }
-static void dissect_TeletexCommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_PostOfficeBoxAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_TeletexCommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexCommonName_PDU);
+  dissect_x411_PostOfficeBoxAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PostOfficeBoxAddress_PDU);
 }
-static void dissect_UniversalCommonName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPostOfficeBoxAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_UniversalCommonName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalCommonName_PDU);
+  dissect_x411_UniversalPostOfficeBoxAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPostOfficeBoxAddress_PDU);
 }
-static void dissect_TeletexOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_PosteRestanteAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_TeletexOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexOrganizationName_PDU);
+  dissect_x411_PosteRestanteAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PosteRestanteAddress_PDU);
 }
-static void dissect_UniversalOrganizationName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalPosteRestanteAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_UniversalOrganizationName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalOrganizationName_PDU);
+  dissect_x411_UniversalPosteRestanteAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPosteRestanteAddress_PDU);
 }
-static void dissect_TeletexPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniquePostalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_TeletexPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexPersonalName_PDU);
+  dissect_x411_UniquePostalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniquePostalName_PDU);
 }
-static void dissect_UniversalPersonalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalUniquePostalName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_UniversalPersonalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalPersonalName_PDU);
+  dissect_x411_UniversalUniquePostalName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalUniquePostalName_PDU);
 }
-static void dissect_TeletexOrganizationalUnitNames_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_LocalPostalAttributes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_TeletexOrganizationalUnitNames(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexOrganizationalUnitNames_PDU);
+  dissect_x411_LocalPostalAttributes(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_LocalPostalAttributes_PDU);
 }
-static void dissect_UniversalOrganizationalUnitNames_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalLocalPostalAttributes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_UniversalOrganizationalUnitNames(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalOrganizationalUnitNames_PDU);
+  dissect_x411_UniversalLocalPostalAttributes(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalLocalPostalAttributes_PDU);
 }
-static void dissect_PDSName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_ExtendedNetworkAddress_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_PDSName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PDSName_PDU);
+  dissect_x411_ExtendedNetworkAddress(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_ExtendedNetworkAddress_PDU);
 }
-static void dissect_PhysicalDeliveryCountryName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_TerminalType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_PhysicalDeliveryCountryName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryCountryName_PDU);
+  dissect_x411_TerminalType(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TerminalType_PDU);
 }
-static void dissect_PostalCode_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_TeletexDomainDefinedAttributes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_PostalCode(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PostalCode_PDU);
+  dissect_x411_TeletexDomainDefinedAttributes(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_TeletexDomainDefinedAttributes_PDU);
 }
-static void dissect_PhysicalDeliveryOfficeName_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+static void dissect_UniversalDomainDefinedAttributes_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
-  dissect_x411_PhysicalDeliveryOfficeName(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_PhysicalDeliveryOfficeName_PDU);
+  dissect_x411_UniversalDomainDefinedAttributes(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_UniversalDomainDefinedAttributes_PDU);
 }
 static void dissect_ExtendedEncodedInformationType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
   asn1_ctx_t asn1_ctx;
@@ -7578,26 +6968,17 @@ static void dissect_BindTokenEncryptedData_PDU(tvbuff_t *tvb _U_, packet_info *p
   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
   dissect_x411_BindTokenEncryptedData(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_BindTokenEncryptedData_PDU);
 }
+static void dissect_SecurityClassification_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_x411_SecurityClassification(FALSE, tvb, 0, &asn1_ctx, tree, hf_x411_SecurityClassification_PDU);
+}
 
 
 /*--- End of included file: packet-x411-fn.c ---*/
-#line 86 "packet-x411-template.c"
-
-static int
-call_x411_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
-{
-  const char *name = NULL;
-  char extension_oid[MAX_OID_STR_LEN];
-
-  sprintf(extension_oid, "%s.%d", base_oid, extension_id);     
-
-  name = get_oid_str_name(extension_oid);
-  proto_item_append_text(tree, " (%s)", name ? name : extension_oid); 
-
-  return call_ber_oid_callback(extension_oid, tvb, offset, pinfo, tree);
-
-}
+#line 105 "packet-x411-template.c"
 
+char* x411_get_last_oraddress() { return oraddress; }
 
 /*
  * Dissect X411 MTS APDU
@@ -7638,7 +7019,7 @@ dissect_x411(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
        proto_tree *tree=NULL;
        int (*x411_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx _U_, proto_tree *tree, int hf_index _U_) = NULL;
        char *x411_op_name;
-       int hf_x411_index;
+       int hf_x411_index = -1;
        asn1_ctx_t asn1_ctx;
        asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
 
@@ -7692,7 +7073,7 @@ dissect_x411(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
        }
 
        if (check_col(pinfo->cinfo, COL_INFO))
-         col_add_str(pinfo->cinfo, COL_INFO, x411_op_name);
+         col_set_str(pinfo->cinfo, COL_INFO, x411_op_name);
 
        while (tvb_reported_length_remaining(tvb, offset) > 0){
                old_offset=offset;
@@ -7712,9 +7093,7 @@ void proto_register_x411(void) {
   /* List of fields */
   static hf_register_info hf[] =
   {
-
-/*--- Included file: packet-x411-hfarr.c ---*/
-#line 1 "packet-x411-hfarr.c"
+         /* "Created by defining PDU in .cnf */
     { &hf_x411_MTABindArgument_PDU,
       { "MTABindArgument", "x411.MTABindArgument",
         FT_UINT32, BASE_DEC, VALS(x411_MTABindArgument_vals), 0,
@@ -7731,14 +7110,30 @@ void proto_register_x411(void) {
       { "MTS-APDU", "x411.MTS_APDU",
         FT_UINT32, BASE_DEC, VALS(x411_MTS_APDU_vals), 0,
         "x411.MTS_APDU", HFILL }},
+
+
+/*--- Included file: packet-x411-hfarr.c ---*/
+#line 1 "packet-x411-hfarr.c"
     { &hf_x411_InternalTraceInformation_PDU,
       { "InternalTraceInformation", "x411.InternalTraceInformation",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.InternalTraceInformation", HFILL }},
+    { &hf_x411_InternalTraceInformationElement_PDU,
+      { "InternalTraceInformationElement", "x411.InternalTraceInformationElement",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.InternalTraceInformationElement", HFILL }},
     { &hf_x411_TraceInformation_PDU,
       { "TraceInformation", "x411.TraceInformation",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.TraceInformation", HFILL }},
+    { &hf_x411_TraceInformationElement_PDU,
+      { "TraceInformationElement", "x411.TraceInformationElement",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.TraceInformationElement", HFILL }},
+    { &hf_x411_MessageSubmissionTime_PDU,
+      { "MessageSubmissionTime", "x411.MessageSubmissionTime",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.MessageSubmissionTime", HFILL }},
     { &hf_x411_ReportDeliveryArgument_PDU,
       { "ReportDeliveryArgument", "x411.ReportDeliveryArgument",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -7751,14 +7146,74 @@ void proto_register_x411(void) {
       { "ProofOfDelivery", "x411.ProofOfDelivery",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ProofOfDelivery", HFILL }},
+    { &hf_x411_MessageSubmissionEnvelope_PDU,
+      { "MessageSubmissionEnvelope", "x411.MessageSubmissionEnvelope",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.MessageSubmissionEnvelope", HFILL }},
+    { &hf_x411_PerRecipientMessageSubmissionFields_PDU,
+      { "PerRecipientMessageSubmissionFields", "x411.PerRecipientMessageSubmissionFields",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PerRecipientMessageSubmissionFields", HFILL }},
+    { &hf_x411_ProbeSubmissionEnvelope_PDU,
+      { "ProbeSubmissionEnvelope", "x411.ProbeSubmissionEnvelope",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.ProbeSubmissionEnvelope", HFILL }},
+    { &hf_x411_PerRecipientProbeSubmissionFields_PDU,
+      { "PerRecipientProbeSubmissionFields", "x411.PerRecipientProbeSubmissionFields",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PerRecipientProbeSubmissionFields", HFILL }},
+    { &hf_x411_MessageDeliveryEnvelope_PDU,
+      { "MessageDeliveryEnvelope", "x411.MessageDeliveryEnvelope",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.MessageDeliveryEnvelope", HFILL }},
+    { &hf_x411_ReportDeliveryEnvelope_PDU,
+      { "ReportDeliveryEnvelope", "x411.ReportDeliveryEnvelope",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.ReportDeliveryEnvelope", HFILL }},
+    { &hf_x411_PerRecipientReportDeliveryFields_PDU,
+      { "PerRecipientReportDeliveryFields", "x411.PerRecipientReportDeliveryFields",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PerRecipientReportDeliveryFields", HFILL }},
     { &hf_x411_ExtendedContentType_PDU,
       { "ExtendedContentType", "x411.ExtendedContentType",
         FT_OID, BASE_NONE, NULL, 0,
         "x411.ExtendedContentType", HFILL }},
+    { &hf_x411_ContentIdentifier_PDU,
+      { "ContentIdentifier", "x411.ContentIdentifier",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.ContentIdentifier", HFILL }},
+    { &hf_x411_PerMessageIndicators_PDU,
+      { "PerMessageIndicators", "x411.PerMessageIndicators",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "x411.PerMessageIndicators", HFILL }},
+    { &hf_x411_OriginatorReportRequest_PDU,
+      { "OriginatorReportRequest", "x411.OriginatorReportRequest",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "x411.OriginatorReportRequest", HFILL }},
+    { &hf_x411_DeferredDeliveryTime_PDU,
+      { "DeferredDeliveryTime", "x411.DeferredDeliveryTime",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.DeferredDeliveryTime", HFILL }},
+    { &hf_x411_Priority_PDU,
+      { "Priority", "x411.Priority",
+        FT_UINT32, BASE_DEC, VALS(x411_Priority_U_vals), 0,
+        "x411.Priority", HFILL }},
     { &hf_x411_ContentLength_PDU,
       { "ContentLength", "x411.ContentLength",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.ContentLength", HFILL }},
+    { &hf_x411_MessageDeliveryTime_PDU,
+      { "MessageDeliveryTime", "x411.MessageDeliveryTime",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.MessageDeliveryTime", HFILL }},
+    { &hf_x411_DeliveryFlags_PDU,
+      { "DeliveryFlags", "x411.DeliveryFlags",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "x411.DeliveryFlags", HFILL }},
+    { &hf_x411_SubjectSubmissionIdentifier_PDU,
+      { "SubjectSubmissionIdentifier", "x411.SubjectSubmissionIdentifier",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.SubjectSubmissionIdentifier", HFILL }},
     { &hf_x411_RecipientReassignmentProhibited_PDU,
       { "RecipientReassignmentProhibited", "x411.RecipientReassignmentProhibited",
         FT_UINT32, BASE_DEC, VALS(x411_RecipientReassignmentProhibited_vals), 0,
@@ -7859,10 +7314,18 @@ void proto_register_x411(void) {
       { "RedirectionHistory", "x411.RedirectionHistory",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.RedirectionHistory", HFILL }},
+    { &hf_x411_Redirection_PDU,
+      { "Redirection", "x411.Redirection",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.Redirection", HFILL }},
     { &hf_x411_DLExpansionHistory_PDU,
       { "DLExpansionHistory", "x411.DLExpansionHistory",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.DLExpansionHistory", HFILL }},
+    { &hf_x411_DLExpansion_PDU,
+      { "DLExpansion", "x411.DLExpansion",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.DLExpansion", HFILL }},
     { &hf_x411_PhysicalForwardingAddress_PDU,
       { "PhysicalForwardingAddress", "x411.PhysicalForwardingAddress",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -7883,6 +7346,10 @@ void proto_register_x411(void) {
       { "ReportOriginAuthenticationCheck", "x411.ReportOriginAuthenticationCheck",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ReportOriginAuthenticationCheck", HFILL }},
+    { &hf_x411_OriginatingMTACertificate_PDU,
+      { "OriginatingMTACertificate", "x411.OriginatingMTACertificate",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.OriginatingMTACertificate", HFILL }},
     { &hf_x411_ProofOfSubmission_PDU,
       { "ProofOfSubmission", "x411.ProofOfSubmission",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -7903,6 +7370,14 @@ void proto_register_x411(void) {
       { "CertificateSelectors", "x411.CertificateSelectors",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.CertificateSelectors", HFILL }},
+    { &hf_x411_Content_PDU,
+      { "Content", "x411.Content",
+        FT_BYTES, BASE_HEX, NULL, 0,
+        "x411.Content", HFILL }},
+    { &hf_x411_MTSIdentifier_PDU,
+      { "MTSIdentifier", "x411.MTSIdentifier",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.MTSIdentifier", HFILL }},
     { &hf_x411_ORName_PDU,
       { "ORName", "x411.ORName",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -7963,6 +7438,114 @@ void proto_register_x411(void) {
       { "PhysicalDeliveryOfficeName", "x411.PhysicalDeliveryOfficeName",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PhysicalDeliveryOfficeName", HFILL }},
+    { &hf_x411_UniversalPhysicalDeliveryOfficeName_PDU,
+      { "UniversalPhysicalDeliveryOfficeName", "x411.UniversalPhysicalDeliveryOfficeName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPhysicalDeliveryOfficeName", HFILL }},
+    { &hf_x411_PhysicalDeliveryOfficeNumber_PDU,
+      { "PhysicalDeliveryOfficeNumber", "x411.PhysicalDeliveryOfficeNumber",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PhysicalDeliveryOfficeNumber", HFILL }},
+    { &hf_x411_UniversalPhysicalDeliveryOfficeNumber_PDU,
+      { "UniversalPhysicalDeliveryOfficeNumber", "x411.UniversalPhysicalDeliveryOfficeNumber",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPhysicalDeliveryOfficeNumber", HFILL }},
+    { &hf_x411_ExtensionORAddressComponents_PDU,
+      { "ExtensionORAddressComponents", "x411.ExtensionORAddressComponents",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.ExtensionORAddressComponents", HFILL }},
+    { &hf_x411_UniversalExtensionORAddressComponents_PDU,
+      { "UniversalExtensionORAddressComponents", "x411.UniversalExtensionORAddressComponents",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalExtensionORAddressComponents", HFILL }},
+    { &hf_x411_PhysicalDeliveryPersonalName_PDU,
+      { "PhysicalDeliveryPersonalName", "x411.PhysicalDeliveryPersonalName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PhysicalDeliveryPersonalName", HFILL }},
+    { &hf_x411_UniversalPhysicalDeliveryPersonalName_PDU,
+      { "UniversalPhysicalDeliveryPersonalName", "x411.UniversalPhysicalDeliveryPersonalName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPhysicalDeliveryPersonalName", HFILL }},
+    { &hf_x411_PhysicalDeliveryOrganizationName_PDU,
+      { "PhysicalDeliveryOrganizationName", "x411.PhysicalDeliveryOrganizationName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PhysicalDeliveryOrganizationName", HFILL }},
+    { &hf_x411_UniversalPhysicalDeliveryOrganizationName_PDU,
+      { "UniversalPhysicalDeliveryOrganizationName", "x411.UniversalPhysicalDeliveryOrganizationName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPhysicalDeliveryOrganizationName", HFILL }},
+    { &hf_x411_ExtensionPhysicalDeliveryAddressComponents_PDU,
+      { "ExtensionPhysicalDeliveryAddressComponents", "x411.ExtensionPhysicalDeliveryAddressComponents",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.ExtensionPhysicalDeliveryAddressComponents", HFILL }},
+    { &hf_x411_UniversalExtensionPhysicalDeliveryAddressComponents_PDU,
+      { "UniversalExtensionPhysicalDeliveryAddressComponents", "x411.UniversalExtensionPhysicalDeliveryAddressComponents",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalExtensionPhysicalDeliveryAddressComponents", HFILL }},
+    { &hf_x411_UnformattedPostalAddress_PDU,
+      { "UnformattedPostalAddress", "x411.UnformattedPostalAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UnformattedPostalAddress", HFILL }},
+    { &hf_x411_UniversalUnformattedPostalAddress_PDU,
+      { "UniversalUnformattedPostalAddress", "x411.UniversalUnformattedPostalAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalUnformattedPostalAddress", HFILL }},
+    { &hf_x411_StreetAddress_PDU,
+      { "StreetAddress", "x411.StreetAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.StreetAddress", HFILL }},
+    { &hf_x411_UniversalStreetAddress_PDU,
+      { "UniversalStreetAddress", "x411.UniversalStreetAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalStreetAddress", HFILL }},
+    { &hf_x411_PostOfficeBoxAddress_PDU,
+      { "PostOfficeBoxAddress", "x411.PostOfficeBoxAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PostOfficeBoxAddress", HFILL }},
+    { &hf_x411_UniversalPostOfficeBoxAddress_PDU,
+      { "UniversalPostOfficeBoxAddress", "x411.UniversalPostOfficeBoxAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPostOfficeBoxAddress", HFILL }},
+    { &hf_x411_PosteRestanteAddress_PDU,
+      { "PosteRestanteAddress", "x411.PosteRestanteAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.PosteRestanteAddress", HFILL }},
+    { &hf_x411_UniversalPosteRestanteAddress_PDU,
+      { "UniversalPosteRestanteAddress", "x411.UniversalPosteRestanteAddress",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalPosteRestanteAddress", HFILL }},
+    { &hf_x411_UniquePostalName_PDU,
+      { "UniquePostalName", "x411.UniquePostalName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniquePostalName", HFILL }},
+    { &hf_x411_UniversalUniquePostalName_PDU,
+      { "UniversalUniquePostalName", "x411.UniversalUniquePostalName",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalUniquePostalName", HFILL }},
+    { &hf_x411_LocalPostalAttributes_PDU,
+      { "LocalPostalAttributes", "x411.LocalPostalAttributes",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.LocalPostalAttributes", HFILL }},
+    { &hf_x411_UniversalLocalPostalAttributes_PDU,
+      { "UniversalLocalPostalAttributes", "x411.UniversalLocalPostalAttributes",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.UniversalLocalPostalAttributes", HFILL }},
+    { &hf_x411_ExtendedNetworkAddress_PDU,
+      { "ExtendedNetworkAddress", "x411.ExtendedNetworkAddress",
+        FT_UINT32, BASE_DEC, VALS(x411_ExtendedNetworkAddress_vals), 0,
+        "x411.ExtendedNetworkAddress", HFILL }},
+    { &hf_x411_TerminalType_PDU,
+      { "TerminalType", "x411.TerminalType",
+        FT_INT32, BASE_DEC, VALS(x411_TerminalType_vals), 0,
+        "x411.TerminalType", HFILL }},
+    { &hf_x411_TeletexDomainDefinedAttributes_PDU,
+      { "TeletexDomainDefinedAttributes", "x411.TeletexDomainDefinedAttributes",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "x411.TeletexDomainDefinedAttributes", HFILL }},
+    { &hf_x411_UniversalDomainDefinedAttributes_PDU,
+      { "UniversalDomainDefinedAttributes", "x411.UniversalDomainDefinedAttributes",
+        FT_UINT32, BASE_DEC, NULL, 0,
+        "x411.UniversalDomainDefinedAttributes", HFILL }},
     { &hf_x411_ExtendedEncodedInformationType_PDU,
       { "ExtendedEncodedInformationType", "x411.ExtendedEncodedInformationType",
         FT_OID, BASE_NONE, NULL, 0,
@@ -7991,6 +7574,10 @@ void proto_register_x411(void) {
       { "BindTokenEncryptedData", "x411.BindTokenEncryptedData",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.BindTokenEncryptedData", HFILL }},
+    { &hf_x411_SecurityClassification_PDU,
+      { "SecurityClassification", "x411.SecurityClassification",
+        FT_UINT32, BASE_DEC, VALS(x411_SecurityClassification_vals), 0,
+        "x411.SecurityClassification", HFILL }},
     { &hf_x411_unauthenticated,
       { "unauthenticated", "x411.unauthenticated",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8073,7 +7660,7 @@ void proto_register_x411(void) {
         "x411.ContentIdentifier", HFILL }},
     { &hf_x411_priority,
       { "priority", "x411.priority",
-        FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(x411_Priority_U_vals), 0,
         "x411.Priority", HFILL }},
     { &hf_x411_per_message_indicators,
       { "per-message-indicators", "x411.per_message_indicators",
@@ -8088,7 +7675,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerDomainBilateralInformation", HFILL }},
     { &hf_x411_per_domain_bilateral_information_item,
-      { "Item", "x411.per_domain_bilateral_information_item",
+      { "per-domain-bilateral-information", "x411.per_domain_bilateral_information_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerDomainBilateralInformation", HFILL }},
     { &hf_x411_trace_information,
@@ -8100,7 +7687,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SET_OF_ExtensionField", HFILL }},
     { &hf_x411_extensions_item,
-      { "Item", "x411.extensions_item",
+      { "extensions", "x411.extensions_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ExtensionField", HFILL }},
     { &hf_x411_per_recipient_message_fields,
@@ -8108,7 +7695,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientMessageTransferFields", HFILL }},
     { &hf_x411_per_recipient_message_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientMessageTransferFields", HFILL }},
     { &hf_x411_recipient_name,
@@ -8140,7 +7727,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientProbeTransferFields", HFILL }},
     { &hf_x411_per_recipient_probe_transfer_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientProbeTransferFields", HFILL }},
     { &hf_x411_report_identifier,
@@ -8172,7 +7759,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientReportTransferFields", HFILL }},
     { &hf_x411_per_recipient_report_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientReportTransferFields", HFILL }},
     { &hf_x411_mta_actual_recipient_name,
@@ -8193,7 +7780,7 @@ void proto_register_x411(void) {
         "x411.SupplementaryInformation", HFILL }},
     { &hf_x411_country_name,
       { "country-name", "x411.country_name",
-        FT_UINT32, BASE_DEC, VALS(x411_CountryName_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(x411_CountryName_U_vals), 0,
         "x411.CountryName", HFILL }},
     { &hf_x411_bilateral_domain,
       { "domain", "x411.domain",
@@ -8201,7 +7788,7 @@ void proto_register_x411(void) {
         "x411.T_bilateral_domain", HFILL }},
     { &hf_x411_administration_domain_name,
       { "administration-domain-name", "x411.administration_domain_name",
-        FT_UINT32, BASE_DEC, VALS(x411_AdministrationDomainName_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(x411_AdministrationDomainName_U_vals), 0,
         "x411.AdministrationDomainName", HFILL }},
     { &hf_x411_private_domain,
       { "private-domain", "x411.private_domain",
@@ -8228,7 +7815,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, VALS(x411_ReportType_vals), 0,
         "x411.ReportType", HFILL }},
     { &hf_x411_InternalTraceInformation_item,
-      { "Item", "x411.InternalTraceInformation_item",
+      { "InternalTraceInformation", "x411.InternalTraceInformation_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.InternalTraceInformationElement", HFILL }},
     { &hf_x411_global_domain_identifier,
@@ -8267,8 +7854,8 @@ void proto_register_x411(void) {
       { "other-actions", "x411.other_actions",
         FT_BYTES, BASE_HEX, NULL, 0,
         "x411.OtherActions", HFILL }},
-    { &hf_x411_TraceInformation_item,
-      { "Item", "x411.TraceInformation_item",
+    { &hf_x411__untag_item,
+      { "_untag", "x411._untag_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.TraceInformationElement", HFILL }},
     { &hf_x411_domain_supplied_information,
@@ -8279,18 +7866,6 @@ void proto_register_x411(void) {
       { "attempted-domain", "x411.attempted_domain",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.GlobalDomainIdentifier", HFILL }},
-    { &hf_x411_initiator_name,
-      { "initiator-name", "x411.initiator_name",
-        FT_UINT32, BASE_DEC, VALS(x411_ObjectName_vals), 0,
-        "x411.ObjectName", HFILL }},
-    { &hf_x411_messages_waiting,
-      { "messages-waiting", "x411.messages_waiting",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.MessagesWaiting", HFILL }},
-    { &hf_x411_responder_name,
-      { "responder-name", "x411.responder_name",
-        FT_UINT32, BASE_DEC, VALS(x411_ObjectName_vals), 0,
-        "x411.ObjectName", HFILL }},
     { &hf_x411_user_agent,
       { "user-agent", "x411.user_agent",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8384,31 +7959,15 @@ void proto_register_x411(void) {
         FT_BYTES, BASE_HEX, NULL, 0,
         "x411.BIT_STRING", HFILL }},
     { &hf_x411_SecurityContext_item,
-      { "Item", "x411.SecurityContext_item",
+      { "SecurityContext", "x411.SecurityContext_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.SecurityLabel", HFILL }},
     { &hf_x411_message_submission_envelope,
       { "envelope", "x411.envelope",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.MessageSubmissionEnvelope", HFILL }},
-    { &hf_x411_message_submission_identifier,
-      { "message-submission-identifier", "x411.message_submission_identifier",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.MessageSubmissionIdentifier", HFILL }},
-    { &hf_x411_message_submission_time,
-      { "message-submission-time", "x411.message_submission_time",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "x411.MessageSubmissionTime", HFILL }},
-    { &hf_x411_probe_submission_identifier,
-      { "probe-submission-identifier", "x411.probe_submission_identifier",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.ProbeSubmissionIdentifier", HFILL }},
-    { &hf_x411_probe_submission_time,
-      { "probe-submission-time", "x411.probe_submission_time",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "x411.ProbeSubmissionTime", HFILL }},
     { &hf_x411_ImproperlySpecifiedRecipients_item,
-      { "Item", "x411.ImproperlySpecifiedRecipients_item",
+      { "ImproperlySpecifiedRecipients", "x411.ImproperlySpecifiedRecipients_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.MTSRecipientName", HFILL }},
     { &hf_x411_waiting_operations,
@@ -8424,33 +7983,13 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SET_OF_ContentType", HFILL }},
     { &hf_x411_waiting_content_types_item,
-      { "Item", "x411.waiting_content_types_item",
+      { "waiting-content-types", "x411.waiting_content_types_item",
         FT_UINT32, BASE_DEC, VALS(x411_ContentType_vals), 0,
         "x411.ContentType", HFILL }},
     { &hf_x411_waiting_encoded_information_types,
       { "waiting-encoded-information-types", "x411.waiting_encoded_information_types",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.EncodedInformationTypes", HFILL }},
-    { &hf_x411_message_delivery_identifier,
-      { "message-delivery-identifier", "x411.message_delivery_identifier",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.MessageDeliveryIdentifier", HFILL }},
-    { &hf_x411_message_delivery_time,
-      { "message-delivery-time", "x411.message_delivery_time",
-        FT_STRING, BASE_NONE, NULL, 0,
-        "x411.MessageDeliveryTime", HFILL }},
-    { &hf_x411_other_fields,
-      { "other-fields", "x411.other_fields",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.OtherMessageDeliveryFields", HFILL }},
-    { &hf_x411_recipient_certificate,
-      { "recipient-certificate", "x411.recipient_certificate",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.RecipientCertificate", HFILL }},
-    { &hf_x411_proof_of_delivery,
-      { "proof-of-delivery", "x411.proof_of_delivery",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.ProofOfDelivery", HFILL }},
     { &hf_x411_subject_submission_identifier,
       { "subject-submission-identifier", "x411.subject_submission_identifier",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8460,13 +7999,25 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientReportDeliveryFields", HFILL }},
     { &hf_x411_per_recipient_report_delivery_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientReportDeliveryFields", HFILL }},
-    { &hf_x411_empty_result,
-      { "empty-result", "x411.empty_result",
+    { &hf_x411_refused_argument,
+      { "refused-argument", "x411.refused_argument",
+        FT_UINT32, BASE_DEC, VALS(x411_T_refused_argument_vals), 0,
+        "x411.T_refused_argument", HFILL }},
+    { &hf_x411_built_in_argument,
+      { "built-in-argument", "x411.built_in_argument",
+        FT_UINT32, BASE_DEC, VALS(x411_RefusedArgument_vals), 0,
+        "x411.RefusedArgument", HFILL }},
+    { &hf_x411_refused_extension,
+      { "refused-extension", "x411.refused_extension",
         FT_NONE, BASE_NONE, NULL, 0,
-        "x411.NULL", HFILL }},
+        "x411.T_refused_extension", HFILL }},
+    { &hf_x411_refusal_reason,
+      { "refusal-reason", "x411.refusal_reason",
+        FT_UINT32, BASE_DEC, VALS(x411_RefusalReason_vals), 0,
+        "x411.RefusalReason", HFILL }},
     { &hf_x411_restrict,
       { "restrict", "x411.restrict",
         FT_BOOLEAN, 8, NULL, 0,
@@ -8481,7 +8032,7 @@ void proto_register_x411(void) {
         "x411.ContentLength", HFILL }},
     { &hf_x411_permissible_lowest_priority,
       { "permissible-lowest-priority", "x411.permissible_lowest_priority",
-        FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(x411_Priority_U_vals), 0,
         "x411.Priority", HFILL }},
     { &hf_x411_permissible_content_types,
       { "permissible-content-types", "x411.permissible_content_types",
@@ -8495,22 +8046,6 @@ void proto_register_x411(void) {
       { "permissible-security-context", "x411.permissible_security_context",
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SecurityContext", HFILL }},
-    { &hf_x411_refused_argument,
-      { "refused-argument", "x411.refused_argument",
-        FT_UINT32, BASE_DEC, VALS(x411_T_refused_argument_vals), 0,
-        "x411.T_refused_argument", HFILL }},
-    { &hf_x411_built_in_argument,
-      { "built-in-argument", "x411.built_in_argument",
-        FT_UINT32, BASE_DEC, VALS(x411_RefusedArgument_vals), 0,
-        "x411.RefusedArgument", HFILL }},
-    { &hf_x411_refused_extension,
-      { "refused-extension", "x411.refused_extension",
-        FT_NONE, BASE_NONE, NULL, 0,
-        "x411.T_refused_extension", HFILL }},
-    { &hf_x411_refusal_reason,
-      { "refusal-reason", "x411.refusal_reason",
-        FT_UINT32, BASE_DEC, VALS(x411_RefusalReason_vals), 0,
-        "x411.RefusalReason", HFILL }},
     { &hf_x411_user_name,
       { "user-name", "x411.user_name",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8524,7 +8059,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SET_OF_DeliverableClass", HFILL }},
     { &hf_x411_deliverable_class_item,
-      { "Item", "x411.deliverable_class_item",
+      { "deliverable-class", "x411.deliverable_class_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.DeliverableClass", HFILL }},
     { &hf_x411_default_delivery_controls,
@@ -8543,6 +8078,10 @@ void proto_register_x411(void) {
       { "retrieve-registrations", "x411.retrieve_registrations",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.RegistrationTypes", HFILL }},
+    { &hf_x411_empty_result,
+      { "empty-result", "x411.empty_result",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.NULL", HFILL }},
     { &hf_x411_non_empty_result,
       { "non-empty-result", "x411.non_empty_result",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8551,14 +8090,6 @@ void proto_register_x411(void) {
       { "registered-information", "x411.registered_information",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.RegisterArgument", HFILL }},
-    { &hf_x411_old_credentials,
-      { "old-credentials", "x411.old_credentials",
-        FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0,
-        "x411.Credentials", HFILL }},
-    { &hf_x411_new_credentials,
-      { "new-credentials", "x411.new_credentials",
-        FT_UINT32, BASE_DEC, VALS(x411_Credentials_vals), 0,
-        "x411.Credentials", HFILL }},
     { &hf_x411_x121,
       { "x121", "x411.x121",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8566,7 +8097,7 @@ void proto_register_x411(void) {
     { &hf_x411_x121_address,
       { "x121-address", "x411.x121_address",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.NumericString", HFILL }},
+        "x411.AddrNumericString", HFILL }},
     { &hf_x411_tsap_id,
       { "tsap-id", "x411.tsap_id",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -8576,7 +8107,7 @@ void proto_register_x411(void) {
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PSAPAddress", HFILL }},
     { &hf_x411_Redirections_item,
-      { "Item", "x411.Redirections_item",
+      { "Redirections", "x411.Redirections_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.RecipientRedirection", HFILL }},
     { &hf_x411_redirection_classes,
@@ -8584,7 +8115,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SET_OF_RedirectionClass", HFILL }},
     { &hf_x411_redirection_classes_item,
-      { "Item", "x411.redirection_classes_item",
+      { "redirection-classes", "x411.redirection_classes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.RedirectionClass", HFILL }},
     { &hf_x411_recipient_assigned_alternate_recipient,
@@ -8612,8 +8143,8 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SET_OF_Priority", HFILL }},
     { &hf_x411_class_priority_item,
-      { "Item", "x411.priority_item",
-        FT_UINT32, BASE_DEC, VALS(x411_Priority_vals), 0,
+      { "priority", "x411.priority_item",
+        FT_UINT32, BASE_DEC, VALS(x411_Priority_U_vals), 0,
         "x411.Priority", HFILL }},
     { &hf_x411_objects,
       { "objects", "x411.objects",
@@ -8624,7 +8155,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_Restriction", HFILL }},
     { &hf_x411_applies_only_to_item,
-      { "Item", "x411.applies_only_to_item",
+      { "applies-only-to", "x411.applies_only_to_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.Restriction", HFILL }},
     { &hf_x411_unacceptable_eits,
@@ -8640,7 +8171,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.ExtendedEncodedInformationTypes", HFILL }},
     { &hf_x411_RestrictedDelivery_item,
-      { "Item", "x411.RestrictedDelivery_item",
+      { "RestrictedDelivery", "x411.RestrictedDelivery_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.Restriction", HFILL }},
     { &hf_x411_permitted,
@@ -8672,7 +8203,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.T_type_extensions", HFILL }},
     { &hf_x411_type_extensions_item,
-      { "Item", "x411.extensions_item",
+      { "extensions", "x411.extensions_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.T_type_extensions_item", HFILL }},
     { &hf_x411_mts_originator_name,
@@ -8684,7 +8215,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientMessageSubmissionFields", HFILL }},
     { &hf_x411_per_recipient_message_submission_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientMessageSubmissionFields", HFILL }},
     { &hf_x411_submission_recipient_name,
@@ -8700,13 +8231,25 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SEQUENCE_OF_PerRecipientProbeSubmissionFields", HFILL }},
     { &hf_x411_per_recipient_probe_submission_fields_item,
-      { "Item", "x411.per_recipient_fields_item",
+      { "per-recipient-fields", "x411.per_recipient_fields_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientProbeSubmissionFields", HFILL }},
     { &hf_x411_probe_recipient_name,
       { "recipient-name", "x411.recipient_name",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.MTSRecipientName", HFILL }},
+    { &hf_x411_message_delivery_identifier,
+      { "message-delivery-identifier", "x411.message_delivery_identifier",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.MessageDeliveryIdentifier", HFILL }},
+    { &hf_x411_message_delivery_time,
+      { "message-delivery-time", "x411.message_delivery_time",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.MessageDeliveryTime", HFILL }},
+    { &hf_x411_other_fields,
+      { "other-fields", "x411.other_fields",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.OtherMessageDeliveryFields", HFILL }},
     { &hf_x411_delivered_content_type,
       { "content-type", "x411.content_type",
         FT_UINT32, BASE_DEC, VALS(x411_DeliveredContentType_vals), 0,
@@ -8731,6 +8274,10 @@ void proto_register_x411(void) {
       { "originally-intended-recipient-name", "x411.originally_intended_recipient_name",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.MTSOriginallyIntendedRecipientName", HFILL }},
+    { &hf_x411_message_submission_time,
+      { "message-submission-time", "x411.message_submission_time",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.MessageSubmissionTime", HFILL }},
     { &hf_x411_actual_recipient_name,
       { "actual-recipient-name", "x411.actual_recipient_name",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8760,29 +8307,29 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, VALS(x411_NonDeliveryDiagnosticCode_vals), 0,
         "x411.NonDeliveryDiagnosticCode", HFILL }},
     { &hf_x411_ContentTypes_item,
-      { "Item", "x411.ContentTypes_item",
+      { "ContentTypes", "x411.ContentTypes_item",
         FT_UINT32, BASE_DEC, VALS(x411_ContentType_vals), 0,
         "x411.ContentType", HFILL }},
     { &hf_x411_built_in,
       { "built-in", "x411.built_in",
-        FT_INT32, BASE_DEC, VALS(x411_BuiltInContentType_vals), 0,
+        FT_INT32, BASE_DEC, VALS(x411_BuiltInContentType_U_vals), 0,
         "x411.BuiltInContentType", HFILL }},
     { &hf_x411_extended,
       { "extended", "x411.extended",
         FT_OID, BASE_NONE, NULL, 0,
         "x411.ExtendedContentType", HFILL }},
     { &hf_x411_OtherRecipientNames_item,
-      { "Item", "x411.OtherRecipientNames_item",
+      { "OtherRecipientNames", "x411.OtherRecipientNames_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.OtherRecipientName", HFILL }},
     { &hf_x411_standard_extension,
       { "standard-extension", "x411.standard_extension",
-        FT_INT32, BASE_DEC, NULL, 0,
-        "x411.INTEGER", HFILL }},
+        FT_INT32, BASE_DEC, VALS(x411_StandardExtension_vals), 0,
+        "x411.StandardExtension", HFILL }},
     { &hf_x411_private_extension,
       { "private-extension", "x411.private_extension",
         FT_OID, BASE_NONE, NULL, 0,
-        "x411.OBJECT_IDENTIFIER", HFILL }},
+        "x411.T_private_extension", HFILL }},
     { &hf_x411_extension_type,
       { "type", "x411.type",
         FT_UINT32, BASE_DEC, VALS(x411_ExtensionType_vals), 0,
@@ -8796,7 +8343,7 @@ void proto_register_x411(void) {
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ExtensionValue", HFILL }},
     { &hf_x411_RequestedDeliveryMethod_item,
-      { "Item", "x411.RequestedDeliveryMethod_item",
+      { "RequestedDeliveryMethod", "x411.RequestedDeliveryMethod_item",
         FT_UINT32, BASE_DEC, VALS(x411_RequestedDeliveryMethod_item_vals), 0,
         "x411.RequestedDeliveryMethod_item", HFILL }},
     { &hf_x411_ia5text,
@@ -8808,7 +8355,7 @@ void proto_register_x411(void) {
         FT_BYTES, BASE_HEX, NULL, 0,
         "x411.OCTET_STRING", HFILL }},
     { &hf_x411_RedirectionHistory_item,
-      { "Item", "x411.RedirectionHistory_item",
+      { "RedirectionHistory", "x411.RedirectionHistory_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.Redirection", HFILL }},
     { &hf_x411_intended_recipient_name,
@@ -8828,7 +8375,7 @@ void proto_register_x411(void) {
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.Time", HFILL }},
     { &hf_x411_DLExpansionHistory_item,
-      { "Item", "x411.DLExpansionHistory_item",
+      { "DLExpansionHistory", "x411.DLExpansionHistory_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.DLExpansion", HFILL }},
     { &hf_x411_dl,
@@ -8840,7 +8387,7 @@ void proto_register_x411(void) {
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.Time", HFILL }},
     { &hf_x411_OriginatorAndDLExpansionHistory_item,
-      { "Item", "x411.OriginatorAndDLExpansionHistory_item",
+      { "OriginatorAndDLExpansionHistory", "x411.OriginatorAndDLExpansionHistory_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.OriginatorAndDLExpansion", HFILL }},
     { &hf_x411_originator_or_dl_name,
@@ -8863,12 +8410,16 @@ void proto_register_x411(void) {
       { "non-delivery", "x411.non_delivery",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.PerRecipientNonDeliveryReportFields", HFILL }},
+    { &hf_x411_recipient_certificate,
+      { "recipient-certificate", "x411.recipient_certificate",
+        FT_NONE, BASE_NONE, NULL, 0,
+        "x411.RecipientCertificate", HFILL }},
     { &hf_x411_mta_directory_name,
       { "mta-directory-name", "x411.mta_directory_name",
         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
         "x509if.Name", HFILL }},
     { &hf_x411_ExtendedCertificates_item,
-      { "Item", "x411.ExtendedCertificates_item",
+      { "ExtendedCertificates", "x411.ExtendedCertificates_item",
         FT_UINT32, BASE_DEC, VALS(x411_ExtendedCertificate_vals), 0,
         "x411.ExtendedCertificate", HFILL }},
     { &hf_x411_directory_entry,
@@ -8876,7 +8427,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
         "x509if.Name", HFILL }},
     { &hf_x411_DLExemptedRecipients_item,
-      { "Item", "x411.DLExemptedRecipients_item",
+      { "DLExemptedRecipients", "x411.DLExemptedRecipients_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ORAddressAndOrDirectoryName", HFILL }},
     { &hf_x411_encryption_recipient,
@@ -8903,14 +8454,14 @@ void proto_register_x411(void) {
       { "local-identifier", "x411.local_identifier",
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.LocalIdentifier", HFILL }},
-    { &hf_x411_numeric,
+    { &hf_x411_numeric_private_domain_identifier,
       { "numeric", "x411.numeric",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.NumericString", HFILL }},
-    { &hf_x411_printable,
+        "x411.AddrNumericString", HFILL }},
+    { &hf_x411_printable_private_domain_identifier,
       { "printable", "x411.printable",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.AddrPrintableString", HFILL }},
     { &hf_x411_built_in_standard_attributes,
       { "built-in-standard-attributes", "x411.built_in_standard_attributes",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -8958,51 +8509,67 @@ void proto_register_x411(void) {
     { &hf_x411_x121_dcc_code,
       { "x121-dcc-code", "x411.x121_dcc_code",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.NumericString", HFILL }},
+        "x411.AddrNumericString", HFILL }},
     { &hf_x411_iso_3166_alpha2_code,
       { "iso-3166-alpha2-code", "x411.iso_3166_alpha2_code",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.AddrPrintableString", HFILL }},
+    { &hf_x411_numeric,
+      { "numeric", "x411.numeric",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.AddrNumericString", HFILL }},
+    { &hf_x411_printable,
+      { "printable", "x411.printable",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.AddrPrintableString", HFILL }},
+    { &hf_x411_numeric_private_domain_name,
+      { "numeric", "x411.numeric",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.AddrNumericString", HFILL }},
+    { &hf_x411_printable_private_domain_name,
+      { "printable", "x411.printable",
+        FT_STRING, BASE_NONE, NULL, 0,
+        "x411.AddrPrintableString", HFILL }},
     { &hf_x411_printable_surname,
       { "surname", "x411.surname",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_surname", HFILL }},
     { &hf_x411_printable_given_name,
       { "given-name", "x411.given_name",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_given_name", HFILL }},
     { &hf_x411_printable_initials,
       { "initials", "x411.initials",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_initials", HFILL }},
     { &hf_x411_printable_generation_qualifier,
       { "generation-qualifier", "x411.generation_qualifier",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_generation_qualifier", HFILL }},
     { &hf_x411_OrganizationalUnitNames_item,
-      { "Item", "x411.OrganizationalUnitNames_item",
+      { "OrganizationalUnitNames", "x411.OrganizationalUnitNames_item",
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.OrganizationalUnitName", HFILL }},
     { &hf_x411_BuiltInDomainDefinedAttributes_item,
-      { "Item", "x411.BuiltInDomainDefinedAttributes_item",
+      { "BuiltInDomainDefinedAttributes", "x411.BuiltInDomainDefinedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.BuiltInDomainDefinedAttribute", HFILL }},
     { &hf_x411_printable_type,
       { "type", "x411.type",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_type", HFILL }},
     { &hf_x411_printable_value,
       { "value", "x411.value",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.PrintableString", HFILL }},
+        "x411.T_printable_value", HFILL }},
     { &hf_x411_ExtensionAttributes_item,
-      { "Item", "x411.ExtensionAttributes_item",
+      { "ExtensionAttributes", "x411.ExtensionAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.ExtensionAttribute", HFILL }},
     { &hf_x411_extension_attribute_type,
       { "extension-attribute-type", "x411.extension_attribute_type",
-        FT_INT32, BASE_DEC, NULL, 0,
-        "x411.INTEGER", HFILL }},
+        FT_INT32, BASE_DEC, VALS(x411_ExtensionAttributeType_vals), 0,
+        "x411.ExtensionAttributeType", HFILL }},
     { &hf_x411_extension_attribute_value,
       { "extension-attribute-value", "x411.extension_attribute_value",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -9010,19 +8577,19 @@ void proto_register_x411(void) {
     { &hf_x411_teletex_surname,
       { "surname", "x411.surname",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_teletex_given_name,
       { "given-name", "x411.given_name",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_teletex_initials,
       { "initials", "x411.initials",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_teletex_generation_qualifier,
       { "generation-qualifier", "x411.generation_qualifier",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_universal_surname,
       { "surname", "x411.surname",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -9040,11 +8607,11 @@ void proto_register_x411(void) {
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.UniversalOrBMPString", HFILL }},
     { &hf_x411_TeletexOrganizationalUnitNames_item,
-      { "Item", "x411.TeletexOrganizationalUnitNames_item",
+      { "TeletexOrganizationalUnitNames", "x411.TeletexOrganizationalUnitNames_item",
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.TeletexOrganizationalUnitName", HFILL }},
     { &hf_x411_UniversalOrganizationalUnitNames_item,
-      { "Item", "x411.UniversalOrganizationalUnitNames_item",
+      { "UniversalOrganizationalUnitNames", "x411.UniversalOrganizationalUnitNames_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.UniversalOrganizationalUnitName", HFILL }},
     { &hf_x411_character_encoding,
@@ -9066,7 +8633,7 @@ void proto_register_x411(void) {
     { &hf_x411_numeric_code,
       { "numeric-code", "x411.numeric_code",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.NumericString", HFILL }},
+        "x411.AddrNumericString", HFILL }},
     { &hf_x411_printable_code,
       { "printable-code", "x411.printable_code",
         FT_STRING, BASE_NONE, NULL, 0,
@@ -9076,7 +8643,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.T_printable_address", HFILL }},
     { &hf_x411_printable_address_item,
-      { "Item", "x411.printable_address_item",
+      { "printable-address", "x411.printable_address_item",
         FT_STRING, BASE_NONE, NULL, 0,
         "x411.PrintableString", HFILL }},
     { &hf_x411_teletex_string,
@@ -9104,19 +8671,19 @@ void proto_register_x411(void) {
         FT_NONE, BASE_NONE, NULL, 0,
         "x509sat.PresentationAddress", HFILL }},
     { &hf_x411_TeletexDomainDefinedAttributes_item,
-      { "Item", "x411.TeletexDomainDefinedAttributes_item",
+      { "TeletexDomainDefinedAttributes", "x411.TeletexDomainDefinedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.TeletexDomainDefinedAttribute", HFILL }},
     { &hf_x411_type,
       { "type", "x411.type",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_teletex_value,
       { "value", "x411.value",
         FT_STRING, BASE_NONE, NULL, 0,
-        "x411.TeletexString", HFILL }},
+        "x411.AddrTeletexString", HFILL }},
     { &hf_x411_UniversalDomainDefinedAttributes_item,
-      { "Item", "x411.UniversalDomainDefinedAttributes_item",
+      { "UniversalDomainDefinedAttributes", "x411.UniversalDomainDefinedAttributes_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.UniversalDomainDefinedAttribute", HFILL }},
     { &hf_x411_universal_type,
@@ -9144,7 +8711,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.ExtendedEncodedInformationTypes", HFILL }},
     { &hf_x411_ExtendedEncodedInformationTypes_item,
-      { "Item", "x411.ExtendedEncodedInformationTypes_item",
+      { "ExtendedEncodedInformationTypes", "x411.ExtendedEncodedInformationTypes_item",
         FT_OID, BASE_NONE, NULL, 0,
         "x411.ExtendedEncodedInformationType", HFILL }},
     { &hf_x411_graphic_character_sets,
@@ -9217,8 +8784,8 @@ void proto_register_x411(void) {
         "x509af.AlgorithmIdentifier", HFILL }},
     { &hf_x411_token_data_type,
       { "type", "x411.type",
-        FT_INT32, BASE_DEC, NULL, 0,
-        "x411.INTEGER", HFILL }},
+        FT_INT32, BASE_DEC, VALS(x411_TokenDataType_vals), 0,
+        "x411.TokenDataType", HFILL }},
     { &hf_x411_value,
       { "value", "x411.value",
         FT_NONE, BASE_NONE, NULL, 0,
@@ -9268,7 +8835,7 @@ void proto_register_x411(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "x411.SecurityCategories", HFILL }},
     { &hf_x411_SecurityCategories_item,
-      { "Item", "x411.SecurityCategories_item",
+      { "SecurityCategories", "x411.SecurityCategories_item",
         FT_NONE, BASE_NONE, NULL, 0,
         "x411.SecurityCategory", HFILL }},
     { &hf_x411_category_type,
@@ -9375,35 +8942,35 @@ void proto_register_x411(void) {
       { "restricted-delivery", "x411.restricted-delivery",
         FT_BOOLEAN, 8, NULL, 0x04,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_disclosure_of_other_recipients,
+    { &hf_x411_PerMessageIndicators_U_disclosure_of_other_recipients,
       { "disclosure-of-other-recipients", "x411.disclosure-of-other-recipients",
         FT_BOOLEAN, 8, NULL, 0x80,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_implicit_conversion_prohibited,
+    { &hf_x411_PerMessageIndicators_U_implicit_conversion_prohibited,
       { "implicit-conversion-prohibited", "x411.implicit-conversion-prohibited",
         FT_BOOLEAN, 8, NULL, 0x40,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_alternate_recipient_allowed,
+    { &hf_x411_PerMessageIndicators_U_alternate_recipient_allowed,
       { "alternate-recipient-allowed", "x411.alternate-recipient-allowed",
         FT_BOOLEAN, 8, NULL, 0x20,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_content_return_request,
+    { &hf_x411_PerMessageIndicators_U_content_return_request,
       { "content-return-request", "x411.content-return-request",
         FT_BOOLEAN, 8, NULL, 0x10,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_reserved,
+    { &hf_x411_PerMessageIndicators_U_reserved,
       { "reserved", "x411.reserved",
         FT_BOOLEAN, 8, NULL, 0x08,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_bit_5,
+    { &hf_x411_PerMessageIndicators_U_bit_5,
       { "bit-5", "x411.bit-5",
         FT_BOOLEAN, 8, NULL, 0x04,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_bit_6,
+    { &hf_x411_PerMessageIndicators_U_bit_6,
       { "bit-6", "x411.bit-6",
         FT_BOOLEAN, 8, NULL, 0x02,
         "", HFILL }},
-    { &hf_x411_PerMessageIndicators_service_message,
+    { &hf_x411_PerMessageIndicators_U_service_message,
       { "service-message", "x411.service-message",
         FT_BOOLEAN, 8, NULL, 0x01,
         "", HFILL }},
@@ -9597,7 +9164,7 @@ void proto_register_x411(void) {
         "", HFILL }},
 
 /*--- End of included file: packet-x411-hfarr.c ---*/
-#line 217 "packet-x411-template.c"
+#line 240 "packet-x411-template.c"
   };
 
   /* List of subtrees */
@@ -9606,6 +9173,9 @@ void proto_register_x411(void) {
     &ett_x411_content_unknown,
     &ett_x411_bilateral_information,
     &ett_x411_additional_information,
+    &ett_x411_unknown_standard_extension,
+    &ett_x411_unknown_extension_attribute_type,
+    &ett_x411_unknown_tokendata_type,
 
 /*--- Included file: packet-x411-ettarr.c ---*/
 #line 1 "packet-x411-ettarr.c"
@@ -9637,12 +9207,10 @@ void proto_register_x411(void) {
     &ett_x411_InternalTraceInformationElement,
     &ett_x411_MTASuppliedInformation,
     &ett_x411_T_attempted,
-    &ett_x411_TraceInformation,
+    &ett_x411_SEQUENCE_OF_TraceInformationElement,
     &ett_x411_TraceInformationElement,
     &ett_x411_DomainSuppliedInformation,
     &ett_x411_OtherActions,
-    &ett_x411_MTSBindArgument,
-    &ett_x411_MTSBindResult,
     &ett_x411_ObjectName,
     &ett_x411_MessagesWaiting,
     &ett_x411_DeliveryQueue,
@@ -9653,20 +9221,13 @@ void proto_register_x411(void) {
     &ett_x411_Signature,
     &ett_x411_SecurityContext,
     &ett_x411_MessageSubmissionArgument,
-    &ett_x411_MessageSubmissionResult,
-    &ett_x411_ProbeSubmissionResult,
     &ett_x411_ImproperlySpecifiedRecipients,
     &ett_x411_Waiting,
     &ett_x411_SET_OF_ContentType,
     &ett_x411_Operations,
     &ett_x411_WaitingMessages,
-    &ett_x411_MessageDeliveryArgument,
-    &ett_x411_MessageDeliveryResult,
     &ett_x411_ReportDeliveryArgument,
     &ett_x411_SEQUENCE_OF_PerRecipientReportDeliveryFields,
-    &ett_x411_ReportDeliveryResult,
-    &ett_x411_DeliveryControlArgument,
-    &ett_x411_DeliveryControlResult,
     &ett_x411_RefusedOperation,
     &ett_x411_T_refused_argument,
     &ett_x411_Controls,
@@ -9674,7 +9235,6 @@ void proto_register_x411(void) {
     &ett_x411_SET_OF_DeliverableClass,
     &ett_x411_RegisterResult,
     &ett_x411_T_non_empty_result,
-    &ett_x411_ChangeCredentialsArgument,
     &ett_x411_UserAddress,
     &ett_x411_T_x121,
     &ett_x411_Redirections,
@@ -9707,7 +9267,7 @@ void proto_register_x411(void) {
     &ett_x411_ContentTypes,
     &ett_x411_ContentType,
     &ett_x411_DeliveredContentType,
-    &ett_x411_PerMessageIndicators,
+    &ett_x411_PerMessageIndicators_U,
     &ett_x411_OriginatorReportRequest,
     &ett_x411_DeliveryFlags,
     &ett_x411_OtherRecipientNames,
@@ -9733,14 +9293,14 @@ void proto_register_x411(void) {
     &ett_x411_ExtendedCertificate,
     &ett_x411_DLExemptedRecipients,
     &ett_x411_CertificateSelectors,
-    &ett_x411_MTSIdentifier,
-    &ett_x411_GlobalDomainIdentifier,
+    &ett_x411_MTSIdentifier_U,
+    &ett_x411_GlobalDomainIdentifier_U,
     &ett_x411_PrivateDomainIdentifier,
-    &ett_x411_ORName,
+    &ett_x411_ORName_U,
     &ett_x411_ORAddress,
     &ett_x411_BuiltInStandardAttributes,
-    &ett_x411_CountryName,
-    &ett_x411_AdministrationDomainName,
+    &ett_x411_CountryName_U,
+    &ett_x411_AdministrationDomainName_U,
     &ett_x411_PrivateDomainName,
     &ett_x411_PersonalName,
     &ett_x411_OrganizationalUnitNames,
@@ -9765,7 +9325,7 @@ void proto_register_x411(void) {
     &ett_x411_TeletexDomainDefinedAttribute,
     &ett_x411_UniversalDomainDefinedAttributes,
     &ett_x411_UniversalDomainDefinedAttribute,
-    &ett_x411_EncodedInformationTypes,
+    &ett_x411_EncodedInformationTypes_U,
     &ett_x411_BuiltInEncodedInformationTypes,
     &ett_x411_ExtendedEncodedInformationTypes,
     &ett_x411_NonBasicParameters,
@@ -9784,9 +9344,11 @@ void proto_register_x411(void) {
     &ett_x411_SecurityCategory,
 
 /*--- End of included file: packet-x411-ettarr.c ---*/
-#line 226 "packet-x411-template.c"
+#line 252 "packet-x411-template.c"
   };
 
+  module_t *x411_module;
+
   /* Register protocol */
   proto_x411 = proto_register_protocol(PNAME, PSNAME, PFNAME);
   register_dissector("x411", dissect_x411, proto_x411);
@@ -9794,6 +9356,19 @@ void proto_register_x411(void) {
   proto_register_field_array(proto_x411, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 
+  x411_extension_dissector_table = register_dissector_table("x411.extension", "X411-EXTENSION", FT_UINT32, BASE_DEC);
+  x411_extension_attribute_dissector_table = register_dissector_table("x411.extension-attribute", "X411-EXTENSION-ATTRIBUTE", FT_UINT32, BASE_DEC);
+  x411_tokendata_dissector_table = register_dissector_table("x411.tokendata", "X411-TOKENDATA", FT_UINT32, BASE_DEC);
+
+  /* Register our configuration options for X411, particularly our port */
+
+  x411_module = prefs_register_protocol_subtree("OSI/X.400", proto_x411, prefs_register_x411);
+
+  prefs_register_uint_preference(x411_module, "tcp.port", "X.411 TCP Port",
+                                "Set the port for P1 operations (if other"
+                                " than the default of 102)",
+                                10, &global_x411_tcp_port);
+
 }
 
 
@@ -9804,66 +9379,93 @@ void proto_reg_handoff_x411(void) {
 
 /*--- Included file: packet-x411-dis-tab.c ---*/
 #line 1 "packet-x411-dis-tab.c"
-  register_ber_oid_dissector("x411.extension.1", dissect_RecipientReassignmentProhibited_PDU, proto_x411, "recipient-reassignment-prohibited");
-  register_ber_oid_dissector("x411.extension.2", dissect_MTSOriginatorRequestedAlternateRecipient_PDU, proto_x411, "originator-requested-alternate-recipient");
-  register_ber_oid_dissector("x411.extension.3", dissect_DLExpansionProhibited_PDU, proto_x411, "dl-expansion-prohibited");
-  register_ber_oid_dissector("x411.extension.4", dissect_ConversionWithLossProhibited_PDU, proto_x411, "conversion-with-loss-prohibited");
-  register_ber_oid_dissector("x411.extension.5", dissect_LatestDeliveryTime_PDU, proto_x411, "latest-delivery-time");
-  register_ber_oid_dissector("x411.extension.6", dissect_RequestedDeliveryMethod_PDU, proto_x411, "requested-delivery-method");
-  register_ber_oid_dissector("x411.extension.7", dissect_PhysicalForwardingProhibited_PDU, proto_x411, "physical-forwarding-prohibited");
-  register_ber_oid_dissector("x411.extension.8", dissect_PhysicalForwardingAddressRequest_PDU, proto_x411, "physical-forwarding-address-request");
-  register_ber_oid_dissector("x411.extension.9", dissect_PhysicalDeliveryModes_PDU, proto_x411, "physical-delivery-modes");
-  register_ber_oid_dissector("x411.extension.10", dissect_RegisteredMailType_PDU, proto_x411, "registered-mail-type");
-  register_ber_oid_dissector("x411.extension.11", dissect_RecipientNumberForAdvice_PDU, proto_x411, "recipient-number-for-advice");
-  register_ber_oid_dissector("x411.extension.12", dissect_PhysicalRenditionAttributes_PDU, proto_x411, "physical-rendition-attributes");
-  register_ber_oid_dissector("x411.extension.13", dissect_OriginatorReturnAddress_PDU, proto_x411, "originator-return-address");
-  register_ber_oid_dissector("x411.extension.14", dissect_PhysicalDeliveryReportRequest_PDU, proto_x411, "physical-delivery-report-request");
-  register_ber_oid_dissector("x411.extension.15", dissect_OriginatorCertificate_PDU, proto_x411, "originator-certificate");
-  register_ber_oid_dissector("x411.extension.16", dissect_MessageToken_PDU, proto_x411, "message-token");
-  register_ber_oid_dissector("x411.extension.17", dissect_ContentConfidentialityAlgorithmIdentifier_PDU, proto_x411, "content-confidentiality-algorithm-identifier");
-  register_ber_oid_dissector("x411.extension.18", dissect_ContentIntegrityCheck_PDU, proto_x411, "content-integrity-check");
-  register_ber_oid_dissector("x411.extension.19", dissect_MessageOriginAuthenticationCheck_PDU, proto_x411, "message-origin-authentication-check");
-  register_ber_oid_dissector("x411.extension.20", dissect_MessageSecurityLabel_PDU, proto_x411, "message-security-label");
-  register_ber_oid_dissector("x411.extension.21", dissect_ProofOfSubmissionRequest_PDU, proto_x411, "proof-of-submission-request");
-  register_ber_oid_dissector("x411.extension.22", dissect_ProofOfDeliveryRequest_PDU, proto_x411, "proof-of-delivery-request");
-  register_ber_oid_dissector("x411.extension.23", dissect_ContentCorrelator_PDU, proto_x411, "content-correlator");
-  register_ber_oid_dissector("x411.extension.24", dissect_ProbeOriginAuthenticationCheck_PDU, proto_x411, "probe-origin-authentication-check");
-  register_ber_oid_dissector("x411.extension.25", dissect_RedirectionHistory_PDU, proto_x411, "redirection-history");
-  register_ber_oid_dissector("x411.extension.26", dissect_DLExpansionHistory_PDU, proto_x411, "dl-expansion-history");
-  register_ber_oid_dissector("x411.extension.27", dissect_PhysicalForwardingAddress_PDU, proto_x411, "physical-forwarding-address");
-  register_ber_oid_dissector("x411.extension.28", dissect_RecipientCertificate_PDU, proto_x411, "recipient-certificate");
-  register_ber_oid_dissector("x411.extension.29", dissect_ProofOfDelivery_PDU, proto_x411, "proof-of-delivery");
-  register_ber_oid_dissector("x411.extension.30", dissect_OriginatorAndDLExpansionHistory_PDU, proto_x411, "originator-and-DL-expansion-history");
-  register_ber_oid_dissector("x411.extension.31", dissect_ReportingDLName_PDU, proto_x411, "reporting-DL-name");
-  register_ber_oid_dissector("x411.extension.32", dissect_ReportingMTACertificate_PDU, proto_x411, "reporting-MTA-certificate");
-  register_ber_oid_dissector("x411.extension.33", dissect_ReportOriginAuthenticationCheck_PDU, proto_x411, "report-origin-authentication-check");
-  register_ber_oid_dissector("x411.extension.35", dissect_ProofOfSubmission_PDU, proto_x411, "proof-of-submission");
-  register_ber_oid_dissector("x411.extension.37", dissect_TraceInformation_PDU, proto_x411, "trace-information");
-  register_ber_oid_dissector("x411.extension.38", dissect_InternalTraceInformation_PDU, proto_x411, "internal-trace-information");
-  register_ber_oid_dissector("x411.extension.39", dissect_ReportingMTAName_PDU, proto_x411, "reporting-MTA-name");
-  register_ber_oid_dissector("x411.extension.40", dissect_ExtendedCertificates_PDU, proto_x411, "multiple-originator-certificates");
-  register_ber_oid_dissector("x411.extension.42", dissect_DLExemptedRecipients_PDU, proto_x411, "dl-exempted-recipients");
-  register_ber_oid_dissector("x411.extension.45", dissect_CertificateSelectors_PDU, proto_x411, "certificate-selectors");
-  register_ber_oid_dissector("x411.extension-attribute.1", dissect_CommonName_PDU, proto_x411, "common-name");
-  register_ber_oid_dissector("x411.extension-attribute.2", dissect_TeletexCommonName_PDU, proto_x411, "teletex-common-name");
-  register_ber_oid_dissector("x411.extension-attribute.3", dissect_TeletexOrganizationName_PDU, proto_x411, "teletex-organization-name");
-  register_ber_oid_dissector("x411.extension-attribute.4", dissect_TeletexPersonalName_PDU, proto_x411, "teletex-personal-name");
-  register_ber_oid_dissector("x411.extension-attribute.5", dissect_TeletexOrganizationalUnitNames_PDU, proto_x411, "teletex-organizational-unit-names");
-  register_ber_oid_dissector("x411.extension-attribute.7", dissect_PDSName_PDU, proto_x411, "pds-name");
-  register_ber_oid_dissector("x411.extension-attribute.8", dissect_PhysicalDeliveryCountryName_PDU, proto_x411, "physical-delivery-country-name");
-  register_ber_oid_dissector("x411.extension-attribute.9", dissect_PostalCode_PDU, proto_x411, "postal-code");
-  register_ber_oid_dissector("x411.extension-attribute.10", dissect_PhysicalDeliveryOfficeName_PDU, proto_x411, "physical-delivery-office-name");
-  register_ber_oid_dissector("x411.extension-attribute.24", dissect_UniversalCommonName_PDU, proto_x411, "universal-common-name");
-  register_ber_oid_dissector("x411.extension-attribute.25", dissect_UniversalOrganizationName_PDU, proto_x411, "universal-organization-name");
-  register_ber_oid_dissector("x411.extension-attribute.26", dissect_UniversalPersonalName_PDU, proto_x411, "universal-personal-name");
-  register_ber_oid_dissector("x411.extension-attribute.27", dissect_UniversalOrganizationalUnitNames_PDU, proto_x411, "universal-organizational-unit-names");
+  dissector_add("x411.extension", 1, create_dissector_handle(dissect_RecipientReassignmentProhibited_PDU, proto_x411));
+  dissector_add("x411.extension", 2, create_dissector_handle(dissect_MTSOriginatorRequestedAlternateRecipient_PDU, proto_x411));
+  dissector_add("x411.extension", 3, create_dissector_handle(dissect_DLExpansionProhibited_PDU, proto_x411));
+  dissector_add("x411.extension", 4, create_dissector_handle(dissect_ConversionWithLossProhibited_PDU, proto_x411));
+  dissector_add("x411.extension", 5, create_dissector_handle(dissect_LatestDeliveryTime_PDU, proto_x411));
+  dissector_add("x411.extension", 6, create_dissector_handle(dissect_RequestedDeliveryMethod_PDU, proto_x411));
+  dissector_add("x411.extension", 7, create_dissector_handle(dissect_PhysicalForwardingProhibited_PDU, proto_x411));
+  dissector_add("x411.extension", 8, create_dissector_handle(dissect_PhysicalForwardingAddressRequest_PDU, proto_x411));
+  dissector_add("x411.extension", 9, create_dissector_handle(dissect_PhysicalDeliveryModes_PDU, proto_x411));
+  dissector_add("x411.extension", 10, create_dissector_handle(dissect_RegisteredMailType_PDU, proto_x411));
+  dissector_add("x411.extension", 11, create_dissector_handle(dissect_RecipientNumberForAdvice_PDU, proto_x411));
+  dissector_add("x411.extension", 12, create_dissector_handle(dissect_PhysicalRenditionAttributes_PDU, proto_x411));
+  dissector_add("x411.extension", 13, create_dissector_handle(dissect_OriginatorReturnAddress_PDU, proto_x411));
+  dissector_add("x411.extension", 14, create_dissector_handle(dissect_PhysicalDeliveryReportRequest_PDU, proto_x411));
+  dissector_add("x411.extension", 15, create_dissector_handle(dissect_OriginatorCertificate_PDU, proto_x411));
+  dissector_add("x411.extension", 16, create_dissector_handle(dissect_MessageToken_PDU, proto_x411));
+  dissector_add("x411.extension", 17, create_dissector_handle(dissect_ContentConfidentialityAlgorithmIdentifier_PDU, proto_x411));
+  dissector_add("x411.extension", 18, create_dissector_handle(dissect_ContentIntegrityCheck_PDU, proto_x411));
+  dissector_add("x411.extension", 19, create_dissector_handle(dissect_MessageOriginAuthenticationCheck_PDU, proto_x411));
+  dissector_add("x411.extension", 20, create_dissector_handle(dissect_MessageSecurityLabel_PDU, proto_x411));
+  dissector_add("x411.extension", 21, create_dissector_handle(dissect_ProofOfSubmissionRequest_PDU, proto_x411));
+  dissector_add("x411.extension", 22, create_dissector_handle(dissect_ProofOfDeliveryRequest_PDU, proto_x411));
+  dissector_add("x411.extension", 23, create_dissector_handle(dissect_ContentCorrelator_PDU, proto_x411));
+  dissector_add("x411.extension", 24, create_dissector_handle(dissect_ProbeOriginAuthenticationCheck_PDU, proto_x411));
+  dissector_add("x411.extension", 25, create_dissector_handle(dissect_RedirectionHistory_PDU, proto_x411));
+  dissector_add("x411.extension", 26, create_dissector_handle(dissect_DLExpansionHistory_PDU, proto_x411));
+  dissector_add("x411.extension", 27, create_dissector_handle(dissect_PhysicalForwardingAddress_PDU, proto_x411));
+  dissector_add("x411.extension", 28, create_dissector_handle(dissect_RecipientCertificate_PDU, proto_x411));
+  dissector_add("x411.extension", 29, create_dissector_handle(dissect_ProofOfDelivery_PDU, proto_x411));
+  dissector_add("x411.extension", 30, create_dissector_handle(dissect_OriginatorAndDLExpansionHistory_PDU, proto_x411));
+  dissector_add("x411.extension", 31, create_dissector_handle(dissect_ReportingDLName_PDU, proto_x411));
+  dissector_add("x411.extension", 32, create_dissector_handle(dissect_ReportingMTACertificate_PDU, proto_x411));
+  dissector_add("x411.extension", 33, create_dissector_handle(dissect_ReportOriginAuthenticationCheck_PDU, proto_x411));
+  dissector_add("x411.extension", 35, create_dissector_handle(dissect_ProofOfSubmission_PDU, proto_x411));
+  dissector_add("x411.extension", 37, create_dissector_handle(dissect_TraceInformation_PDU, proto_x411));
+  dissector_add("x411.extension", 38, create_dissector_handle(dissect_InternalTraceInformation_PDU, proto_x411));
+  dissector_add("x411.extension", 39, create_dissector_handle(dissect_ReportingMTAName_PDU, proto_x411));
+  dissector_add("x411.extension", 40, create_dissector_handle(dissect_ExtendedCertificates_PDU, proto_x411));
+  dissector_add("x411.extension", 42, create_dissector_handle(dissect_DLExemptedRecipients_PDU, proto_x411));
+  dissector_add("x411.extension", 45, create_dissector_handle(dissect_CertificateSelectors_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 1, create_dissector_handle(dissect_CommonName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 2, create_dissector_handle(dissect_TeletexCommonName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 3, create_dissector_handle(dissect_TeletexOrganizationName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 4, create_dissector_handle(dissect_TeletexPersonalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 5, create_dissector_handle(dissect_TeletexOrganizationalUnitNames_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 6, create_dissector_handle(dissect_TeletexDomainDefinedAttributes_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 7, create_dissector_handle(dissect_PDSName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 8, create_dissector_handle(dissect_PhysicalDeliveryCountryName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 9, create_dissector_handle(dissect_PostalCode_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 10, create_dissector_handle(dissect_PhysicalDeliveryOfficeName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 11, create_dissector_handle(dissect_PhysicalDeliveryOfficeNumber_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 12, create_dissector_handle(dissect_ExtensionORAddressComponents_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 13, create_dissector_handle(dissect_PhysicalDeliveryPersonalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 14, create_dissector_handle(dissect_PhysicalDeliveryOrganizationName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 15, create_dissector_handle(dissect_ExtensionPhysicalDeliveryAddressComponents_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 16, create_dissector_handle(dissect_UnformattedPostalAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 17, create_dissector_handle(dissect_StreetAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 18, create_dissector_handle(dissect_PostOfficeBoxAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 19, create_dissector_handle(dissect_PosteRestanteAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 20, create_dissector_handle(dissect_UniquePostalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 21, create_dissector_handle(dissect_LocalPostalAttributes_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 22, create_dissector_handle(dissect_ExtendedNetworkAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 23, create_dissector_handle(dissect_TerminalType_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 24, create_dissector_handle(dissect_UniversalCommonName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 25, create_dissector_handle(dissect_UniversalOrganizationName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 26, create_dissector_handle(dissect_UniversalPersonalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 27, create_dissector_handle(dissect_UniversalOrganizationalUnitNames_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 28, create_dissector_handle(dissect_UniversalDomainDefinedAttributes_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 29, create_dissector_handle(dissect_UniversalPhysicalDeliveryOfficeName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 30, create_dissector_handle(dissect_UniversalPhysicalDeliveryOfficeNumber_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 31, create_dissector_handle(dissect_UniversalExtensionORAddressComponents_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 32, create_dissector_handle(dissect_UniversalPhysicalDeliveryPersonalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 33, create_dissector_handle(dissect_UniversalPhysicalDeliveryOrganizationName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 34, create_dissector_handle(dissect_UniversalExtensionPhysicalDeliveryAddressComponents_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 35, create_dissector_handle(dissect_UniversalUnformattedPostalAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 36, create_dissector_handle(dissect_UniversalStreetAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 37, create_dissector_handle(dissect_UniversalPostOfficeBoxAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 38, create_dissector_handle(dissect_UniversalPosteRestanteAddress_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 39, create_dissector_handle(dissect_UniversalUniquePostalName_PDU, proto_x411));
+  dissector_add("x411.extension-attribute", 40, create_dissector_handle(dissect_UniversalLocalPostalAttributes_PDU, proto_x411));
   register_ber_oid_dissector("2.6.1.4.14", dissect_ReportDeliveryArgument_PDU, proto_x411, "id-et-report");
   register_ber_oid_dissector("2.6.3.6.0", dissect_AsymmetricToken_PDU, proto_x411, "id-tok-asymmetricToken");
   register_ber_oid_dissector("2.6.5.6.0", dissect_MTANameAndOptionalGDI_PDU, proto_x411, "id-on-mtaName");
-  register_ber_oid_dissector("x411.tokendata.1", dissect_BindTokenSignedData_PDU, proto_x411, "bind-token-signed-data");
-  register_ber_oid_dissector("x411.tokendata.2", dissect_MessageTokenSignedData_PDU, proto_x411, "message-token-signed-data");
-  register_ber_oid_dissector("x411.tokendata.3", dissect_MessageTokenEncryptedData_PDU, proto_x411, "message-token-encrypted-data");
-  register_ber_oid_dissector("x411.tokendata.4", dissect_BindTokenEncryptedData_PDU, proto_x411, "bind-token-encrypted-data");
+  dissector_add("x411.tokendata", 1, create_dissector_handle(dissect_BindTokenSignedData_PDU, proto_x411));
+  dissector_add("x411.tokendata", 2, create_dissector_handle(dissect_MessageTokenSignedData_PDU, proto_x411));
+  dissector_add("x411.tokendata", 3, create_dissector_handle(dissect_MessageTokenEncryptedData_PDU, proto_x411));
+  dissector_add("x411.tokendata", 4, create_dissector_handle(dissect_BindTokenEncryptedData_PDU, proto_x411));
   register_ber_oid_dissector("2.6.5.2.0", dissect_ContentLength_PDU, proto_x411, "id-at-mhs-maximum-content-length");
   register_ber_oid_dissector("2.6.5.2.1", dissect_ExtendedContentType_PDU, proto_x411, "id-at-mhs-deliverable-content-types");
   register_ber_oid_dissector("2.6.5.2.2", dissect_ExtendedEncodedInformationType_PDU, proto_x411, "id-at-mhs-exclusively-acceptable-eits");
@@ -9876,14 +9478,67 @@ void proto_reg_handoff_x411(void) {
   register_ber_oid_dissector("2.6.5.2.18", dissect_ExtendedEncodedInformationType_PDU, proto_x411, "id-at-mhs-unacceptable-eits");
   register_ber_oid_dissector("2.16.840.1.101.2.1.5.47", dissect_ORName_PDU, proto_x411, "id-at-aLExemptedAddressProcessor");
   register_ber_oid_dissector("2.16.840.1.101.2.2.1.134.1", dissect_ORAddress_PDU, proto_x411, "id-at-collective-mhs-or-addresses");
+  register_ber_oid_dissector("2.6.4.3.80", dissect_CertificateSelectors_PDU, proto_x411, "id-att-certificate-selectors");
+  register_ber_oid_dissector("2.6.4.3.1", dissect_Content_PDU, proto_x411, "id-att-content");
+  register_ber_oid_dissector("2.6.4.3.3", dissect_ContentCorrelator_PDU, proto_x411, "id-att-content-correlator");
+  register_ber_oid_dissector("2.6.4.3.4", dissect_ContentIdentifier_PDU, proto_x411, "id-att-content-identifier");
+  register_ber_oid_dissector("2.6.4.3.5", dissect_ContentIntegrityCheck_PDU, proto_x411, "id-att-content-inetgrity-check");
+  register_ber_oid_dissector("2.6.4.3.6", dissect_ContentLength_PDU, proto_x411, "id-att-content-length");
+  register_ber_oid_dissector("2.6.4.3.8", dissect_ExtendedContentType_PDU, proto_x411, "id-att-content-type");
+  register_ber_oid_dissector("2.6.4.3.9", dissect_ConversionWithLossProhibited_PDU, proto_x411, "id-att-conversion-with-loss-prohibited");
+  register_ber_oid_dissector("2.6.4.3.51", dissect_DeferredDeliveryTime_PDU, proto_x411, "id-att-deferred-delivery-time");
+  register_ber_oid_dissector("2.6.4.3.13", dissect_DeliveryFlags_PDU, proto_x411, "id-att-delivery-flags");
+  register_ber_oid_dissector("2.6.4.3.78", dissect_ORName_PDU, proto_x411, "id-att-dl-exempted-recipients");
+  register_ber_oid_dissector("2.6.4.3.14", dissect_DLExpansion_PDU, proto_x411, "id-att-dl-expansion-history");
+  register_ber_oid_dissector("2.6.4.3.53", dissect_DLExpansionProhibited_PDU, proto_x411, "id-att-dl-expansion-prohibited");
+  register_ber_oid_dissector("2.6.4.3.54", dissect_InternalTraceInformationElement_PDU, proto_x411, "id-att-internal-trace-information");
+  register_ber_oid_dissector("2.6.4.3.55", dissect_LatestDeliveryTime_PDU, proto_x411, "id-att-latest-delivery-time");
+  register_ber_oid_dissector("2.6.4.3.18", dissect_MessageDeliveryEnvelope_PDU, proto_x411, "id-att-message-delivery-envelope");
+  register_ber_oid_dissector("2.6.4.3.20", dissect_MessageDeliveryTime_PDU, proto_x411, "id-att-message-delivery-time");
+  register_ber_oid_dissector("2.6.4.3.19", dissect_MTSIdentifier_PDU, proto_x411, "id-att-message-identifier");
+  register_ber_oid_dissector("2.6.4.3.21", dissect_MessageOriginAuthenticationCheck_PDU, proto_x411, "id-at-message-orgin-authentication-check");
+  register_ber_oid_dissector("2.6.4.3.22", dissect_MessageSecurityLabel_PDU, proto_x411, "id-att-message-security-label");
+  register_ber_oid_dissector("2.6.4.3.59", dissect_MessageSubmissionEnvelope_PDU, proto_x411, "id-att-message-submission-envelope");
+  register_ber_oid_dissector("2.6.4.3.23", dissect_MessageSubmissionTime_PDU, proto_x411, "id-att-message-submission-time");
+  register_ber_oid_dissector("2.6.4.3.24", dissect_MessageToken_PDU, proto_x411, "id-att-message-token");
+  register_ber_oid_dissector("2.6.4.3.81", dissect_ExtendedCertificates_PDU, proto_x411, "id-att-multiple-originator-certificates");
+  register_ber_oid_dissector("2.6.4.3.17", dissect_ORName_PDU, proto_x411, "id-att-originally-intended-recipient-name");
+  register_ber_oid_dissector("2.6.4.3.62", dissect_OriginatingMTACertificate_PDU, proto_x411, "id-att-originating-MTA-certificate");
+  register_ber_oid_dissector("2.6.4.3.26", dissect_OriginatorCertificate_PDU, proto_x411, "id-att-originator-certificate");
+  register_ber_oid_dissector("2.6.4.3.27", dissect_ORName_PDU, proto_x411, "id-att-originator-name");
+  register_ber_oid_dissector("2.6.4.3.63", dissect_OriginatorReportRequest_PDU, proto_x411, "id-att-originator-report-request");
+  register_ber_oid_dissector("2.6.4.3.64", dissect_OriginatorReturnAddress_PDU, proto_x411, "id-att-originator-return-address");
+  register_ber_oid_dissector("2.6.4.3.28", dissect_ORName_PDU, proto_x411, "id-att-other-recipient-names");
+  register_ber_oid_dissector("2.6.4.3.65", dissect_PerMessageIndicators_PDU, proto_x411, "id-att-per-message-indicators");
+  register_ber_oid_dissector("2.6.4.3.66", dissect_PerRecipientMessageSubmissionFields_PDU, proto_x411, "id-att-per-recipient-message-submission-fields");
+  register_ber_oid_dissector("2.6.4.3.67", dissect_PerRecipientProbeSubmissionFields_PDU, proto_x411, "id-att-per-recipient-probe-submission-fields");
+  register_ber_oid_dissector("2.6.4.3.30", dissect_PerRecipientReportDeliveryFields_PDU, proto_x411, "id-att-per-recipient-report-delivery-fields");
+  register_ber_oid_dissector("2.6.4.3.31", dissect_Priority_PDU, proto_x411, "id-att-priority");
+  register_ber_oid_dissector("2.6.4.3.68", dissect_ProbeOriginAuthenticationCheck_PDU, proto_x411, "id-att-probe-origin-authentication-check");
+  register_ber_oid_dissector("2.6.4.3.69", dissect_ProbeSubmissionEnvelope_PDU, proto_x411, "id-att-probe-submission-envelope");
+  register_ber_oid_dissector("2.6.4.3.32", dissect_ProofOfDeliveryRequest_PDU, proto_x411, "id-att-proof-of-delivery-request");
+  register_ber_oid_dissector("2.6.4.3.70", dissect_ProofOfSubmission_PDU, proto_x411, "id-att-proof-of-submission");
+  register_ber_oid_dissector("2.6.4.3.82", dissect_ExtendedCertificates_PDU, proto_x411, "id-att-recipient-certificate");
+  register_ber_oid_dissector("2.6.4.3.71", dissect_ORName_PDU, proto_x411, "id-att-recipient-names");
+  register_ber_oid_dissector("2.6.4.3.72", dissect_RecipientReassignmentProhibited_PDU, proto_x411, "id-att-recipient-reassignment-prohibited");
+  register_ber_oid_dissector("2.6.4.3.33", dissect_Redirection_PDU, proto_x411, "id-at-redirection-history");
+  register_ber_oid_dissector("2.6.4.3.34", dissect_ReportDeliveryEnvelope_PDU, proto_x411, "id-att-report-delivery-envelope");
+  register_ber_oid_dissector("2.6.4.3.35", dissect_ReportingDLName_PDU, proto_x411, "id-att-reporting-DL-name");
+  register_ber_oid_dissector("2.6.4.3.36", dissect_ReportingMTACertificate_PDU, proto_x411, "id-att-reporting-MTA-certificate");
+  register_ber_oid_dissector("2.6.4.3.37", dissect_ReportOriginAuthenticationCheck_PDU, proto_x411, "id-att-report-origin-authentication-check");
+  register_ber_oid_dissector("2.6.4.3.38", dissect_SecurityClassification_PDU, proto_x411, "id-att-security-classification");
+  register_ber_oid_dissector("2.6.4.3.40", dissect_SubjectSubmissionIdentifier_PDU, proto_x411, "id-att-subject-submission-identifier");
+  register_ber_oid_dissector("2.6.4.3.41", dissect_ORName_PDU, proto_x411, "id-att-this-recipient-name");
+  register_ber_oid_dissector("2.6.4.3.75", dissect_TraceInformationElement_PDU, proto_x411, "id-att-trace-information");
+  register_ber_oid_dissector("2.6.1.7.36", dissect_MessageToken_PDU, proto_x411, "id-hat-forwarded-token");
 
 
 /*--- End of included file: packet-x411-dis-tab.c ---*/
-#line 243 "packet-x411-template.c"
+#line 284 "packet-x411-template.c"
 
   /* APPLICATION CONTEXT */
 
-  add_oid_str_name("2.6.0.1.6", "id-ac-mts-transfer");
+  oid_add_from_string("id-ac-mts-transfer","2.6.0.1.6");
 
   /* ABSTRACT SYNTAXES */
 
@@ -9896,5 +9551,22 @@ void proto_reg_handoff_x411(void) {
     register_rtse_oid_dissector_handle("applicationProtocol.12", handle, 0, "mta-transfer-protocol", FALSE);
   }
 
+  /* remember the tpkt handler for change in preferences */
+  tpkt_handle = find_dissector("tpkt");
+
+}
+
+void prefs_register_x411(void) {
+
+  /* de-register the old port */
+  /* port 102 is registered by TPKT - don't undo this! */
+  if((tcp_port != 102) && tpkt_handle)
+    dissector_delete("tcp.port", tcp_port, tpkt_handle);
+
+  /* Set our port number for future use */
+  tcp_port = global_x411_tcp_port;
+
+  if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
+    dissector_add("tcp.port", tcp_port, tpkt_handle);
 
 }