diff --git a/src/ranap/Makefile.am b/src/ranap/Makefile.am
index 92ec147..4dcc067 100644
--- a/src/ranap/Makefile.am
+++ b/src/ranap/Makefile.am
@@ -423,15 +423,18 @@
 	RANAP_RelocationCancel.c	\
 	RANAP_RelocationCancelAcknowledge.c	\
 	RANAP_SRNS-ContextRequest.c	\
+	RANAP_RAB-DataForwardingList-SRNS-CtxReq.c	\
+	RANAP_DataVolumeReportRequest.c	\
 	RANAP_SRNS-ContextResponse.c	\
 	RANAP_SecurityModeCommand.c	\
 	RANAP_SecurityModeComplete.c	\
 	RANAP_SecurityModeReject.c	\
-	RANAP_DataVolumeReportRequest.c	\
 	RANAP_DataVolumeReport.c	\
 	RANAP_Reset.c	\
 	RANAP_ResetAcknowledge.c	\
 	RANAP_RAB-ReleaseRequest.c	\
+	RANAP_RedirectionIndication.c	\
+	RANAP_RAB-ReleaseList.c	\
 	RANAP_Iu-ReleaseRequest.c	\
 	RANAP_RelocationDetect.c	\
 	RANAP_RelocationComplete.c	\
@@ -448,6 +451,7 @@
 	RANAP_SRNS-DataForwardCommand.c	\
 	RANAP_ForwardSRNS-Context.c	\
 	RANAP_RAB-AssignmentRequest.c	\
+	RANAP_RAB-SetupOrModifyList.c	\
 	RANAP_RAB-AssignmentResponse.c	\
 	RANAP_PrivateMessage.c	\
 	RANAP_ResetResource.c	\
@@ -497,6 +501,14 @@
 	RANAP_ProtocolExtensionContainer.c	\
 	RANAP_ProtocolExtensionField.c	\
 	RANAP_IE.c	\
+	RANAP_ProtocolIE-Container.c	\
+	RANAP_ProtocolIE-FieldPair.c	\
+	RANAP_ProtocolIE-ContainerPair.c	\
+	RANAP_RAB-IE-ContainerList.c	\
+	RANAP_RAB-IE-ContainerPairList.c	\
+	RANAP_ProtocolError-IE-ContainerList.c	\
+	RANAP_IuSigConId-IE-ContainerList.c	\
+	RANAP_DirectTransfer-IE-ContainerList.c	\
 	RANAP_DataVolumeReportList.c	\
 	RANAP_RAB-ReleasedList-IuRelComp.c	\
 	RANAP_RAB-RelocationReleaseList.c	\
@@ -504,18 +516,17 @@
 	RANAP_RAB-SetupList-RelocReq.c	\
 	RANAP_RAB-SetupList-RelocReqAck.c	\
 	RANAP_RAB-FailedList.c	\
-	RANAP_RAB-DataForwardingList-SRNS-CtxReq.c	\
 	RANAP_RAB-ContextList.c	\
-	RANAP_RAB-ContextFailedtoTransferList.c	\
+	RANAP_RABs-ContextFailedtoTransferList.c	\
 	RANAP_RAB-DataVolumeReportRequestList.c	\
-	RANAP_RAB-FailedtoReportList.c	\
+	RANAP_RAB-DataVolumeReportRequestItem.c	\
+	RANAP_RABs-failed-to-reportList.c	\
 	RANAP_RAB-SetupList-EnhancedRelocCompleteReq.c	\
 	RANAP_RAB-SetupList-EnhancedRelocCompleteRes.c	\
 	RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.c	\
 	RANAP_RAB-SetupOrModifiedList.c	\
 	RANAP_RAB-ReleasedList.c	\
 	RANAP_RAB-QueuedList.c	\
-	RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.c	\
 	RANAP_RAB-ContextList-RANAP-RelocInf.c	\
 	RANAP_RAB-SetupList-EnhRelocInfoReq.c	\
 	RANAP_RAB-SetupList-EnhRelocInfoRes.c	\
@@ -526,14 +537,19 @@
 	RANAP_RAB-ReleasedItem-IuRelComp.c	\
 	RANAP_RAB-RelocationReleaseItem.c	\
 	RANAP_RAB-DataForwardingItem.c	\
+	RANAP_RAB-DataForwardingItem-SRNS-CtxReq.c	\
 	RANAP_RAB-SetupItem-RelocReq.c	\
 	RANAP_UserPlaneInformation.c	\
+	RANAP_CNMBMSLinkingInformation.c	\
+	RANAP_JoinedMBMSBearerService-IEs.c	\
 	RANAP_RAB-SetupItem-RelocReqAck.c	\
 	RANAP_RAB-FailedItem.c	\
 	RANAP_RAB-ContextItem.c	\
 	RANAP_RABs-ContextFailedtoTransferItem.c	\
 	RANAP_RABs-failed-to-reportItem.c	\
+	RANAP_ResetResourceList.c	\
 	RANAP_ResetResourceItem.c	\
+	RANAP_ResetResourceAckList.c	\
 	RANAP_ResetResourceAckItem.c	\
 	RANAP_RAB-ReleaseItem.c	\
 	RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.c	\
@@ -547,6 +563,7 @@
 	RANAP_DataVolumeList.c	\
 	RANAP_RAB-QueuedItem.c	\
 	RANAP_RAB-ReleaseFailedList.c	\
+	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.c	\
 	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.c	\
 	RANAP_DirectTransferInformationItem-RANAP-RelocInf.c	\
 	RANAP_RAB-ContextItem-RANAP-RelocInf.c	\
@@ -985,15 +1002,18 @@
 	RANAP_RelocationCancel.h	\
 	RANAP_RelocationCancelAcknowledge.h	\
 	RANAP_SRNS-ContextRequest.h	\
+	RANAP_RAB-DataForwardingList-SRNS-CtxReq.h	\
+	RANAP_DataVolumeReportRequest.h	\
 	RANAP_SRNS-ContextResponse.h	\
 	RANAP_SecurityModeCommand.h	\
 	RANAP_SecurityModeComplete.h	\
 	RANAP_SecurityModeReject.h	\
-	RANAP_DataVolumeReportRequest.h	\
 	RANAP_DataVolumeReport.h	\
 	RANAP_Reset.h	\
 	RANAP_ResetAcknowledge.h	\
 	RANAP_RAB-ReleaseRequest.h	\
+	RANAP_RedirectionIndication.h	\
+	RANAP_RAB-ReleaseList.h	\
 	RANAP_Iu-ReleaseRequest.h	\
 	RANAP_RelocationDetect.h	\
 	RANAP_RelocationComplete.h	\
@@ -1010,6 +1030,7 @@
 	RANAP_SRNS-DataForwardCommand.h	\
 	RANAP_ForwardSRNS-Context.h	\
 	RANAP_RAB-AssignmentRequest.h	\
+	RANAP_RAB-SetupOrModifyList.h	\
 	RANAP_RAB-AssignmentResponse.h	\
 	RANAP_PrivateMessage.h	\
 	RANAP_ResetResource.h	\
@@ -1059,6 +1080,14 @@
 	RANAP_ProtocolExtensionContainer.h	\
 	RANAP_ProtocolExtensionField.h	\
 	RANAP_IE.h	\
+	RANAP_ProtocolIE-Container.h	\
+	RANAP_ProtocolIE-FieldPair.h	\
+	RANAP_ProtocolIE-ContainerPair.h	\
+	RANAP_RAB-IE-ContainerList.h	\
+	RANAP_RAB-IE-ContainerPairList.h	\
+	RANAP_ProtocolError-IE-ContainerList.h	\
+	RANAP_IuSigConId-IE-ContainerList.h	\
+	RANAP_DirectTransfer-IE-ContainerList.h	\
 	RANAP_DataVolumeReportList.h	\
 	RANAP_RAB-ReleasedList-IuRelComp.h	\
 	RANAP_RAB-RelocationReleaseList.h	\
@@ -1066,18 +1095,17 @@
 	RANAP_RAB-SetupList-RelocReq.h	\
 	RANAP_RAB-SetupList-RelocReqAck.h	\
 	RANAP_RAB-FailedList.h	\
-	RANAP_RAB-DataForwardingList-SRNS-CtxReq.h	\
 	RANAP_RAB-ContextList.h	\
-	RANAP_RAB-ContextFailedtoTransferList.h	\
+	RANAP_RABs-ContextFailedtoTransferList.h	\
 	RANAP_RAB-DataVolumeReportRequestList.h	\
-	RANAP_RAB-FailedtoReportList.h	\
+	RANAP_RAB-DataVolumeReportRequestItem.h	\
+	RANAP_RABs-failed-to-reportList.h	\
 	RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h	\
 	RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h	\
 	RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h	\
 	RANAP_RAB-SetupOrModifiedList.h	\
 	RANAP_RAB-ReleasedList.h	\
 	RANAP_RAB-QueuedList.h	\
-	RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.h	\
 	RANAP_RAB-ContextList-RANAP-RelocInf.h	\
 	RANAP_RAB-SetupList-EnhRelocInfoReq.h	\
 	RANAP_RAB-SetupList-EnhRelocInfoRes.h	\
@@ -1088,14 +1116,19 @@
 	RANAP_RAB-ReleasedItem-IuRelComp.h	\
 	RANAP_RAB-RelocationReleaseItem.h	\
 	RANAP_RAB-DataForwardingItem.h	\
+	RANAP_RAB-DataForwardingItem-SRNS-CtxReq.h	\
 	RANAP_RAB-SetupItem-RelocReq.h	\
 	RANAP_UserPlaneInformation.h	\
+	RANAP_CNMBMSLinkingInformation.h	\
+	RANAP_JoinedMBMSBearerService-IEs.h	\
 	RANAP_RAB-SetupItem-RelocReqAck.h	\
 	RANAP_RAB-FailedItem.h	\
 	RANAP_RAB-ContextItem.h	\
 	RANAP_RABs-ContextFailedtoTransferItem.h	\
 	RANAP_RABs-failed-to-reportItem.h	\
+	RANAP_ResetResourceList.h	\
 	RANAP_ResetResourceItem.h	\
+	RANAP_ResetResourceAckList.h	\
 	RANAP_ResetResourceAckItem.h	\
 	RANAP_RAB-ReleaseItem.h	\
 	RANAP_RAB-SetupItem-EnhancedRelocCompleteReq.h	\
@@ -1109,6 +1142,7 @@
 	RANAP_DataVolumeList.h	\
 	RANAP_RAB-QueuedItem.h	\
 	RANAP_RAB-ReleaseFailedList.h	\
+	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.h	\
 	RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-Item.h	\
 	RANAP_DirectTransferInformationItem-RANAP-RelocInf.h	\
 	RANAP_RAB-ContextItem-RANAP-RelocInf.h	\
@@ -1135,5 +1169,19 @@
 	ASN1C_PREFIX="RANAP_" asn1c -gen-PER ../../asn1/ranap/RANAP-CommonDataTypes.asn ../../asn1/ranap/RANAP-Constants.asn ../../asn1/ranap/RANAP-IEs.asn ../../asn1/ranap/RANAP-PDU.asn
 	@rm ANY.* BOOLEAN.* INTEGER.* NativeEnumerated.* NativeInteger.* NULL.* OBJECT_IDENTIFIER.* asn_* OCTET_STRING.* converter-sample.c per_* xer_* constr* der_* ber_* BIT_STRING.*
 # 	some fixups in erroneous code that asn1c generates
-	sed -i '6i#include <constr_CHOICE.h>' RANAP_ChosenEncryptionAlgorithm.h RANAP_ChosenIntegrityProtectionAlgorithm.h RANAP_IMSI.h RANAP_PLMNidentity.h RANAP_RAB-ReleaseFailedList.c
-	sed -i 's/Member/MemberA/' RANAP_LA-LIST.[ch] RANAP_SDU-Parameters.[ch] RANAP_RABParametersList.[ch] RANAP_AuthorisedPLMNs.[ch]
+	sed -i '6i#include <constr_CHOICE.h>' RANAP_ChosenEncryptionAlgorithm.h RANAP_ChosenIntegrityProtectionAlgorithm.h RANAP_IMSI.h RANAP_PLMNidentity.h RANAP_RAB-ReleaseFailedList.c RANAP_RAB-ReleaseList.c RANAP_RAB-SetupOrModifyList.c RANAP_ResetResourceList.c RANAP_ResetResourceAckList.c
+	sed -i 's/Member/MemberA/' RANAP_LA-LIST.[ch]
+	sed -i 's/Member/MemberB/' RANAP_RABParametersList.[ch]
+	sed -i 's/Member/MemberC/' RANAP_AuthorisedPLMNs.[ch]
+	sed -i 's/Member/MemberD/' RANAP_UnsuccessfulLinking-IEs.[ch]
+	sed -i 's/Member/MemberE/' RANAP_SDU-FormatInformationParameters.[ch]
+	sed -i 's/Member/MemberF/' RANAP_JoinedMBMSBearerService-IEs.[ch]
+	sed -i 's/Member/MemberG/' RANAP_CriticalityDiagnostics-IE-List.[ch]
+	sed -i 's/Member/MemberH/' RANAP_DataVolumeList.[ch]
+	sed -i 's/Member/MemberI/' RANAP_SDU-Parameters.[ch]
+	sed -i 's/Member/MemberJ/' RANAP_EUTRANFrequencies.[ch]
+	sed -i 's/Member/MemberK/' RANAP_LeftMBMSBearerService-IEs.[ch]
+	sed -i 's/Member/MemberL/' RANAP_MessageStructure.[ch]
+	sed -i 's/Member/MemberM/' RANAP_PLMNs-in-shared-network.[ch]
+	sed -i 's/Member/MemberN/' RANAP_RABDataVolumeReport.[ch]
+
diff --git a/src/ranap/RANAP_AuthorisedPLMNs.c b/src/ranap/RANAP_AuthorisedPLMNs.c
index 0c9db50..1615045 100644
--- a/src/ranap/RANAP_AuthorisedPLMNs.c
+++ b/src/ranap/RANAP_AuthorisedPLMNs.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 5,  5,  1l,  32l }	/* (SIZE(1..32)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_MemberA_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, pLMNidentity),
+static asn_TYPE_member_t asn_MBR_MemberC_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberC, pLMNidentity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_PLMNidentity,
@@ -21,7 +21,7 @@
 		0,
 		"pLMNidentity"
 		},
-	{ ATF_POINTER, 2, offsetof(struct MemberA, authorisedSNAsList),
+	{ ATF_POINTER, 2, offsetof(struct MemberC, authorisedSNAsList),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_AuthorisedSNAs,
@@ -30,7 +30,7 @@
 		0,
 		"authorisedSNAsList"
 		},
-	{ ATF_POINTER, 1, offsetof(struct MemberA, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberC, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_MemberA_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_MemberA_tags_2[] = {
+static const int asn_MAP_MemberC_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberC_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_MemberA_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberC_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNidentity */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* authorisedSNAsList */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_MemberA_specs_2 = {
-	sizeof(struct MemberA),
-	offsetof(struct MemberA, _asn_ctx),
-	asn_MAP_MemberA_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberC_specs_2 = {
+	sizeof(struct MemberC),
+	offsetof(struct MemberC, _asn_ctx),
+	asn_MAP_MemberC_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_MemberA_oms_2,	/* Optional members */
+	asn_MAP_MemberC_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_MemberA_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberC_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_MemberA_tags_2,
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
-	asn_DEF_MemberA_tags_2,	/* Same as above */
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
+	asn_DEF_MemberC_tags_2,
+	sizeof(asn_DEF_MemberC_tags_2)
+		/sizeof(asn_DEF_MemberC_tags_2[0]), /* 1 */
+	asn_DEF_MemberC_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberC_tags_2)
+		/sizeof(asn_DEF_MemberC_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_MemberA_2,
+	asn_MBR_MemberC_2,
 	3,	/* Elements count */
-	&asn_SPC_MemberA_specs_2	/* Additional specs */
+	&asn_SPC_MemberC_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_AuthorisedPLMNs_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_MemberA_2,
+		&asn_DEF_MemberC_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_AuthorisedPLMNs.h b/src/ranap/RANAP_AuthorisedPLMNs.h
index 6bd1dff..5acd88a 100644
--- a/src/ranap/RANAP_AuthorisedPLMNs.h
+++ b/src/ranap/RANAP_AuthorisedPLMNs.h
@@ -24,7 +24,7 @@
 
 /* RANAP_AuthorisedPLMNs */
 typedef struct RANAP_AuthorisedPLMNs {
-	A_SEQUENCE_OF(struct MemberA {
+	A_SEQUENCE_OF(struct MemberC {
 		RANAP_PLMNidentity_t	 pLMNidentity;
 		RANAP_AuthorisedSNAs_t	*authorisedSNAsList	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_CNMBMSLinkingInformation.c b/src/ranap/RANAP_CNMBMSLinkingInformation.c
new file mode 100644
index 0000000..f664080
--- /dev/null
+++ b/src/ranap/RANAP_CNMBMSLinkingInformation.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_CNMBMSLinkingInformation.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_CNMBMSLinkingInformation_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_CNMBMSLinkingInformation, joinedMBMSBearerService_IEs),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_JoinedMBMSBearerService_IEs,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"joinedMBMSBearerService-IEs"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_CNMBMSLinkingInformation, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_CNMBMSLinkingInformation_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_CNMBMSLinkingInformation_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* joinedMBMSBearerService-IEs */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_CNMBMSLinkingInformation_specs_1 = {
+	sizeof(struct RANAP_CNMBMSLinkingInformation),
+	offsetof(struct RANAP_CNMBMSLinkingInformation, _asn_ctx),
+	asn_MAP_RANAP_CNMBMSLinkingInformation_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_CNMBMSLinkingInformation_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_CNMBMSLinkingInformation = {
+	"RANAP_CNMBMSLinkingInformation",
+	"RANAP_CNMBMSLinkingInformation",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1,
+	sizeof(asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1)
+		/sizeof(asn_DEF_RANAP_CNMBMSLinkingInformation_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_CNMBMSLinkingInformation_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_CNMBMSLinkingInformation_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_CNMBMSLinkingInformation.h b/src/ranap/RANAP_CNMBMSLinkingInformation.h
new file mode 100644
index 0000000..36de68d
--- /dev/null
+++ b/src/ranap/RANAP_CNMBMSLinkingInformation.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_CNMBMSLinkingInformation_H_
+#define	_RANAP_CNMBMSLinkingInformation_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_JoinedMBMSBearerService-IEs.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_CNMBMSLinkingInformation */
+typedef struct RANAP_CNMBMSLinkingInformation {
+	RANAP_JoinedMBMSBearerService_IEs_t	 joinedMBMSBearerService_IEs;
+	RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_CNMBMSLinkingInformation_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_CNMBMSLinkingInformation;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_CNMBMSLinkingInformation_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_CriticalityDiagnostics-IE-List.c b/src/ranap/RANAP_CriticalityDiagnostics-IE-List.c
index 4574a99..48f6e1a 100644
--- a/src/ranap/RANAP_CriticalityDiagnostics-IE-List.c
+++ b/src/ranap/RANAP_CriticalityDiagnostics-IE-List.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, iECriticality),
+static asn_TYPE_member_t asn_MBR_MemberG_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberG, iECriticality),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_Criticality,
@@ -21,7 +21,7 @@
 		0,
 		"iECriticality"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, iE_ID),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberG, iE_ID),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ProtocolIE_ID,
@@ -30,7 +30,7 @@
 		0,
 		"iE-ID"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, repetitionNumber),
+	{ ATF_POINTER, 2, offsetof(struct MemberG, repetitionNumber),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_RepetitionNumber0,
@@ -39,7 +39,7 @@
 		0,
 		"repetitionNumber"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberG, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -49,28 +49,28 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 2, 3 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberG_oms_2[] = { 2, 3 };
+static const ber_tlv_tag_t asn_DEF_MemberG_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberG_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iECriticality */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* iE-ID */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* repetitionNumber */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberG_specs_2 = {
+	sizeof(struct MemberG),
+	offsetof(struct MemberG, _asn_ctx),
+	asn_MAP_MemberG_tag2el_2,
 	4,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberG_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	3,	/* Start extensions */
 	5	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberG_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -85,23 +85,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberG_tags_2,
+	sizeof(asn_DEF_MemberG_tags_2)
+		/sizeof(asn_DEF_MemberG_tags_2[0]), /* 1 */
+	asn_DEF_MemberG_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberG_tags_2)
+		/sizeof(asn_DEF_MemberG_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberG_2,
 	4,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberG_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_CriticalityDiagnostics_IE_List_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberG_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_CriticalityDiagnostics-IE-List.h b/src/ranap/RANAP_CriticalityDiagnostics-IE-List.h
index cba5bbd..eedb874 100644
--- a/src/ranap/RANAP_CriticalityDiagnostics-IE-List.h
+++ b/src/ranap/RANAP_CriticalityDiagnostics-IE-List.h
@@ -25,7 +25,7 @@
 
 /* RANAP_CriticalityDiagnostics-IE-List */
 typedef struct RANAP_CriticalityDiagnostics_IE_List {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberG {
 		RANAP_Criticality_t	 iECriticality;
 		RANAP_ProtocolIE_ID_t	 iE_ID;
 		RANAP_RepetitionNumber0_t	*repetitionNumber	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_DataVolumeList.c b/src/ranap/RANAP_DataVolumeList.c
index 1d14cf1..c0ea960 100644
--- a/src/ranap/RANAP_DataVolumeList.c
+++ b/src/ranap/RANAP_DataVolumeList.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 1,  1,  1l,  2l }	/* (SIZE(1..2)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, dl_UnsuccessfullyTransmittedDataVolume),
+static asn_TYPE_member_t asn_MBR_MemberH_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberH, dl_UnsuccessfullyTransmittedDataVolume),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_UnsuccessfullyTransmittedDataVolume,
@@ -21,7 +21,7 @@
 		0,
 		"dl-UnsuccessfullyTransmittedDataVolume"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, dataVolumeReference),
+	{ ATF_POINTER, 2, offsetof(struct MemberH, dataVolumeReference),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_DataVolumeReference,
@@ -30,7 +30,7 @@
 		0,
 		"dataVolumeReference"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberH, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ProtocolExtensionContainer,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberH_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberH_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberH_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-UnsuccessfullyTransmittedDataVolume */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dataVolumeReference */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberH_specs_2 = {
+	sizeof(struct MemberH),
+	offsetof(struct MemberH, _asn_ctx),
+	asn_MAP_MemberH_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberH_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberH_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberH_tags_2,
+	sizeof(asn_DEF_MemberH_tags_2)
+		/sizeof(asn_DEF_MemberH_tags_2[0]), /* 1 */
+	asn_DEF_MemberH_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberH_tags_2)
+		/sizeof(asn_DEF_MemberH_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberH_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberH_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_DataVolumeList_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberH_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_DataVolumeList.h b/src/ranap/RANAP_DataVolumeList.h
index be86aaa..2bb3904 100644
--- a/src/ranap/RANAP_DataVolumeList.h
+++ b/src/ranap/RANAP_DataVolumeList.h
@@ -24,7 +24,7 @@
 
 /* RANAP_DataVolumeList */
 typedef struct RANAP_DataVolumeList {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberH {
 		RANAP_UnsuccessfullyTransmittedDataVolume_t	 dl_UnsuccessfullyTransmittedDataVolume;
 		RANAP_DataVolumeReference_t	*dataVolumeReference	/* OPTIONAL */;
 		RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_DirectTransfer-IE-ContainerList.c b/src/ranap/RANAP_DirectTransfer-IE-ContainerList.c
new file mode 100644
index 0000000..eef89f1
--- /dev/null
+++ b/src/ranap/RANAP_DirectTransfer-IE-ContainerList.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_DirectTransfer-IE-ContainerList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_DirectTransfer_IE_ContainerList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 4,  4,  1l,  15l }	/* (SIZE(1..15)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_DirectTransfer_IE_ContainerList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_Container,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_DirectTransfer_IE_ContainerList_specs_1 = {
+	sizeof(struct RANAP_DirectTransfer_IE_ContainerList),
+	offsetof(struct RANAP_DirectTransfer_IE_ContainerList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_DirectTransfer_IE_ContainerList = {
+	"RANAP_DirectTransfer-IE-ContainerList",
+	"RANAP_DirectTransfer-IE-ContainerList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1,
+	sizeof(asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_DirectTransfer_IE_ContainerList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_DirectTransfer_IE_ContainerList_constr_1,
+	asn_MBR_RANAP_DirectTransfer_IE_ContainerList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_DirectTransfer_IE_ContainerList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_DirectTransfer-IE-ContainerList.h b/src/ranap/RANAP_DirectTransfer-IE-ContainerList.h
new file mode 100644
index 0000000..6c0f787
--- /dev/null
+++ b/src/ranap/RANAP_DirectTransfer-IE-ContainerList.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_DirectTransfer_IE_ContainerList_H_
+#define	_RANAP_DirectTransfer_IE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-Container.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_DirectTransfer-IE-ContainerList */
+typedef struct RANAP_DirectTransfer_IE_ContainerList {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_Container_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_DirectTransfer_IE_ContainerList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_DirectTransfer_IE_ContainerList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_DirectTransfer_IE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_EUTRANFrequencies.c b/src/ranap/RANAP_EUTRANFrequencies.c
index 2420cd7..de668f5 100644
--- a/src/ranap/RANAP_EUTRANFrequencies.c
+++ b/src/ranap/RANAP_EUTRANFrequencies.c
@@ -41,8 +41,8 @@
 	{ APC_CONSTRAINED,	 3,  3,  1l,  8l }	/* (SIZE(1..8)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, earfcn),
+static asn_TYPE_member_t asn_MBR_MemberJ_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberJ, earfcn),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_NativeInteger,
@@ -51,7 +51,7 @@
 		0,
 		"earfcn"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, measBand),
+	{ ATF_POINTER, 2, offsetof(struct MemberJ, measBand),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_MeasBand,
@@ -60,7 +60,7 @@
 		0,
 		"measBand"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberJ, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -70,27 +70,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberJ_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberJ_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberJ_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* earfcn */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measBand */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberJ_specs_2 = {
+	sizeof(struct MemberJ),
+	offsetof(struct MemberJ, _asn_ctx),
+	asn_MAP_MemberJ_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberJ_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	-1,	/* Start extensions */
 	-1	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberJ_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -105,23 +105,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberJ_tags_2,
+	sizeof(asn_DEF_MemberJ_tags_2)
+		/sizeof(asn_DEF_MemberJ_tags_2[0]), /* 1 */
+	asn_DEF_MemberJ_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberJ_tags_2)
+		/sizeof(asn_DEF_MemberJ_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberJ_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberJ_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_EUTRANFrequencies_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberJ_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_EUTRANFrequencies.h b/src/ranap/RANAP_EUTRANFrequencies.h
index cc7588c..5f7cb33 100644
--- a/src/ranap/RANAP_EUTRANFrequencies.h
+++ b/src/ranap/RANAP_EUTRANFrequencies.h
@@ -24,7 +24,7 @@
 
 /* RANAP_EUTRANFrequencies */
 typedef struct RANAP_EUTRANFrequencies {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberJ {
 		long	 earfcn;
 		RANAP_MeasBand_t	*measBand	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.c b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.c
new file mode 100644
index 0000000..44920e7
--- /dev/null
+++ b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.h"
+
+static int
+memb_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_specs_2 = {
+	sizeof(struct geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies),
+	offsetof(struct geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_2 = {
+	"geraN-Iumode-RAB-Failed-RABAssgntResponse-List-ies",
+	"geraN-Iumode-RAB-Failed-RABAssgntResponse-List-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2,
+	sizeof(asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2)
+		/sizeof(asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2)
+		/sizeof(asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constr_2,
+	asn_MBR_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_2,
+	1,	/* Single element */
+	&asn_SPC_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List, geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_2,
+		memb_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constraint_1,
+		&asn_PER_memb_geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies_constr_2,
+		0,
+		"geraN-Iumode-RAB-Failed-RABAssgntResponse-List-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* geraN-Iumode-RAB-Failed-RABAssgntResponse-List-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_specs_1 = {
+	sizeof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List),
+	offsetof(struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List, _asn_ctx),
+	asn_MAP_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List = {
+	"RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List",
+	"RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1,
+	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1)
+		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1)
+		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.h b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.h
new file mode 100644
index 0000000..642a394
--- /dev/null
+++ b/src/ranap/RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List.h
@@ -0,0 +1,48 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_H_
+#define	_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_IE.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_GERAN-Iumode-RAB-Failed-RABAssgntResponse-List */
+typedef struct RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List {
+	struct geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies {
+		A_SEQUENCE_OF(RANAP_IE_t) list;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} geraN_Iumode_RAB_Failed_RABAssgntResponse_List_ies;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_GERAN_Iumode_RAB_Failed_RABAssgntResponse_List_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.c b/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.c
deleted file mode 100644
index 15ddafe..0000000
--- a/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
- * From ASN.1 module "RANAP-PDU"
- * 	found in "../../asn1/ranap/RANAP-PDU.asn"
- */
-
-#include "RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.h"
-
-static int
-memb_foo_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size <= 65535l)) {
-		/* Perform validation of the inner elements */
-		return td->check_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_per_constraints_t asn_PER_type_foo_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_per_constraints_t asn_PER_memb_foo_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_foo_ies_2[] = {
-	{ ATF_POINTER, 0, 0,
-		-1 /* Ambiguous tag (CHOICE?) */,
-		0,
-		&asn_DEF_RANAP_IE,
-		0,	/* Defer constraints checking to the member type */
-		0,	/* No PER visible constraints */
-		0,
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_foo_ies_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_foo_ies_specs_2 = {
-	sizeof(struct foo_ies),
-	offsetof(struct foo_ies, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_foo_ies_2 = {
-	"foo-ies",
-	"foo-ies",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_encode_xer,
-	SEQUENCE_OF_decode_uper,
-	SEQUENCE_OF_encode_uper,
-	SEQUENCE_OF_decode_aper,
-	SEQUENCE_OF_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_foo_ies_tags_2,
-	sizeof(asn_DEF_foo_ies_tags_2)
-		/sizeof(asn_DEF_foo_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_foo_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_foo_ies_tags_2)
-		/sizeof(asn_DEF_foo_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_foo_ies_constr_2,
-	asn_MBR_foo_ies_2,
-	1,	/* Single element */
-	&asn_SPC_foo_ies_specs_2	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse, foo_ies),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_foo_ies_2,
-		memb_foo_ies_constraint_1,
-		&asn_PER_memb_foo_ies_constr_2,
-		0,
-		"foo-ies"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* foo-ies */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_specs_1 = {
-	sizeof(struct RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse),
-	offsetof(struct RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse, _asn_ctx),
-	asn_MAP_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	0,	/* Start extensions */
-	2	/* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse = {
-	"RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse",
-	"RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	SEQUENCE_decode_aper,
-	SEQUENCE_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1,
-	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1)
-		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1[0]), /* 1 */
-	asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1)
-		/sizeof(asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_tags_1[0]), /* 1 */
-	0,	/* No PER visible constraints */
-	asn_MBR_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_1,
-	1,	/* Elements count */
-	&asn_SPC_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_specs_1	/* Additional specs */
-};
-
diff --git a/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.h b/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.h
deleted file mode 100644
index 0678df0..0000000
--- a/src/ranap/RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
- * From ASN.1 module "RANAP-PDU"
- * 	found in "../../asn1/ranap/RANAP-PDU.asn"
- */
-
-#ifndef	_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_H_
-#define	_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_H_
-
-
-#include <asn_application.h>
-
-/* Including external dependencies */
-#include "RANAP_IE.h"
-#include <asn_SEQUENCE_OF.h>
-#include <constr_SEQUENCE_OF.h>
-#include <constr_SEQUENCE.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* RANAP_GERAN-Iumode-RAB-FailedList-RABAssgntResponse */
-typedef struct RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse {
-	struct foo_ies {
-		A_SEQUENCE_OF(RANAP_IE_t) list;
-		
-		/* Context for parsing across buffer boundaries */
-		asn_struct_ctx_t _asn_ctx;
-	} foo_ies;
-	/*
-	 * This type is extensible,
-	 * possible extensions are below.
-	 */
-	
-	/* Context for parsing across buffer boundaries */
-	asn_struct_ctx_t _asn_ctx;
-} RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_t;
-
-/* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* _RANAP_GERAN_Iumode_RAB_FailedList_RABAssgntResponse_H_ */
-#include <asn_internal.h>
diff --git a/src/ranap/RANAP_IuSigConId-IE-ContainerList.c b/src/ranap/RANAP_IuSigConId-IE-ContainerList.c
new file mode 100644
index 0000000..0cdabd9
--- /dev/null
+++ b/src/ranap/RANAP_IuSigConId-IE-ContainerList.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_IuSigConId-IE-ContainerList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_IuSigConId_IE_ContainerList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1l,  250l }	/* (SIZE(1..250)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_IuSigConId_IE_ContainerList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_Container,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_IuSigConId_IE_ContainerList_specs_1 = {
+	sizeof(struct RANAP_IuSigConId_IE_ContainerList),
+	offsetof(struct RANAP_IuSigConId_IE_ContainerList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_IuSigConId_IE_ContainerList = {
+	"RANAP_IuSigConId-IE-ContainerList",
+	"RANAP_IuSigConId-IE-ContainerList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1,
+	sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_IuSigConId_IE_ContainerList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_IuSigConId_IE_ContainerList_constr_1,
+	asn_MBR_RANAP_IuSigConId_IE_ContainerList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_IuSigConId_IE_ContainerList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_IuSigConId-IE-ContainerList.h b/src/ranap/RANAP_IuSigConId-IE-ContainerList.h
new file mode 100644
index 0000000..c8a6026
--- /dev/null
+++ b/src/ranap/RANAP_IuSigConId-IE-ContainerList.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_IuSigConId_IE_ContainerList_H_
+#define	_RANAP_IuSigConId_IE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-Container.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_IuSigConId-IE-ContainerList */
+typedef struct RANAP_IuSigConId_IE_ContainerList {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_Container_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_IuSigConId_IE_ContainerList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_IuSigConId_IE_ContainerList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_IuSigConId_IE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_JoinedMBMSBearerService-IEs.c b/src/ranap/RANAP_JoinedMBMSBearerService-IEs.c
new file mode 100644
index 0000000..de8368d
--- /dev/null
+++ b/src/ranap/RANAP_JoinedMBMSBearerService-IEs.c
@@ -0,0 +1,135 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_JoinedMBMSBearerService-IEs.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_JoinedMBMSBearerService_IEs_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 7,  7,  1l,  128l }	/* (SIZE(1..128)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_MemberF_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberF, tMGI),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_TMGI,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"tMGI"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberF, mBMS_PTP_RAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_MBMS_PTP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"mBMS-PTP-RAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct MemberF, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_MemberF_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_MemberF_tags_2[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_MemberF_tag2el_2[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tMGI */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mBMS-PTP-RAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_MemberF_specs_2 = {
+	sizeof(struct MemberF),
+	offsetof(struct MemberF, _asn_ctx),
+	asn_MAP_MemberF_tag2el_2,
+	3,	/* Count of tags in the map */
+	asn_MAP_MemberF_oms_2,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	2,	/* Start extensions */
+	4	/* Stop extensions */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_MemberF_2 = {
+	"SEQUENCE",
+	"SEQUENCE",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_MemberF_tags_2,
+	sizeof(asn_DEF_MemberF_tags_2)
+		/sizeof(asn_DEF_MemberF_tags_2[0]), /* 1 */
+	asn_DEF_MemberF_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberF_tags_2)
+		/sizeof(asn_DEF_MemberF_tags_2[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_MemberF_2,
+	3,	/* Elements count */
+	&asn_SPC_MemberF_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_JoinedMBMSBearerService_IEs_1[] = {
+	{ ATF_POINTER, 0, 0,
+		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		0,
+		&asn_DEF_MemberF_2,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_JoinedMBMSBearerService_IEs_specs_1 = {
+	sizeof(struct RANAP_JoinedMBMSBearerService_IEs),
+	offsetof(struct RANAP_JoinedMBMSBearerService_IEs, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_JoinedMBMSBearerService_IEs = {
+	"RANAP_JoinedMBMSBearerService-IEs",
+	"RANAP_JoinedMBMSBearerService-IEs",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1,
+	sizeof(asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1)
+		/sizeof(asn_DEF_RANAP_JoinedMBMSBearerService_IEs_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_JoinedMBMSBearerService_IEs_constr_1,
+	asn_MBR_RANAP_JoinedMBMSBearerService_IEs_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_JoinedMBMSBearerService_IEs_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_JoinedMBMSBearerService-IEs.h b/src/ranap/RANAP_JoinedMBMSBearerService-IEs.h
new file mode 100644
index 0000000..40735c9
--- /dev/null
+++ b/src/ranap/RANAP_JoinedMBMSBearerService-IEs.h
@@ -0,0 +1,52 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_JoinedMBMSBearerService_IEs_H_
+#define	_RANAP_JoinedMBMSBearerService_IEs_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include <asn_SEQUENCE_OF.h>
+#include "RANAP_TMGI.h"
+#include "RANAP_MBMS-PTP-RAB-ID.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_JoinedMBMSBearerService-IEs */
+typedef struct RANAP_JoinedMBMSBearerService_IEs {
+	A_SEQUENCE_OF(struct MemberF {
+		RANAP_TMGI_t	 tMGI;
+		RANAP_MBMS_PTP_RAB_ID_t	 mBMS_PTP_RAB_ID;
+		RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} ) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_JoinedMBMSBearerService_IEs_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_JoinedMBMSBearerService_IEs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_JoinedMBMSBearerService_IEs_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_LeftMBMSBearerService-IEs.c b/src/ranap/RANAP_LeftMBMSBearerService-IEs.c
index a82558f..bb05bcc 100644
--- a/src/ranap/RANAP_LeftMBMSBearerService-IEs.c
+++ b/src/ranap/RANAP_LeftMBMSBearerService-IEs.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 7,  7,  1l,  128l }	/* (SIZE(1..128)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, tMGI),
+static asn_TYPE_member_t asn_MBR_MemberK_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberK, tMGI),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_TMGI,
@@ -21,7 +21,7 @@
 		0,
 		"tMGI"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberK, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ProtocolExtensionContainer,
@@ -31,26 +31,26 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberK_oms_2[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_MemberK_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberK_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tMGI */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberK_specs_2 = {
+	sizeof(struct MemberK),
+	offsetof(struct MemberK, _asn_ctx),
+	asn_MAP_MemberK_tag2el_2,
 	2,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberK_oms_2,	/* Optional members */
 	1, 0,	/* Root/Additions */
 	1,	/* Start extensions */
 	3	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberK_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -65,23 +65,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberK_tags_2,
+	sizeof(asn_DEF_MemberK_tags_2)
+		/sizeof(asn_DEF_MemberK_tags_2[0]), /* 1 */
+	asn_DEF_MemberK_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberK_tags_2)
+		/sizeof(asn_DEF_MemberK_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberK_2,
 	2,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberK_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_LeftMBMSBearerService_IEs_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberK_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_LeftMBMSBearerService-IEs.h b/src/ranap/RANAP_LeftMBMSBearerService-IEs.h
index 1f2bbf2..2318d2a 100644
--- a/src/ranap/RANAP_LeftMBMSBearerService-IEs.h
+++ b/src/ranap/RANAP_LeftMBMSBearerService-IEs.h
@@ -23,7 +23,7 @@
 
 /* RANAP_LeftMBMSBearerService-IEs */
 typedef struct RANAP_LeftMBMSBearerService_IEs {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberK {
 		RANAP_TMGI_t	 tMGI;
 		RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
 		/*
diff --git a/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.c b/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.c
index 4abe8f3..2dd53e3 100644
--- a/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.c
+++ b/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSCNDe-RegistrationRequest.h"
 
 static int
-memb_mBMSCNDe_RegistrationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmscnDe_RegistrationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSCNDe_RegistrationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmscnDe_RegistrationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSCNDe_RegistrationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmscnDe_RegistrationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSCNDe_RegistrationRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmscnDe_RegistrationRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSCNDe_RegistrationRequest_ies_specs_2 = {
-	sizeof(struct mBMSCNDe_RegistrationRequest_ies),
-	offsetof(struct mBMSCNDe_RegistrationRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmscnDe_RegistrationRequest_ies_specs_2 = {
+	sizeof(struct mbmscnDe_RegistrationRequest_ies),
+	offsetof(struct mbmscnDe_RegistrationRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSCNDe_RegistrationRequest_ies_2 = {
-	"mBMSCNDe-RegistrationRequest-ies",
-	"mBMSCNDe-RegistrationRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmscnDe_RegistrationRequest_ies_2 = {
+	"mbmscnDe-RegistrationRequest-ies",
+	"mbmscnDe-RegistrationRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2,
-	sizeof(asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSCNDe_RegistrationRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSCNDe_RegistrationRequest_ies_constr_2,
-	asn_MBR_mBMSCNDe_RegistrationRequest_ies_2,
+	asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2,
+	sizeof(asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmscnDe_RegistrationRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmscnDe_RegistrationRequest_ies_constr_2,
+	asn_MBR_mbmscnDe_RegistrationRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSCNDe_RegistrationRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmscnDe_RegistrationRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSCNDe_RegistrationRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSCNDe_RegistrationRequest, mBMSCNDe_RegistrationRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSCNDe_RegistrationRequest, mbmscnDe_RegistrationRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSCNDe_RegistrationRequest_ies_2,
-		memb_mBMSCNDe_RegistrationRequest_ies_constraint_1,
-		&asn_PER_memb_mBMSCNDe_RegistrationRequest_ies_constr_2,
+		&asn_DEF_mbmscnDe_RegistrationRequest_ies_2,
+		memb_mbmscnDe_RegistrationRequest_ies_constraint_1,
+		&asn_PER_memb_mbmscnDe_RegistrationRequest_ies_constr_2,
 		0,
-		"mBMSCNDe-RegistrationRequest-ies"
+		"mbmscnDe-RegistrationRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSCNDe_RegistrationRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSCNDe_RegistrationRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSCNDe-RegistrationRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmscnDe-RegistrationRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSCNDe_RegistrationRequest_specs_1 = {
 	sizeof(struct RANAP_MBMSCNDe_RegistrationRequest),
diff --git a/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.h b/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.h
index efe34e0..cf90123 100644
--- a/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.h
+++ b/src/ranap/RANAP_MBMSCNDe-RegistrationRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSCNDe-RegistrationRequest */
 typedef struct RANAP_MBMSCNDe_RegistrationRequest {
-	struct mBMSCNDe_RegistrationRequest_ies {
+	struct mbmscnDe_RegistrationRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSCNDe_RegistrationRequest_ies;
+	} mbmscnDe_RegistrationRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c
index 5bdbe6b..e499f54 100644
--- a/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c
+++ b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSCNDe-RegistrationResponse.h"
 
 static int
-memb_mBMSCNDe_RegistrationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmscnDe_RegistrationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSCNDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmscnDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSCNDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmscnDe_RegistrationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSCNDe_RegistrationResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmscnDe_RegistrationResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSCNDe_RegistrationResponse_ies_specs_2 = {
-	sizeof(struct mBMSCNDe_RegistrationResponse_ies),
-	offsetof(struct mBMSCNDe_RegistrationResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmscnDe_RegistrationResponse_ies_specs_2 = {
+	sizeof(struct mbmscnDe_RegistrationResponse_ies),
+	offsetof(struct mbmscnDe_RegistrationResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSCNDe_RegistrationResponse_ies_2 = {
-	"mBMSCNDe-RegistrationResponse-ies",
-	"mBMSCNDe-RegistrationResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmscnDe_RegistrationResponse_ies_2 = {
+	"mbmscnDe-RegistrationResponse-ies",
+	"mbmscnDe-RegistrationResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSCNDe_RegistrationResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSCNDe_RegistrationResponse_ies_constr_2,
-	asn_MBR_mBMSCNDe_RegistrationResponse_ies_2,
+	asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmscnDe_RegistrationResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmscnDe_RegistrationResponse_ies_constr_2,
+	asn_MBR_mbmscnDe_RegistrationResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSCNDe_RegistrationResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmscnDe_RegistrationResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSCNDe_RegistrationResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSCNDe_RegistrationResponse, mBMSCNDe_RegistrationResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSCNDe_RegistrationResponse, mbmscnDe_RegistrationResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSCNDe_RegistrationResponse_ies_2,
-		memb_mBMSCNDe_RegistrationResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSCNDe_RegistrationResponse_ies_constr_2,
+		&asn_DEF_mbmscnDe_RegistrationResponse_ies_2,
+		memb_mbmscnDe_RegistrationResponse_ies_constraint_1,
+		&asn_PER_memb_mbmscnDe_RegistrationResponse_ies_constr_2,
 		0,
-		"mBMSCNDe-RegistrationResponse-ies"
+		"mbmscnDe-RegistrationResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSCNDe_RegistrationResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSCNDe_RegistrationResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSCNDe-RegistrationResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmscnDe-RegistrationResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSCNDe_RegistrationResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSCNDe_RegistrationResponse),
diff --git a/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.h b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.h
index d9be786..cbbf256 100644
--- a/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.h
+++ b/src/ranap/RANAP_MBMSCNDe-RegistrationResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSCNDe-RegistrationResponse */
 typedef struct RANAP_MBMSCNDe_RegistrationResponse {
-	struct mBMSCNDe_RegistrationResponse_ies {
+	struct mbmscnDe_RegistrationResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSCNDe_RegistrationResponse_ies;
+	} mbmscnDe_RegistrationResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRABEstablishmentIndication.c b/src/ranap/RANAP_MBMSRABEstablishmentIndication.c
index 78c0ae0..f699ca8 100644
--- a/src/ranap/RANAP_MBMSRABEstablishmentIndication.c
+++ b/src/ranap/RANAP_MBMSRABEstablishmentIndication.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRABEstablishmentIndication.h"
 
 static int
-memb_mBMSRABEstablishmentIndication_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsrabEstablishmentIndication_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRABEstablishmentIndication_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsrabEstablishmentIndication_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRABEstablishmentIndication_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsrabEstablishmentIndication_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRABEstablishmentIndication_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsrabEstablishmentIndication_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRABEstablishmentIndication_ies_specs_2 = {
-	sizeof(struct mBMSRABEstablishmentIndication_ies),
-	offsetof(struct mBMSRABEstablishmentIndication_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsrabEstablishmentIndication_ies_specs_2 = {
+	sizeof(struct mbmsrabEstablishmentIndication_ies),
+	offsetof(struct mbmsrabEstablishmentIndication_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRABEstablishmentIndication_ies_2 = {
-	"mBMSRABEstablishmentIndication-ies",
-	"mBMSRABEstablishmentIndication-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsrabEstablishmentIndication_ies_2 = {
+	"mbmsrabEstablishmentIndication-ies",
+	"mbmsrabEstablishmentIndication-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2,
-	sizeof(asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABEstablishmentIndication_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRABEstablishmentIndication_ies_constr_2,
-	asn_MBR_mBMSRABEstablishmentIndication_ies_2,
+	asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2,
+	sizeof(asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabEstablishmentIndication_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsrabEstablishmentIndication_ies_constr_2,
+	asn_MBR_mbmsrabEstablishmentIndication_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRABEstablishmentIndication_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsrabEstablishmentIndication_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRABEstablishmentIndication_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABEstablishmentIndication, mBMSRABEstablishmentIndication_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABEstablishmentIndication, mbmsrabEstablishmentIndication_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRABEstablishmentIndication_ies_2,
-		memb_mBMSRABEstablishmentIndication_ies_constraint_1,
-		&asn_PER_memb_mBMSRABEstablishmentIndication_ies_constr_2,
+		&asn_DEF_mbmsrabEstablishmentIndication_ies_2,
+		memb_mbmsrabEstablishmentIndication_ies_constraint_1,
+		&asn_PER_memb_mbmsrabEstablishmentIndication_ies_constr_2,
 		0,
-		"mBMSRABEstablishmentIndication-ies"
+		"mbmsrabEstablishmentIndication-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRABEstablishmentIndication_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRABEstablishmentIndication_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRABEstablishmentIndication-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsrabEstablishmentIndication-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRABEstablishmentIndication_specs_1 = {
 	sizeof(struct RANAP_MBMSRABEstablishmentIndication),
diff --git a/src/ranap/RANAP_MBMSRABEstablishmentIndication.h b/src/ranap/RANAP_MBMSRABEstablishmentIndication.h
index 88972eb..74082d0 100644
--- a/src/ranap/RANAP_MBMSRABEstablishmentIndication.h
+++ b/src/ranap/RANAP_MBMSRABEstablishmentIndication.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRABEstablishmentIndication */
 typedef struct RANAP_MBMSRABEstablishmentIndication {
-	struct mBMSRABEstablishmentIndication_ies {
+	struct mbmsrabEstablishmentIndication_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRABEstablishmentIndication_ies;
+	} mbmsrabEstablishmentIndication_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRABRelease.c b/src/ranap/RANAP_MBMSRABRelease.c
index 8f29f6d..4c87f9a 100644
--- a/src/ranap/RANAP_MBMSRABRelease.c
+++ b/src/ranap/RANAP_MBMSRABRelease.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRABRelease.h"
 
 static int
-memb_mBMSRABRelease_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsrabRelease_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRABRelease_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsrabRelease_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRABRelease_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsrabRelease_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRABRelease_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsrabRelease_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRABRelease_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsrabRelease_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRABRelease_ies_specs_2 = {
-	sizeof(struct mBMSRABRelease_ies),
-	offsetof(struct mBMSRABRelease_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsrabRelease_ies_specs_2 = {
+	sizeof(struct mbmsrabRelease_ies),
+	offsetof(struct mbmsrabRelease_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRABRelease_ies_2 = {
-	"mBMSRABRelease-ies",
-	"mBMSRABRelease-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsrabRelease_ies_2 = {
+	"mbmsrabRelease-ies",
+	"mbmsrabRelease-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRABRelease_ies_tags_2,
-	sizeof(asn_DEF_mBMSRABRelease_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABRelease_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRABRelease_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRABRelease_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABRelease_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRABRelease_ies_constr_2,
-	asn_MBR_mBMSRABRelease_ies_2,
+	asn_DEF_mbmsrabRelease_ies_tags_2,
+	sizeof(asn_DEF_mbmsrabRelease_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabRelease_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsrabRelease_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsrabRelease_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabRelease_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsrabRelease_ies_constr_2,
+	asn_MBR_mbmsrabRelease_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRABRelease_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsrabRelease_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRABRelease_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABRelease, mBMSRABRelease_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABRelease, mbmsrabRelease_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRABRelease_ies_2,
-		memb_mBMSRABRelease_ies_constraint_1,
-		&asn_PER_memb_mBMSRABRelease_ies_constr_2,
+		&asn_DEF_mbmsrabRelease_ies_2,
+		memb_mbmsrabRelease_ies_constraint_1,
+		&asn_PER_memb_mbmsrabRelease_ies_constr_2,
 		0,
-		"mBMSRABRelease-ies"
+		"mbmsrabRelease-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRABRelease_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRABRelease_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRABRelease-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsrabRelease-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRABRelease_specs_1 = {
 	sizeof(struct RANAP_MBMSRABRelease),
diff --git a/src/ranap/RANAP_MBMSRABRelease.h b/src/ranap/RANAP_MBMSRABRelease.h
index db2b5e9..5e5440b 100644
--- a/src/ranap/RANAP_MBMSRABRelease.h
+++ b/src/ranap/RANAP_MBMSRABRelease.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRABRelease */
 typedef struct RANAP_MBMSRABRelease {
-	struct mBMSRABRelease_ies {
+	struct mbmsrabRelease_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRABRelease_ies;
+	} mbmsrabRelease_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRABReleaseFailure.c b/src/ranap/RANAP_MBMSRABReleaseFailure.c
index e6c73f3..40568ff 100644
--- a/src/ranap/RANAP_MBMSRABReleaseFailure.c
+++ b/src/ranap/RANAP_MBMSRABReleaseFailure.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRABReleaseFailure.h"
 
 static int
-memb_mBMSRABReleaseFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsrabReleaseFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRABReleaseFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsrabReleaseFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRABReleaseFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsrabReleaseFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRABReleaseFailure_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsrabReleaseFailure_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRABReleaseFailure_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsrabReleaseFailure_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRABReleaseFailure_ies_specs_2 = {
-	sizeof(struct mBMSRABReleaseFailure_ies),
-	offsetof(struct mBMSRABReleaseFailure_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsrabReleaseFailure_ies_specs_2 = {
+	sizeof(struct mbmsrabReleaseFailure_ies),
+	offsetof(struct mbmsrabReleaseFailure_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRABReleaseFailure_ies_2 = {
-	"mBMSRABReleaseFailure-ies",
-	"mBMSRABReleaseFailure-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsrabReleaseFailure_ies_2 = {
+	"mbmsrabReleaseFailure-ies",
+	"mbmsrabReleaseFailure-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRABReleaseFailure_ies_tags_2,
-	sizeof(asn_DEF_mBMSRABReleaseFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABReleaseFailure_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRABReleaseFailure_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRABReleaseFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABReleaseFailure_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRABReleaseFailure_ies_constr_2,
-	asn_MBR_mBMSRABReleaseFailure_ies_2,
+	asn_DEF_mbmsrabReleaseFailure_ies_tags_2,
+	sizeof(asn_DEF_mbmsrabReleaseFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabReleaseFailure_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsrabReleaseFailure_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsrabReleaseFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabReleaseFailure_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsrabReleaseFailure_ies_constr_2,
+	asn_MBR_mbmsrabReleaseFailure_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRABReleaseFailure_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsrabReleaseFailure_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRABReleaseFailure_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABReleaseFailure, mBMSRABReleaseFailure_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABReleaseFailure, mbmsrabReleaseFailure_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRABReleaseFailure_ies_2,
-		memb_mBMSRABReleaseFailure_ies_constraint_1,
-		&asn_PER_memb_mBMSRABReleaseFailure_ies_constr_2,
+		&asn_DEF_mbmsrabReleaseFailure_ies_2,
+		memb_mbmsrabReleaseFailure_ies_constraint_1,
+		&asn_PER_memb_mbmsrabReleaseFailure_ies_constr_2,
 		0,
-		"mBMSRABReleaseFailure-ies"
+		"mbmsrabReleaseFailure-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRABReleaseFailure_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRABReleaseFailure_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRABReleaseFailure-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsrabReleaseFailure-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRABReleaseFailure_specs_1 = {
 	sizeof(struct RANAP_MBMSRABReleaseFailure),
diff --git a/src/ranap/RANAP_MBMSRABReleaseFailure.h b/src/ranap/RANAP_MBMSRABReleaseFailure.h
index b3ec38b..84f7089 100644
--- a/src/ranap/RANAP_MBMSRABReleaseFailure.h
+++ b/src/ranap/RANAP_MBMSRABReleaseFailure.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRABReleaseFailure */
 typedef struct RANAP_MBMSRABReleaseFailure {
-	struct mBMSRABReleaseFailure_ies {
+	struct mbmsrabReleaseFailure_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRABReleaseFailure_ies;
+	} mbmsrabReleaseFailure_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRABReleaseRequest.c b/src/ranap/RANAP_MBMSRABReleaseRequest.c
index 0de4127..09cd869 100644
--- a/src/ranap/RANAP_MBMSRABReleaseRequest.c
+++ b/src/ranap/RANAP_MBMSRABReleaseRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRABReleaseRequest.h"
 
 static int
-memb_mBMSRABReleaseRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsrabReleaseRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRABReleaseRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsrabReleaseRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRABReleaseRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsrabReleaseRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRABReleaseRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsrabReleaseRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRABReleaseRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsrabReleaseRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRABReleaseRequest_ies_specs_2 = {
-	sizeof(struct mBMSRABReleaseRequest_ies),
-	offsetof(struct mBMSRABReleaseRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsrabReleaseRequest_ies_specs_2 = {
+	sizeof(struct mbmsrabReleaseRequest_ies),
+	offsetof(struct mbmsrabReleaseRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRABReleaseRequest_ies_2 = {
-	"mBMSRABReleaseRequest-ies",
-	"mBMSRABReleaseRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsrabReleaseRequest_ies_2 = {
+	"mbmsrabReleaseRequest-ies",
+	"mbmsrabReleaseRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRABReleaseRequest_ies_tags_2,
-	sizeof(asn_DEF_mBMSRABReleaseRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABReleaseRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRABReleaseRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRABReleaseRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRABReleaseRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRABReleaseRequest_ies_constr_2,
-	asn_MBR_mBMSRABReleaseRequest_ies_2,
+	asn_DEF_mbmsrabReleaseRequest_ies_tags_2,
+	sizeof(asn_DEF_mbmsrabReleaseRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabReleaseRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsrabReleaseRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsrabReleaseRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsrabReleaseRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsrabReleaseRequest_ies_constr_2,
+	asn_MBR_mbmsrabReleaseRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRABReleaseRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsrabReleaseRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRABReleaseRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABReleaseRequest, mBMSRABReleaseRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRABReleaseRequest, mbmsrabReleaseRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRABReleaseRequest_ies_2,
-		memb_mBMSRABReleaseRequest_ies_constraint_1,
-		&asn_PER_memb_mBMSRABReleaseRequest_ies_constr_2,
+		&asn_DEF_mbmsrabReleaseRequest_ies_2,
+		memb_mbmsrabReleaseRequest_ies_constraint_1,
+		&asn_PER_memb_mbmsrabReleaseRequest_ies_constr_2,
 		0,
-		"mBMSRABReleaseRequest-ies"
+		"mbmsrabReleaseRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRABReleaseRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRABReleaseRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRABReleaseRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsrabReleaseRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRABReleaseRequest_specs_1 = {
 	sizeof(struct RANAP_MBMSRABReleaseRequest),
diff --git a/src/ranap/RANAP_MBMSRABReleaseRequest.h b/src/ranap/RANAP_MBMSRABReleaseRequest.h
index 6f9d34a..e033d39 100644
--- a/src/ranap/RANAP_MBMSRABReleaseRequest.h
+++ b/src/ranap/RANAP_MBMSRABReleaseRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRABReleaseRequest */
 typedef struct RANAP_MBMSRABReleaseRequest {
-	struct mBMSRABReleaseRequest_ies {
+	struct mbmsrabReleaseRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRABReleaseRequest_ies;
+	} mbmsrabReleaseRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRegistrationFailure.c b/src/ranap/RANAP_MBMSRegistrationFailure.c
index f6a7301..084d213 100644
--- a/src/ranap/RANAP_MBMSRegistrationFailure.c
+++ b/src/ranap/RANAP_MBMSRegistrationFailure.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRegistrationFailure.h"
 
 static int
-memb_mBMSRegistrationFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsRegistrationFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRegistrationFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsRegistrationFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRegistrationFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsRegistrationFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRegistrationFailure_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsRegistrationFailure_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRegistrationFailure_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsRegistrationFailure_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRegistrationFailure_ies_specs_2 = {
-	sizeof(struct mBMSRegistrationFailure_ies),
-	offsetof(struct mBMSRegistrationFailure_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsRegistrationFailure_ies_specs_2 = {
+	sizeof(struct mbmsRegistrationFailure_ies),
+	offsetof(struct mbmsRegistrationFailure_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRegistrationFailure_ies_2 = {
-	"mBMSRegistrationFailure-ies",
-	"mBMSRegistrationFailure-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsRegistrationFailure_ies_2 = {
+	"mbmsRegistrationFailure-ies",
+	"mbmsRegistrationFailure-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRegistrationFailure_ies_tags_2,
-	sizeof(asn_DEF_mBMSRegistrationFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationFailure_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRegistrationFailure_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRegistrationFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationFailure_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRegistrationFailure_ies_constr_2,
-	asn_MBR_mBMSRegistrationFailure_ies_2,
+	asn_DEF_mbmsRegistrationFailure_ies_tags_2,
+	sizeof(asn_DEF_mbmsRegistrationFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationFailure_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsRegistrationFailure_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsRegistrationFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationFailure_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsRegistrationFailure_ies_constr_2,
+	asn_MBR_mbmsRegistrationFailure_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRegistrationFailure_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsRegistrationFailure_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRegistrationFailure_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationFailure, mBMSRegistrationFailure_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationFailure, mbmsRegistrationFailure_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRegistrationFailure_ies_2,
-		memb_mBMSRegistrationFailure_ies_constraint_1,
-		&asn_PER_memb_mBMSRegistrationFailure_ies_constr_2,
+		&asn_DEF_mbmsRegistrationFailure_ies_2,
+		memb_mbmsRegistrationFailure_ies_constraint_1,
+		&asn_PER_memb_mbmsRegistrationFailure_ies_constr_2,
 		0,
-		"mBMSRegistrationFailure-ies"
+		"mbmsRegistrationFailure-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRegistrationFailure_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRegistrationFailure_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRegistrationFailure-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsRegistrationFailure-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRegistrationFailure_specs_1 = {
 	sizeof(struct RANAP_MBMSRegistrationFailure),
diff --git a/src/ranap/RANAP_MBMSRegistrationFailure.h b/src/ranap/RANAP_MBMSRegistrationFailure.h
index 2d673fc..8f84c6f 100644
--- a/src/ranap/RANAP_MBMSRegistrationFailure.h
+++ b/src/ranap/RANAP_MBMSRegistrationFailure.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRegistrationFailure */
 typedef struct RANAP_MBMSRegistrationFailure {
-	struct mBMSRegistrationFailure_ies {
+	struct mbmsRegistrationFailure_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRegistrationFailure_ies;
+	} mbmsRegistrationFailure_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRegistrationRequest.c b/src/ranap/RANAP_MBMSRegistrationRequest.c
index d70890a..e2e66b3 100644
--- a/src/ranap/RANAP_MBMSRegistrationRequest.c
+++ b/src/ranap/RANAP_MBMSRegistrationRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRegistrationRequest.h"
 
 static int
-memb_mBMSRegistrationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsRegistrationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRegistrationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsRegistrationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRegistrationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsRegistrationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRegistrationRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsRegistrationRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRegistrationRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsRegistrationRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRegistrationRequest_ies_specs_2 = {
-	sizeof(struct mBMSRegistrationRequest_ies),
-	offsetof(struct mBMSRegistrationRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsRegistrationRequest_ies_specs_2 = {
+	sizeof(struct mbmsRegistrationRequest_ies),
+	offsetof(struct mbmsRegistrationRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRegistrationRequest_ies_2 = {
-	"mBMSRegistrationRequest-ies",
-	"mBMSRegistrationRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsRegistrationRequest_ies_2 = {
+	"mbmsRegistrationRequest-ies",
+	"mbmsRegistrationRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRegistrationRequest_ies_tags_2,
-	sizeof(asn_DEF_mBMSRegistrationRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRegistrationRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRegistrationRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRegistrationRequest_ies_constr_2,
-	asn_MBR_mBMSRegistrationRequest_ies_2,
+	asn_DEF_mbmsRegistrationRequest_ies_tags_2,
+	sizeof(asn_DEF_mbmsRegistrationRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsRegistrationRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsRegistrationRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsRegistrationRequest_ies_constr_2,
+	asn_MBR_mbmsRegistrationRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRegistrationRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsRegistrationRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRegistrationRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationRequest, mBMSRegistrationRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationRequest, mbmsRegistrationRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRegistrationRequest_ies_2,
-		memb_mBMSRegistrationRequest_ies_constraint_1,
-		&asn_PER_memb_mBMSRegistrationRequest_ies_constr_2,
+		&asn_DEF_mbmsRegistrationRequest_ies_2,
+		memb_mbmsRegistrationRequest_ies_constraint_1,
+		&asn_PER_memb_mbmsRegistrationRequest_ies_constr_2,
 		0,
-		"mBMSRegistrationRequest-ies"
+		"mbmsRegistrationRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRegistrationRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRegistrationRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRegistrationRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsRegistrationRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRegistrationRequest_specs_1 = {
 	sizeof(struct RANAP_MBMSRegistrationRequest),
diff --git a/src/ranap/RANAP_MBMSRegistrationRequest.h b/src/ranap/RANAP_MBMSRegistrationRequest.h
index 5138504..81b5714 100644
--- a/src/ranap/RANAP_MBMSRegistrationRequest.h
+++ b/src/ranap/RANAP_MBMSRegistrationRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRegistrationRequest */
 typedef struct RANAP_MBMSRegistrationRequest {
-	struct mBMSRegistrationRequest_ies {
+	struct mbmsRegistrationRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRegistrationRequest_ies;
+	} mbmsRegistrationRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSRegistrationResponse.c b/src/ranap/RANAP_MBMSRegistrationResponse.c
index 72ead77..f0001f1 100644
--- a/src/ranap/RANAP_MBMSRegistrationResponse.c
+++ b/src/ranap/RANAP_MBMSRegistrationResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSRegistrationResponse.h"
 
 static int
-memb_mBMSRegistrationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsRegistrationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSRegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsRegistrationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSRegistrationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsRegistrationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSRegistrationResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsRegistrationResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSRegistrationResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsRegistrationResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSRegistrationResponse_ies_specs_2 = {
-	sizeof(struct mBMSRegistrationResponse_ies),
-	offsetof(struct mBMSRegistrationResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsRegistrationResponse_ies_specs_2 = {
+	sizeof(struct mbmsRegistrationResponse_ies),
+	offsetof(struct mbmsRegistrationResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSRegistrationResponse_ies_2 = {
-	"mBMSRegistrationResponse-ies",
-	"mBMSRegistrationResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsRegistrationResponse_ies_2 = {
+	"mbmsRegistrationResponse-ies",
+	"mbmsRegistrationResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSRegistrationResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSRegistrationResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSRegistrationResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSRegistrationResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSRegistrationResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSRegistrationResponse_ies_constr_2,
-	asn_MBR_mBMSRegistrationResponse_ies_2,
+	asn_DEF_mbmsRegistrationResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmsRegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsRegistrationResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsRegistrationResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsRegistrationResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsRegistrationResponse_ies_constr_2,
+	asn_MBR_mbmsRegistrationResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSRegistrationResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsRegistrationResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSRegistrationResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationResponse, mBMSRegistrationResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSRegistrationResponse, mbmsRegistrationResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSRegistrationResponse_ies_2,
-		memb_mBMSRegistrationResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSRegistrationResponse_ies_constr_2,
+		&asn_DEF_mbmsRegistrationResponse_ies_2,
+		memb_mbmsRegistrationResponse_ies_constraint_1,
+		&asn_PER_memb_mbmsRegistrationResponse_ies_constr_2,
 		0,
-		"mBMSRegistrationResponse-ies"
+		"mbmsRegistrationResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSRegistrationResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSRegistrationResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSRegistrationResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsRegistrationResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSRegistrationResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSRegistrationResponse),
diff --git a/src/ranap/RANAP_MBMSRegistrationResponse.h b/src/ranap/RANAP_MBMSRegistrationResponse.h
index e83af69..b29d90b 100644
--- a/src/ranap/RANAP_MBMSRegistrationResponse.h
+++ b/src/ranap/RANAP_MBMSRegistrationResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSRegistrationResponse */
 typedef struct RANAP_MBMSRegistrationResponse {
-	struct mBMSRegistrationResponse_ies {
+	struct mbmsRegistrationResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSRegistrationResponse_ies;
+	} mbmsRegistrationResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionStart.c b/src/ranap/RANAP_MBMSSessionStart.c
index 507e9a4..e4ff756 100644
--- a/src/ranap/RANAP_MBMSSessionStart.c
+++ b/src/ranap/RANAP_MBMSSessionStart.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionStart.h"
 
 static int
-memb_mBMSSessionStart_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionStart_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionStart_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionStart_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionStart_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionStart_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionStart_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionStart_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionStart_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionStart_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionStart_ies_specs_2 = {
-	sizeof(struct mBMSSessionStart_ies),
-	offsetof(struct mBMSSessionStart_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionStart_ies_specs_2 = {
+	sizeof(struct mbmsSessionStart_ies),
+	offsetof(struct mbmsSessionStart_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionStart_ies_2 = {
-	"mBMSSessionStart-ies",
-	"mBMSSessionStart-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionStart_ies_2 = {
+	"mbmsSessionStart-ies",
+	"mbmsSessionStart-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionStart_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionStart_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStart_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionStart_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionStart_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStart_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionStart_ies_constr_2,
-	asn_MBR_mBMSSessionStart_ies_2,
+	asn_DEF_mbmsSessionStart_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionStart_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStart_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionStart_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionStart_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStart_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionStart_ies_constr_2,
+	asn_MBR_mbmsSessionStart_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionStart_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionStart_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionStart_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStart, mBMSSessionStart_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStart, mbmsSessionStart_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionStart_ies_2,
-		memb_mBMSSessionStart_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionStart_ies_constr_2,
+		&asn_DEF_mbmsSessionStart_ies_2,
+		memb_mbmsSessionStart_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionStart_ies_constr_2,
 		0,
-		"mBMSSessionStart-ies"
+		"mbmsSessionStart-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionStart_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionStart_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionStart-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionStart-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionStart_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionStart),
diff --git a/src/ranap/RANAP_MBMSSessionStart.h b/src/ranap/RANAP_MBMSSessionStart.h
index 4f3fa13..c076a4c 100644
--- a/src/ranap/RANAP_MBMSSessionStart.h
+++ b/src/ranap/RANAP_MBMSSessionStart.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionStart */
 typedef struct RANAP_MBMSSessionStart {
-	struct mBMSSessionStart_ies {
+	struct mbmsSessionStart_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionStart_ies;
+	} mbmsSessionStart_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionStartFailure.c b/src/ranap/RANAP_MBMSSessionStartFailure.c
index 01f2af8..3170c10 100644
--- a/src/ranap/RANAP_MBMSSessionStartFailure.c
+++ b/src/ranap/RANAP_MBMSSessionStartFailure.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionStartFailure.h"
 
 static int
-memb_mBMSSessionStartFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionStartFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionStartFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionStartFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionStartFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionStartFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionStartFailure_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionStartFailure_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionStartFailure_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionStartFailure_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionStartFailure_ies_specs_2 = {
-	sizeof(struct mBMSSessionStartFailure_ies),
-	offsetof(struct mBMSSessionStartFailure_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionStartFailure_ies_specs_2 = {
+	sizeof(struct mbmsSessionStartFailure_ies),
+	offsetof(struct mbmsSessionStartFailure_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionStartFailure_ies_2 = {
-	"mBMSSessionStartFailure-ies",
-	"mBMSSessionStartFailure-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionStartFailure_ies_2 = {
+	"mbmsSessionStartFailure-ies",
+	"mbmsSessionStartFailure-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionStartFailure_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionStartFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStartFailure_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionStartFailure_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionStartFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStartFailure_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionStartFailure_ies_constr_2,
-	asn_MBR_mBMSSessionStartFailure_ies_2,
+	asn_DEF_mbmsSessionStartFailure_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionStartFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStartFailure_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionStartFailure_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionStartFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStartFailure_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionStartFailure_ies_constr_2,
+	asn_MBR_mbmsSessionStartFailure_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionStartFailure_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionStartFailure_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionStartFailure_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStartFailure, mBMSSessionStartFailure_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStartFailure, mbmsSessionStartFailure_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionStartFailure_ies_2,
-		memb_mBMSSessionStartFailure_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionStartFailure_ies_constr_2,
+		&asn_DEF_mbmsSessionStartFailure_ies_2,
+		memb_mbmsSessionStartFailure_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionStartFailure_ies_constr_2,
 		0,
-		"mBMSSessionStartFailure-ies"
+		"mbmsSessionStartFailure-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionStartFailure_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionStartFailure_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionStartFailure-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionStartFailure-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionStartFailure_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionStartFailure),
diff --git a/src/ranap/RANAP_MBMSSessionStartFailure.h b/src/ranap/RANAP_MBMSSessionStartFailure.h
index ba73d35..09f5c6c 100644
--- a/src/ranap/RANAP_MBMSSessionStartFailure.h
+++ b/src/ranap/RANAP_MBMSSessionStartFailure.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionStartFailure */
 typedef struct RANAP_MBMSSessionStartFailure {
-	struct mBMSSessionStartFailure_ies {
+	struct mbmsSessionStartFailure_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionStartFailure_ies;
+	} mbmsSessionStartFailure_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionStartResponse.c b/src/ranap/RANAP_MBMSSessionStartResponse.c
index 5fea9b4..24f467a 100644
--- a/src/ranap/RANAP_MBMSSessionStartResponse.c
+++ b/src/ranap/RANAP_MBMSSessionStartResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionStartResponse.h"
 
 static int
-memb_mBMSSessionStartResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionStartResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionStartResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionStartResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionStartResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionStartResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionStartResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionStartResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionStartResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionStartResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionStartResponse_ies_specs_2 = {
-	sizeof(struct mBMSSessionStartResponse_ies),
-	offsetof(struct mBMSSessionStartResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionStartResponse_ies_specs_2 = {
+	sizeof(struct mbmsSessionStartResponse_ies),
+	offsetof(struct mbmsSessionStartResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionStartResponse_ies_2 = {
-	"mBMSSessionStartResponse-ies",
-	"mBMSSessionStartResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionStartResponse_ies_2 = {
+	"mbmsSessionStartResponse-ies",
+	"mbmsSessionStartResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionStartResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionStartResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStartResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionStartResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionStartResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStartResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionStartResponse_ies_constr_2,
-	asn_MBR_mBMSSessionStartResponse_ies_2,
+	asn_DEF_mbmsSessionStartResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionStartResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStartResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionStartResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionStartResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStartResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionStartResponse_ies_constr_2,
+	asn_MBR_mbmsSessionStartResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionStartResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionStartResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionStartResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStartResponse, mBMSSessionStartResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStartResponse, mbmsSessionStartResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionStartResponse_ies_2,
-		memb_mBMSSessionStartResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionStartResponse_ies_constr_2,
+		&asn_DEF_mbmsSessionStartResponse_ies_2,
+		memb_mbmsSessionStartResponse_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionStartResponse_ies_constr_2,
 		0,
-		"mBMSSessionStartResponse-ies"
+		"mbmsSessionStartResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionStartResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionStartResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionStartResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionStartResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionStartResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionStartResponse),
diff --git a/src/ranap/RANAP_MBMSSessionStartResponse.h b/src/ranap/RANAP_MBMSSessionStartResponse.h
index ebad774..2373cad 100644
--- a/src/ranap/RANAP_MBMSSessionStartResponse.h
+++ b/src/ranap/RANAP_MBMSSessionStartResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionStartResponse */
 typedef struct RANAP_MBMSSessionStartResponse {
-	struct mBMSSessionStartResponse_ies {
+	struct mbmsSessionStartResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionStartResponse_ies;
+	} mbmsSessionStartResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionStop.c b/src/ranap/RANAP_MBMSSessionStop.c
index 1797bea..01220ad 100644
--- a/src/ranap/RANAP_MBMSSessionStop.c
+++ b/src/ranap/RANAP_MBMSSessionStop.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionStop.h"
 
 static int
-memb_mBMSSessionStop_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionStop_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionStop_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionStop_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionStop_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionStop_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionStop_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionStop_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionStop_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionStop_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionStop_ies_specs_2 = {
-	sizeof(struct mBMSSessionStop_ies),
-	offsetof(struct mBMSSessionStop_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionStop_ies_specs_2 = {
+	sizeof(struct mbmsSessionStop_ies),
+	offsetof(struct mbmsSessionStop_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionStop_ies_2 = {
-	"mBMSSessionStop-ies",
-	"mBMSSessionStop-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionStop_ies_2 = {
+	"mbmsSessionStop-ies",
+	"mbmsSessionStop-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionStop_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionStop_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStop_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionStop_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionStop_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStop_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionStop_ies_constr_2,
-	asn_MBR_mBMSSessionStop_ies_2,
+	asn_DEF_mbmsSessionStop_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionStop_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStop_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionStop_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionStop_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStop_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionStop_ies_constr_2,
+	asn_MBR_mbmsSessionStop_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionStop_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionStop_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionStop_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStop, mBMSSessionStop_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStop, mbmsSessionStop_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionStop_ies_2,
-		memb_mBMSSessionStop_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionStop_ies_constr_2,
+		&asn_DEF_mbmsSessionStop_ies_2,
+		memb_mbmsSessionStop_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionStop_ies_constr_2,
 		0,
-		"mBMSSessionStop-ies"
+		"mbmsSessionStop-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionStop_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionStop_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionStop-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionStop-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionStop_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionStop),
diff --git a/src/ranap/RANAP_MBMSSessionStop.h b/src/ranap/RANAP_MBMSSessionStop.h
index eb4cc1a..2ac62f9 100644
--- a/src/ranap/RANAP_MBMSSessionStop.h
+++ b/src/ranap/RANAP_MBMSSessionStop.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionStop */
 typedef struct RANAP_MBMSSessionStop {
-	struct mBMSSessionStop_ies {
+	struct mbmsSessionStop_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionStop_ies;
+	} mbmsSessionStop_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionStopResponse.c b/src/ranap/RANAP_MBMSSessionStopResponse.c
index a1730f5..d84e94c 100644
--- a/src/ranap/RANAP_MBMSSessionStopResponse.c
+++ b/src/ranap/RANAP_MBMSSessionStopResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionStopResponse.h"
 
 static int
-memb_mBMSSessionStopResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionStopResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionStopResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionStopResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionStopResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionStopResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionStopResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionStopResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionStopResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionStopResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionStopResponse_ies_specs_2 = {
-	sizeof(struct mBMSSessionStopResponse_ies),
-	offsetof(struct mBMSSessionStopResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionStopResponse_ies_specs_2 = {
+	sizeof(struct mbmsSessionStopResponse_ies),
+	offsetof(struct mbmsSessionStopResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionStopResponse_ies_2 = {
-	"mBMSSessionStopResponse-ies",
-	"mBMSSessionStopResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionStopResponse_ies_2 = {
+	"mbmsSessionStopResponse-ies",
+	"mbmsSessionStopResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionStopResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionStopResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStopResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionStopResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionStopResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionStopResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionStopResponse_ies_constr_2,
-	asn_MBR_mBMSSessionStopResponse_ies_2,
+	asn_DEF_mbmsSessionStopResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionStopResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStopResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionStopResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionStopResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionStopResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionStopResponse_ies_constr_2,
+	asn_MBR_mbmsSessionStopResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionStopResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionStopResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionStopResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStopResponse, mBMSSessionStopResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionStopResponse, mbmsSessionStopResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionStopResponse_ies_2,
-		memb_mBMSSessionStopResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionStopResponse_ies_constr_2,
+		&asn_DEF_mbmsSessionStopResponse_ies_2,
+		memb_mbmsSessionStopResponse_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionStopResponse_ies_constr_2,
 		0,
-		"mBMSSessionStopResponse-ies"
+		"mbmsSessionStopResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionStopResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionStopResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionStopResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionStopResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionStopResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionStopResponse),
diff --git a/src/ranap/RANAP_MBMSSessionStopResponse.h b/src/ranap/RANAP_MBMSSessionStopResponse.h
index 1cfc02e..5aeb6e5 100644
--- a/src/ranap/RANAP_MBMSSessionStopResponse.h
+++ b/src/ranap/RANAP_MBMSSessionStopResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionStopResponse */
 typedef struct RANAP_MBMSSessionStopResponse {
-	struct mBMSSessionStopResponse_ies {
+	struct mbmsSessionStopResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionStopResponse_ies;
+	} mbmsSessionStopResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionUpdate.c b/src/ranap/RANAP_MBMSSessionUpdate.c
index 6d84b28..018680b 100644
--- a/src/ranap/RANAP_MBMSSessionUpdate.c
+++ b/src/ranap/RANAP_MBMSSessionUpdate.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionUpdate.h"
 
 static int
-memb_mBMSSessionUpdate_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionUpdate_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionUpdate_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionUpdate_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionUpdate_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionUpdate_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionUpdate_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionUpdate_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionUpdate_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionUpdate_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionUpdate_ies_specs_2 = {
-	sizeof(struct mBMSSessionUpdate_ies),
-	offsetof(struct mBMSSessionUpdate_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionUpdate_ies_specs_2 = {
+	sizeof(struct mbmsSessionUpdate_ies),
+	offsetof(struct mbmsSessionUpdate_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionUpdate_ies_2 = {
-	"mBMSSessionUpdate-ies",
-	"mBMSSessionUpdate-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionUpdate_ies_2 = {
+	"mbmsSessionUpdate-ies",
+	"mbmsSessionUpdate-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionUpdate_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionUpdate_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdate_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionUpdate_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionUpdate_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdate_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionUpdate_ies_constr_2,
-	asn_MBR_mBMSSessionUpdate_ies_2,
+	asn_DEF_mbmsSessionUpdate_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionUpdate_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdate_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionUpdate_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionUpdate_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdate_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionUpdate_ies_constr_2,
+	asn_MBR_mbmsSessionUpdate_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionUpdate_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionUpdate_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionUpdate_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdate, mBMSSessionUpdate_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdate, mbmsSessionUpdate_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionUpdate_ies_2,
-		memb_mBMSSessionUpdate_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionUpdate_ies_constr_2,
+		&asn_DEF_mbmsSessionUpdate_ies_2,
+		memb_mbmsSessionUpdate_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionUpdate_ies_constr_2,
 		0,
-		"mBMSSessionUpdate-ies"
+		"mbmsSessionUpdate-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionUpdate_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionUpdate_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionUpdate-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionUpdate-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionUpdate_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionUpdate),
diff --git a/src/ranap/RANAP_MBMSSessionUpdate.h b/src/ranap/RANAP_MBMSSessionUpdate.h
index 515544b..30eaeb4 100644
--- a/src/ranap/RANAP_MBMSSessionUpdate.h
+++ b/src/ranap/RANAP_MBMSSessionUpdate.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionUpdate */
 typedef struct RANAP_MBMSSessionUpdate {
-	struct mBMSSessionUpdate_ies {
+	struct mbmsSessionUpdate_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionUpdate_ies;
+	} mbmsSessionUpdate_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionUpdateFailure.c b/src/ranap/RANAP_MBMSSessionUpdateFailure.c
index 392de3a..c1a3f1a 100644
--- a/src/ranap/RANAP_MBMSSessionUpdateFailure.c
+++ b/src/ranap/RANAP_MBMSSessionUpdateFailure.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionUpdateFailure.h"
 
 static int
-memb_mBMSSessionUpdateFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionUpdateFailure_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionUpdateFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionUpdateFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionUpdateFailure_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionUpdateFailure_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionUpdateFailure_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionUpdateFailure_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionUpdateFailure_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionUpdateFailure_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionUpdateFailure_ies_specs_2 = {
-	sizeof(struct mBMSSessionUpdateFailure_ies),
-	offsetof(struct mBMSSessionUpdateFailure_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionUpdateFailure_ies_specs_2 = {
+	sizeof(struct mbmsSessionUpdateFailure_ies),
+	offsetof(struct mbmsSessionUpdateFailure_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionUpdateFailure_ies_2 = {
-	"mBMSSessionUpdateFailure-ies",
-	"mBMSSessionUpdateFailure-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionUpdateFailure_ies_2 = {
+	"mbmsSessionUpdateFailure-ies",
+	"mbmsSessionUpdateFailure-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionUpdateFailure_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionUpdateFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdateFailure_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionUpdateFailure_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionUpdateFailure_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdateFailure_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionUpdateFailure_ies_constr_2,
-	asn_MBR_mBMSSessionUpdateFailure_ies_2,
+	asn_DEF_mbmsSessionUpdateFailure_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionUpdateFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdateFailure_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionUpdateFailure_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionUpdateFailure_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdateFailure_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionUpdateFailure_ies_constr_2,
+	asn_MBR_mbmsSessionUpdateFailure_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionUpdateFailure_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionUpdateFailure_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionUpdateFailure_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdateFailure, mBMSSessionUpdateFailure_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdateFailure, mbmsSessionUpdateFailure_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionUpdateFailure_ies_2,
-		memb_mBMSSessionUpdateFailure_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionUpdateFailure_ies_constr_2,
+		&asn_DEF_mbmsSessionUpdateFailure_ies_2,
+		memb_mbmsSessionUpdateFailure_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionUpdateFailure_ies_constr_2,
 		0,
-		"mBMSSessionUpdateFailure-ies"
+		"mbmsSessionUpdateFailure-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionUpdateFailure_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionUpdateFailure_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionUpdateFailure-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionUpdateFailure-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionUpdateFailure_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionUpdateFailure),
diff --git a/src/ranap/RANAP_MBMSSessionUpdateFailure.h b/src/ranap/RANAP_MBMSSessionUpdateFailure.h
index 2913926..7368574 100644
--- a/src/ranap/RANAP_MBMSSessionUpdateFailure.h
+++ b/src/ranap/RANAP_MBMSSessionUpdateFailure.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionUpdateFailure */
 typedef struct RANAP_MBMSSessionUpdateFailure {
-	struct mBMSSessionUpdateFailure_ies {
+	struct mbmsSessionUpdateFailure_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionUpdateFailure_ies;
+	} mbmsSessionUpdateFailure_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSSessionUpdateResponse.c b/src/ranap/RANAP_MBMSSessionUpdateResponse.c
index 5c30885..f24c3fc 100644
--- a/src/ranap/RANAP_MBMSSessionUpdateResponse.c
+++ b/src/ranap/RANAP_MBMSSessionUpdateResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSSessionUpdateResponse.h"
 
 static int
-memb_mBMSSessionUpdateResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsSessionUpdateResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSSessionUpdateResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsSessionUpdateResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSSessionUpdateResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsSessionUpdateResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSSessionUpdateResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsSessionUpdateResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSSessionUpdateResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsSessionUpdateResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSSessionUpdateResponse_ies_specs_2 = {
-	sizeof(struct mBMSSessionUpdateResponse_ies),
-	offsetof(struct mBMSSessionUpdateResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsSessionUpdateResponse_ies_specs_2 = {
+	sizeof(struct mbmsSessionUpdateResponse_ies),
+	offsetof(struct mbmsSessionUpdateResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSSessionUpdateResponse_ies_2 = {
-	"mBMSSessionUpdateResponse-ies",
-	"mBMSSessionUpdateResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsSessionUpdateResponse_ies_2 = {
+	"mbmsSessionUpdateResponse-ies",
+	"mbmsSessionUpdateResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSSessionUpdateResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSSessionUpdateResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdateResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSSessionUpdateResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSSessionUpdateResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSSessionUpdateResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSSessionUpdateResponse_ies_constr_2,
-	asn_MBR_mBMSSessionUpdateResponse_ies_2,
+	asn_DEF_mbmsSessionUpdateResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmsSessionUpdateResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdateResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsSessionUpdateResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsSessionUpdateResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsSessionUpdateResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsSessionUpdateResponse_ies_constr_2,
+	asn_MBR_mbmsSessionUpdateResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSSessionUpdateResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsSessionUpdateResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSSessionUpdateResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdateResponse, mBMSSessionUpdateResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSSessionUpdateResponse, mbmsSessionUpdateResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSSessionUpdateResponse_ies_2,
-		memb_mBMSSessionUpdateResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSSessionUpdateResponse_ies_constr_2,
+		&asn_DEF_mbmsSessionUpdateResponse_ies_2,
+		memb_mbmsSessionUpdateResponse_ies_constraint_1,
+		&asn_PER_memb_mbmsSessionUpdateResponse_ies_constr_2,
 		0,
-		"mBMSSessionUpdateResponse-ies"
+		"mbmsSessionUpdateResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSSessionUpdateResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSSessionUpdateResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSSessionUpdateResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsSessionUpdateResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSSessionUpdateResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSSessionUpdateResponse),
diff --git a/src/ranap/RANAP_MBMSSessionUpdateResponse.h b/src/ranap/RANAP_MBMSSessionUpdateResponse.h
index 95d0f7f..a2f8949 100644
--- a/src/ranap/RANAP_MBMSSessionUpdateResponse.h
+++ b/src/ranap/RANAP_MBMSSessionUpdateResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSSessionUpdateResponse */
 typedef struct RANAP_MBMSSessionUpdateResponse {
-	struct mBMSSessionUpdateResponse_ies {
+	struct mbmsSessionUpdateResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSSessionUpdateResponse_ies;
+	} mbmsSessionUpdateResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSUELinkingRequest.c b/src/ranap/RANAP_MBMSUELinkingRequest.c
index 3f5e152..782b992 100644
--- a/src/ranap/RANAP_MBMSUELinkingRequest.c
+++ b/src/ranap/RANAP_MBMSUELinkingRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSUELinkingRequest.h"
 
 static int
-memb_mBMSUELinkingRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsueLinkingRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSUELinkingRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsueLinkingRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSUELinkingRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsueLinkingRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSUELinkingRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsueLinkingRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSUELinkingRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsueLinkingRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSUELinkingRequest_ies_specs_2 = {
-	sizeof(struct mBMSUELinkingRequest_ies),
-	offsetof(struct mBMSUELinkingRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsueLinkingRequest_ies_specs_2 = {
+	sizeof(struct mbmsueLinkingRequest_ies),
+	offsetof(struct mbmsueLinkingRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSUELinkingRequest_ies_2 = {
-	"mBMSUELinkingRequest-ies",
-	"mBMSUELinkingRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsueLinkingRequest_ies_2 = {
+	"mbmsueLinkingRequest-ies",
+	"mbmsueLinkingRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSUELinkingRequest_ies_tags_2,
-	sizeof(asn_DEF_mBMSUELinkingRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSUELinkingRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSUELinkingRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSUELinkingRequest_ies_tags_2)
-		/sizeof(asn_DEF_mBMSUELinkingRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSUELinkingRequest_ies_constr_2,
-	asn_MBR_mBMSUELinkingRequest_ies_2,
+	asn_DEF_mbmsueLinkingRequest_ies_tags_2,
+	sizeof(asn_DEF_mbmsueLinkingRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsueLinkingRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsueLinkingRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsueLinkingRequest_ies_tags_2)
+		/sizeof(asn_DEF_mbmsueLinkingRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsueLinkingRequest_ies_constr_2,
+	asn_MBR_mbmsueLinkingRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSUELinkingRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsueLinkingRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSUELinkingRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSUELinkingRequest, mBMSUELinkingRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSUELinkingRequest, mbmsueLinkingRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSUELinkingRequest_ies_2,
-		memb_mBMSUELinkingRequest_ies_constraint_1,
-		&asn_PER_memb_mBMSUELinkingRequest_ies_constr_2,
+		&asn_DEF_mbmsueLinkingRequest_ies_2,
+		memb_mbmsueLinkingRequest_ies_constraint_1,
+		&asn_PER_memb_mbmsueLinkingRequest_ies_constr_2,
 		0,
-		"mBMSUELinkingRequest-ies"
+		"mbmsueLinkingRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSUELinkingRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSUELinkingRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSUELinkingRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsueLinkingRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSUELinkingRequest_specs_1 = {
 	sizeof(struct RANAP_MBMSUELinkingRequest),
diff --git a/src/ranap/RANAP_MBMSUELinkingRequest.h b/src/ranap/RANAP_MBMSUELinkingRequest.h
index 7f99842..756beb2 100644
--- a/src/ranap/RANAP_MBMSUELinkingRequest.h
+++ b/src/ranap/RANAP_MBMSUELinkingRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSUELinkingRequest */
 typedef struct RANAP_MBMSUELinkingRequest {
-	struct mBMSUELinkingRequest_ies {
+	struct mbmsueLinkingRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSUELinkingRequest_ies;
+	} mbmsueLinkingRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MBMSUELinkingResponse.c b/src/ranap/RANAP_MBMSUELinkingResponse.c
index 9f04128..bc93df5 100644
--- a/src/ranap/RANAP_MBMSUELinkingResponse.c
+++ b/src/ranap/RANAP_MBMSUELinkingResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_MBMSUELinkingResponse.h"
 
 static int
-memb_mBMSUELinkingResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_mbmsueLinkingResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_mBMSUELinkingResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_mbmsueLinkingResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_mBMSUELinkingResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_mbmsueLinkingResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_mBMSUELinkingResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_mbmsueLinkingResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_mBMSUELinkingResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_mbmsueLinkingResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_mBMSUELinkingResponse_ies_specs_2 = {
-	sizeof(struct mBMSUELinkingResponse_ies),
-	offsetof(struct mBMSUELinkingResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_mbmsueLinkingResponse_ies_specs_2 = {
+	sizeof(struct mbmsueLinkingResponse_ies),
+	offsetof(struct mbmsueLinkingResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_mBMSUELinkingResponse_ies_2 = {
-	"mBMSUELinkingResponse-ies",
-	"mBMSUELinkingResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_mbmsueLinkingResponse_ies_2 = {
+	"mbmsueLinkingResponse-ies",
+	"mbmsueLinkingResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_mBMSUELinkingResponse_ies_tags_2,
-	sizeof(asn_DEF_mBMSUELinkingResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSUELinkingResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_mBMSUELinkingResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_mBMSUELinkingResponse_ies_tags_2)
-		/sizeof(asn_DEF_mBMSUELinkingResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_mBMSUELinkingResponse_ies_constr_2,
-	asn_MBR_mBMSUELinkingResponse_ies_2,
+	asn_DEF_mbmsueLinkingResponse_ies_tags_2,
+	sizeof(asn_DEF_mbmsueLinkingResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsueLinkingResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_mbmsueLinkingResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_mbmsueLinkingResponse_ies_tags_2)
+		/sizeof(asn_DEF_mbmsueLinkingResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_mbmsueLinkingResponse_ies_constr_2,
+	asn_MBR_mbmsueLinkingResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_mBMSUELinkingResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_mbmsueLinkingResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MBMSUELinkingResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSUELinkingResponse, mBMSUELinkingResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_MBMSUELinkingResponse, mbmsueLinkingResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_mBMSUELinkingResponse_ies_2,
-		memb_mBMSUELinkingResponse_ies_constraint_1,
-		&asn_PER_memb_mBMSUELinkingResponse_ies_constr_2,
+		&asn_DEF_mbmsueLinkingResponse_ies_2,
+		memb_mbmsueLinkingResponse_ies_constraint_1,
+		&asn_PER_memb_mbmsueLinkingResponse_ies_constr_2,
 		0,
-		"mBMSUELinkingResponse-ies"
+		"mbmsueLinkingResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_MBMSUELinkingResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_MBMSUELinkingResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mBMSUELinkingResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsueLinkingResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_MBMSUELinkingResponse_specs_1 = {
 	sizeof(struct RANAP_MBMSUELinkingResponse),
diff --git a/src/ranap/RANAP_MBMSUELinkingResponse.h b/src/ranap/RANAP_MBMSUELinkingResponse.h
index c68c1c4..4908e8a 100644
--- a/src/ranap/RANAP_MBMSUELinkingResponse.h
+++ b/src/ranap/RANAP_MBMSUELinkingResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_MBMSUELinkingResponse */
 typedef struct RANAP_MBMSUELinkingResponse {
-	struct mBMSUELinkingResponse_ies {
+	struct mbmsueLinkingResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} mBMSUELinkingResponse_ies;
+	} mbmsueLinkingResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_MessageStructure.c b/src/ranap/RANAP_MessageStructure.c
index e41b0da..5667399 100644
--- a/src/ranap/RANAP_MessageStructure.c
+++ b/src/ranap/RANAP_MessageStructure.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, iE_ID),
+static asn_TYPE_member_t asn_MBR_MemberL_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberL, iE_ID),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ProtocolIE_ID,
@@ -21,7 +21,7 @@
 		0,
 		"iE-ID"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, repetitionNumber),
+	{ ATF_POINTER, 2, offsetof(struct MemberL, repetitionNumber),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_RepetitionNumber1,
@@ -30,7 +30,7 @@
 		0,
 		"repetitionNumber"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberL, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberL_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberL_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberL_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* iE-ID */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* repetitionNumber */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberL_specs_2 = {
+	sizeof(struct MemberL),
+	offsetof(struct MemberL, _asn_ctx),
+	asn_MAP_MemberL_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberL_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberL_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberL_tags_2,
+	sizeof(asn_DEF_MemberL_tags_2)
+		/sizeof(asn_DEF_MemberL_tags_2[0]), /* 1 */
+	asn_DEF_MemberL_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberL_tags_2)
+		/sizeof(asn_DEF_MemberL_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberL_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberL_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_MessageStructure_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberL_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_MessageStructure.h b/src/ranap/RANAP_MessageStructure.h
index d1f2829..fb925a7 100644
--- a/src/ranap/RANAP_MessageStructure.h
+++ b/src/ranap/RANAP_MessageStructure.h
@@ -24,7 +24,7 @@
 
 /* RANAP_MessageStructure */
 typedef struct RANAP_MessageStructure {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberL {
 		RANAP_ProtocolIE_ID_t	 iE_ID;
 		RANAP_RepetitionNumber1_t	*repetitionNumber	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_PLMNs-in-shared-network.c b/src/ranap/RANAP_PLMNs-in-shared-network.c
index 4611d8a..6b022e9 100644
--- a/src/ranap/RANAP_PLMNs-in-shared-network.c
+++ b/src/ranap/RANAP_PLMNs-in-shared-network.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 5,  5,  1l,  32l }	/* (SIZE(1..32)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, pLMNidentity),
+static asn_TYPE_member_t asn_MBR_MemberM_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberM, pLMNidentity),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_PLMNidentity,
@@ -21,7 +21,7 @@
 		0,
 		"pLMNidentity"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, lA_LIST),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberM, lA_LIST),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_LA_LIST,
@@ -30,7 +30,7 @@
 		0,
 		"lA-LIST"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberM, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberM_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_MemberM_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberM_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pLMNidentity */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* lA-LIST */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberM_specs_2 = {
+	sizeof(struct MemberM),
+	offsetof(struct MemberM, _asn_ctx),
+	asn_MAP_MemberM_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberM_oms_2,	/* Optional members */
 	1, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberM_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberM_tags_2,
+	sizeof(asn_DEF_MemberM_tags_2)
+		/sizeof(asn_DEF_MemberM_tags_2[0]), /* 1 */
+	asn_DEF_MemberM_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberM_tags_2)
+		/sizeof(asn_DEF_MemberM_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberM_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberM_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_PLMNs_in_shared_network_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberM_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_PLMNs-in-shared-network.h b/src/ranap/RANAP_PLMNs-in-shared-network.h
index 512e0fc..7fc3511 100644
--- a/src/ranap/RANAP_PLMNs-in-shared-network.h
+++ b/src/ranap/RANAP_PLMNs-in-shared-network.h
@@ -24,7 +24,7 @@
 
 /* RANAP_PLMNs-in-shared-network */
 typedef struct RANAP_PLMNs_in_shared_network {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberM {
 		RANAP_PLMNidentity_t	 pLMNidentity;
 		RANAP_LA_LIST_t	 lA_LIST;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_ProtocolError-IE-ContainerList.c b/src/ranap/RANAP_ProtocolError-IE-ContainerList.c
new file mode 100644
index 0000000..6737b16
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolError-IE-ContainerList.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolError-IE-ContainerList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_ProtocolError_IE_ContainerList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolError_IE_ContainerList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_Container,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_ProtocolError_IE_ContainerList_specs_1 = {
+	sizeof(struct RANAP_ProtocolError_IE_ContainerList),
+	offsetof(struct RANAP_ProtocolError_IE_ContainerList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolError_IE_ContainerList = {
+	"RANAP_ProtocolError-IE-ContainerList",
+	"RANAP_ProtocolError-IE-ContainerList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolError_IE_ContainerList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_ProtocolError_IE_ContainerList_constr_1,
+	asn_MBR_RANAP_ProtocolError_IE_ContainerList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_ProtocolError_IE_ContainerList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolError-IE-ContainerList.h b/src/ranap/RANAP_ProtocolError-IE-ContainerList.h
new file mode 100644
index 0000000..f6878f1
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolError-IE-ContainerList.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_ProtocolError_IE_ContainerList_H_
+#define	_RANAP_ProtocolError_IE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-Container.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolError-IE-ContainerList */
+typedef struct RANAP_ProtocolError_IE_ContainerList {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_Container_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolError_IE_ContainerList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolError_IE_ContainerList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolError_IE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ProtocolIE-Container.c b/src/ranap/RANAP_ProtocolIE-Container.c
new file mode 100644
index 0000000..74f371f
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-Container.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolIE-Container.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_ProtocolIE_Container_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolIE_Container_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolIE_Container_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_ProtocolIE_Container_specs_1 = {
+	sizeof(struct RANAP_ProtocolIE_Container),
+	offsetof(struct RANAP_ProtocolIE_Container, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_Container = {
+	"RANAP_ProtocolIE-Container",
+	"RANAP_ProtocolIE-Container",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolIE_Container_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolIE_Container_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_Container_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolIE_Container_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolIE_Container_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_Container_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_ProtocolIE_Container_constr_1,
+	asn_MBR_RANAP_ProtocolIE_Container_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_ProtocolIE_Container_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolIE-Container.h b/src/ranap/RANAP_ProtocolIE-Container.h
new file mode 100644
index 0000000..2878963
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-Container.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_ProtocolIE_Container_H_
+#define	_RANAP_ProtocolIE_Container_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_IE.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolIE-Container */
+typedef struct RANAP_ProtocolIE_Container {
+	A_SEQUENCE_OF(RANAP_IE_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolIE_Container_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_Container;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolIE_Container_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ProtocolIE-ContainerPair.c b/src/ranap/RANAP_ProtocolIE-ContainerPair.c
new file mode 100644
index 0000000..f6b7722
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-ContainerPair.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolIE-ContainerPair.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_ProtocolIE_ContainerPair_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolIE_ContainerPair_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_FieldPair,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_ProtocolIE_ContainerPair_specs_1 = {
+	sizeof(struct RANAP_ProtocolIE_ContainerPair),
+	offsetof(struct RANAP_ProtocolIE_ContainerPair, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_ContainerPair = {
+	"RANAP_ProtocolIE-ContainerPair",
+	"RANAP_ProtocolIE-ContainerPair",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_ContainerPair_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_ProtocolIE_ContainerPair_constr_1,
+	asn_MBR_RANAP_ProtocolIE_ContainerPair_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_ProtocolIE_ContainerPair_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolIE-ContainerPair.h b/src/ranap/RANAP_ProtocolIE-ContainerPair.h
new file mode 100644
index 0000000..c3f961b
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-ContainerPair.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_ProtocolIE_ContainerPair_H_
+#define	_RANAP_ProtocolIE_ContainerPair_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-FieldPair.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolIE-ContainerPair */
+typedef struct RANAP_ProtocolIE_ContainerPair {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_FieldPair_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolIE_ContainerPair_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_ContainerPair;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolIE_ContainerPair_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_ProtocolIE-FieldPair.c b/src/ranap/RANAP_ProtocolIE-FieldPair.c
new file mode 100644
index 0000000..aa3031b
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-FieldPair.c
@@ -0,0 +1,101 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_ProtocolIE-FieldPair.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_ProtocolIE_FieldPair_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolIE_FieldPair, id),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolIE_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"id"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolIE_FieldPair, firstCriticality),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Criticality,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"firstCriticality"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolIE_FieldPair, firstValue),
+		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ANY,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"firstValue"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolIE_FieldPair, secondCriticality),
+		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_Criticality,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"secondCriticality"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ProtocolIE_FieldPair, secondValue),
+		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
+		+1,	/* EXPLICIT tag at current level */
+		&asn_DEF_ANY,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"secondValue"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ProtocolIE_FieldPair_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* id */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* firstCriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* firstValue */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* secondCriticality */
+    { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* secondValue */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ProtocolIE_FieldPair_specs_1 = {
+	sizeof(struct RANAP_ProtocolIE_FieldPair),
+	offsetof(struct RANAP_ProtocolIE_FieldPair, _asn_ctx),
+	asn_MAP_RANAP_ProtocolIE_FieldPair_tag2el_1,
+	5,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_FieldPair = {
+	"RANAP_ProtocolIE-FieldPair",
+	"RANAP_ProtocolIE-FieldPair",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1,
+	sizeof(asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1)
+		/sizeof(asn_DEF_RANAP_ProtocolIE_FieldPair_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ProtocolIE_FieldPair_1,
+	5,	/* Elements count */
+	&asn_SPC_RANAP_ProtocolIE_FieldPair_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_ProtocolIE-FieldPair.h b/src/ranap/RANAP_ProtocolIE-FieldPair.h
new file mode 100644
index 0000000..6a290e5
--- /dev/null
+++ b/src/ranap/RANAP_ProtocolIE-FieldPair.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_ProtocolIE_FieldPair_H_
+#define	_RANAP_ProtocolIE_FieldPair_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-ID.h"
+#include "RANAP_Criticality.h"
+#include <ANY.h>
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_ProtocolIE-FieldPair */
+typedef struct RANAP_ProtocolIE_FieldPair {
+	RANAP_ProtocolIE_ID_t	 id;
+	RANAP_Criticality_t	 firstCriticality;
+	ANY_t	 firstValue;
+	RANAP_Criticality_t	 secondCriticality;
+	ANY_t	 secondValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_ProtocolIE_FieldPair_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ProtocolIE_FieldPair;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_ProtocolIE_FieldPair_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-AssignmentRequest.c b/src/ranap/RANAP_RAB-AssignmentRequest.c
index 6d5c90e..640f619 100644
--- a/src/ranap/RANAP_RAB-AssignmentRequest.c
+++ b/src/ranap/RANAP_RAB-AssignmentRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-AssignmentRequest.h"
 
 static int
-memb_rAB_AssignmentRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_AssignmentRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rAB_AssignmentRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_AssignmentRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rAB_AssignmentRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_AssignmentRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rAB_AssignmentRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_AssignmentRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rAB_AssignmentRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_AssignmentRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rAB_AssignmentRequest_ies_specs_2 = {
-	sizeof(struct rAB_AssignmentRequest_ies),
-	offsetof(struct rAB_AssignmentRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_AssignmentRequest_ies_specs_2 = {
+	sizeof(struct raB_AssignmentRequest_ies),
+	offsetof(struct raB_AssignmentRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rAB_AssignmentRequest_ies_2 = {
-	"rAB-AssignmentRequest-ies",
-	"rAB-AssignmentRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_AssignmentRequest_ies_2 = {
+	"raB-AssignmentRequest-ies",
+	"raB-AssignmentRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rAB_AssignmentRequest_ies_tags_2,
-	sizeof(asn_DEF_rAB_AssignmentRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_AssignmentRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rAB_AssignmentRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rAB_AssignmentRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_AssignmentRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rAB_AssignmentRequest_ies_constr_2,
-	asn_MBR_rAB_AssignmentRequest_ies_2,
+	asn_DEF_raB_AssignmentRequest_ies_tags_2,
+	sizeof(asn_DEF_raB_AssignmentRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_AssignmentRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_AssignmentRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_AssignmentRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_AssignmentRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_AssignmentRequest_ies_constr_2,
+	asn_MBR_raB_AssignmentRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rAB_AssignmentRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_AssignmentRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_AssignmentRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_AssignmentRequest, rAB_AssignmentRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_AssignmentRequest, raB_AssignmentRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rAB_AssignmentRequest_ies_2,
-		memb_rAB_AssignmentRequest_ies_constraint_1,
-		&asn_PER_memb_rAB_AssignmentRequest_ies_constr_2,
+		&asn_DEF_raB_AssignmentRequest_ies_2,
+		memb_raB_AssignmentRequest_ies_constraint_1,
+		&asn_PER_memb_raB_AssignmentRequest_ies_constr_2,
 		0,
-		"rAB-AssignmentRequest-ies"
+		"raB-AssignmentRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_AssignmentRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_AssignmentRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rAB-AssignmentRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-AssignmentRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_AssignmentRequest_specs_1 = {
 	sizeof(struct RANAP_RAB_AssignmentRequest),
diff --git a/src/ranap/RANAP_RAB-AssignmentRequest.h b/src/ranap/RANAP_RAB-AssignmentRequest.h
index 60c84ac..5bd19e6 100644
--- a/src/ranap/RANAP_RAB-AssignmentRequest.h
+++ b/src/ranap/RANAP_RAB-AssignmentRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-AssignmentRequest */
 typedef struct RANAP_RAB_AssignmentRequest {
-	struct rAB_AssignmentRequest_ies {
+	struct raB_AssignmentRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rAB_AssignmentRequest_ies;
+	} raB_AssignmentRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-AssignmentResponse.c b/src/ranap/RANAP_RAB-AssignmentResponse.c
index a1565b1..b512579 100644
--- a/src/ranap/RANAP_RAB-AssignmentResponse.c
+++ b/src/ranap/RANAP_RAB-AssignmentResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-AssignmentResponse.h"
 
 static int
-memb_rAB_AssignmentResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_AssignmentResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rAB_AssignmentResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_AssignmentResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rAB_AssignmentResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_AssignmentResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rAB_AssignmentResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_AssignmentResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rAB_AssignmentResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_AssignmentResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rAB_AssignmentResponse_ies_specs_2 = {
-	sizeof(struct rAB_AssignmentResponse_ies),
-	offsetof(struct rAB_AssignmentResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_AssignmentResponse_ies_specs_2 = {
+	sizeof(struct raB_AssignmentResponse_ies),
+	offsetof(struct raB_AssignmentResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rAB_AssignmentResponse_ies_2 = {
-	"rAB-AssignmentResponse-ies",
-	"rAB-AssignmentResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_AssignmentResponse_ies_2 = {
+	"raB-AssignmentResponse-ies",
+	"raB-AssignmentResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rAB_AssignmentResponse_ies_tags_2,
-	sizeof(asn_DEF_rAB_AssignmentResponse_ies_tags_2)
-		/sizeof(asn_DEF_rAB_AssignmentResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rAB_AssignmentResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rAB_AssignmentResponse_ies_tags_2)
-		/sizeof(asn_DEF_rAB_AssignmentResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rAB_AssignmentResponse_ies_constr_2,
-	asn_MBR_rAB_AssignmentResponse_ies_2,
+	asn_DEF_raB_AssignmentResponse_ies_tags_2,
+	sizeof(asn_DEF_raB_AssignmentResponse_ies_tags_2)
+		/sizeof(asn_DEF_raB_AssignmentResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_AssignmentResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_AssignmentResponse_ies_tags_2)
+		/sizeof(asn_DEF_raB_AssignmentResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_AssignmentResponse_ies_constr_2,
+	asn_MBR_raB_AssignmentResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rAB_AssignmentResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_AssignmentResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_AssignmentResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_AssignmentResponse, rAB_AssignmentResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_AssignmentResponse, raB_AssignmentResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rAB_AssignmentResponse_ies_2,
-		memb_rAB_AssignmentResponse_ies_constraint_1,
-		&asn_PER_memb_rAB_AssignmentResponse_ies_constr_2,
+		&asn_DEF_raB_AssignmentResponse_ies_2,
+		memb_raB_AssignmentResponse_ies_constraint_1,
+		&asn_PER_memb_raB_AssignmentResponse_ies_constr_2,
 		0,
-		"rAB-AssignmentResponse-ies"
+		"raB-AssignmentResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_AssignmentResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_AssignmentResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rAB-AssignmentResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-AssignmentResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_AssignmentResponse_specs_1 = {
 	sizeof(struct RANAP_RAB_AssignmentResponse),
diff --git a/src/ranap/RANAP_RAB-AssignmentResponse.h b/src/ranap/RANAP_RAB-AssignmentResponse.h
index a7e7655..3376950 100644
--- a/src/ranap/RANAP_RAB-AssignmentResponse.h
+++ b/src/ranap/RANAP_RAB-AssignmentResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-AssignmentResponse */
 typedef struct RANAP_RAB_AssignmentResponse {
-	struct rAB_AssignmentResponse_ies {
+	struct raB_AssignmentResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rAB_AssignmentResponse_ies;
+	} raB_AssignmentResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ContextFailedtoTransferList.c b/src/ranap/RANAP_RAB-ContextFailedtoTransferList.c
deleted file mode 100644
index 836b5a5..0000000
--- a/src/ranap/RANAP_RAB-ContextFailedtoTransferList.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
- * From ASN.1 module "RANAP-PDU"
- * 	found in "../../asn1/ranap/RANAP-PDU.asn"
- */
-
-#include "RANAP_RAB-ContextFailedtoTransferList.h"
-
-static int
-memb_rabContextFailedtoTransferList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size <= 65535l)) {
-		/* Perform validation of the inner elements */
-		return td->check_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_per_constraints_t asn_PER_type_rabContextFailedtoTransferList_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_per_constraints_t asn_PER_memb_rabContextFailedtoTransferList_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_rabContextFailedtoTransferList_ies_2[] = {
-	{ ATF_POINTER, 0, 0,
-		-1 /* Ambiguous tag (CHOICE?) */,
-		0,
-		&asn_DEF_RANAP_IE,
-		0,	/* Defer constraints checking to the member type */
-		0,	/* No PER visible constraints */
-		0,
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_rabContextFailedtoTransferList_ies_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_rabContextFailedtoTransferList_ies_specs_2 = {
-	sizeof(struct rabContextFailedtoTransferList_ies),
-	offsetof(struct rabContextFailedtoTransferList_ies, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabContextFailedtoTransferList_ies_2 = {
-	"rabContextFailedtoTransferList-ies",
-	"rabContextFailedtoTransferList-ies",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_encode_xer,
-	SEQUENCE_OF_decode_uper,
-	SEQUENCE_OF_encode_uper,
-	SEQUENCE_OF_decode_aper,
-	SEQUENCE_OF_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabContextFailedtoTransferList_ies_tags_2,
-	sizeof(asn_DEF_rabContextFailedtoTransferList_ies_tags_2)
-		/sizeof(asn_DEF_rabContextFailedtoTransferList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabContextFailedtoTransferList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabContextFailedtoTransferList_ies_tags_2)
-		/sizeof(asn_DEF_rabContextFailedtoTransferList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabContextFailedtoTransferList_ies_constr_2,
-	asn_MBR_rabContextFailedtoTransferList_ies_2,
-	1,	/* Single element */
-	&asn_SPC_rabContextFailedtoTransferList_ies_specs_2	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_RANAP_RAB_ContextFailedtoTransferList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextFailedtoTransferList, rabContextFailedtoTransferList_ies),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_rabContextFailedtoTransferList_ies_2,
-		memb_rabContextFailedtoTransferList_ies_constraint_1,
-		&asn_PER_memb_rabContextFailedtoTransferList_ies_constr_2,
-		0,
-		"rabContextFailedtoTransferList-ies"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ContextFailedtoTransferList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabContextFailedtoTransferList-ies */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ContextFailedtoTransferList_specs_1 = {
-	sizeof(struct RANAP_RAB_ContextFailedtoTransferList),
-	offsetof(struct RANAP_RAB_ContextFailedtoTransferList, _asn_ctx),
-	asn_MAP_RANAP_RAB_ContextFailedtoTransferList_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	0,	/* Start extensions */
-	2	/* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextFailedtoTransferList = {
-	"RANAP_RAB-ContextFailedtoTransferList",
-	"RANAP_RAB-ContextFailedtoTransferList",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	SEQUENCE_decode_aper,
-	SEQUENCE_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1,
-	sizeof(asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1)
-		/sizeof(asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1[0]), /* 1 */
-	asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1)
-		/sizeof(asn_DEF_RANAP_RAB_ContextFailedtoTransferList_tags_1[0]), /* 1 */
-	0,	/* No PER visible constraints */
-	asn_MBR_RANAP_RAB_ContextFailedtoTransferList_1,
-	1,	/* Elements count */
-	&asn_SPC_RANAP_RAB_ContextFailedtoTransferList_specs_1	/* Additional specs */
-};
-
diff --git a/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.c b/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.c
index de6c6ae..e190d98 100644
--- a/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.c
+++ b/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ContextList-RANAP-RelocInf.h"
 
 static int
-memb_rabContextListRANAPRelocInf_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ContextList_RANAP_RelocInf_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabContextListRANAPRelocInf_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ContextList_RANAP_RelocInf_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabContextListRANAPRelocInf_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ContextList_RANAP_RelocInf_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabContextListRANAPRelocInf_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ContextList_RANAP_RelocInf_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabContextListRANAPRelocInf_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabContextListRANAPRelocInf_ies_specs_2 = {
-	sizeof(struct rabContextListRANAPRelocInf_ies),
-	offsetof(struct rabContextListRANAPRelocInf_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ContextList_RANAP_RelocInf_ies_specs_2 = {
+	sizeof(struct raB_ContextList_RANAP_RelocInf_ies),
+	offsetof(struct raB_ContextList_RANAP_RelocInf_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabContextListRANAPRelocInf_ies_2 = {
-	"rabContextListRANAPRelocInf-ies",
-	"rabContextListRANAPRelocInf-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ContextList_RANAP_RelocInf_ies_2 = {
+	"raB-ContextList-RANAP-RelocInf-ies",
+	"raB-ContextList-RANAP-RelocInf-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabContextListRANAPRelocInf_ies_tags_2,
-	sizeof(asn_DEF_rabContextListRANAPRelocInf_ies_tags_2)
-		/sizeof(asn_DEF_rabContextListRANAPRelocInf_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabContextListRANAPRelocInf_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabContextListRANAPRelocInf_ies_tags_2)
-		/sizeof(asn_DEF_rabContextListRANAPRelocInf_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabContextListRANAPRelocInf_ies_constr_2,
-	asn_MBR_rabContextListRANAPRelocInf_ies_2,
+	asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2,
+	sizeof(asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2)
+		/sizeof(asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2)
+		/sizeof(asn_DEF_raB_ContextList_RANAP_RelocInf_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ContextList_RANAP_RelocInf_ies_constr_2,
+	asn_MBR_raB_ContextList_RANAP_RelocInf_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabContextListRANAPRelocInf_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ContextList_RANAP_RelocInf_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ContextList_RANAP_RelocInf_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextList_RANAP_RelocInf, rabContextListRANAPRelocInf_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextList_RANAP_RelocInf, raB_ContextList_RANAP_RelocInf_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabContextListRANAPRelocInf_ies_2,
-		memb_rabContextListRANAPRelocInf_ies_constraint_1,
-		&asn_PER_memb_rabContextListRANAPRelocInf_ies_constr_2,
+		&asn_DEF_raB_ContextList_RANAP_RelocInf_ies_2,
+		memb_raB_ContextList_RANAP_RelocInf_ies_constraint_1,
+		&asn_PER_memb_raB_ContextList_RANAP_RelocInf_ies_constr_2,
 		0,
-		"rabContextListRANAPRelocInf-ies"
+		"raB-ContextList-RANAP-RelocInf-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ContextList_RANAP_RelocInf_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ContextList_RANAP_RelocInf_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabContextListRANAPRelocInf-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ContextList-RANAP-RelocInf-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ContextList_RANAP_RelocInf_specs_1 = {
 	sizeof(struct RANAP_RAB_ContextList_RANAP_RelocInf),
diff --git a/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.h b/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.h
index dfa50ef..d22f49f 100644
--- a/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.h
+++ b/src/ranap/RANAP_RAB-ContextList-RANAP-RelocInf.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ContextList-RANAP-RelocInf */
 typedef struct RANAP_RAB_ContextList_RANAP_RelocInf {
-	struct rabContextListRANAPRelocInf_ies {
+	struct raB_ContextList_RANAP_RelocInf_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabContextListRANAPRelocInf_ies;
+	} raB_ContextList_RANAP_RelocInf_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ContextList.c b/src/ranap/RANAP_RAB-ContextList.c
index 6650b91..c1ad1f2 100644
--- a/src/ranap/RANAP_RAB-ContextList.c
+++ b/src/ranap/RANAP_RAB-ContextList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ContextList.h"
 
 static int
-memb_rabContextList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ContextList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabContextList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ContextList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabContextList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ContextList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabContextList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ContextList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabContextList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ContextList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabContextList_ies_specs_2 = {
-	sizeof(struct rabContextList_ies),
-	offsetof(struct rabContextList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ContextList_ies_specs_2 = {
+	sizeof(struct raB_ContextList_ies),
+	offsetof(struct raB_ContextList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabContextList_ies_2 = {
-	"rabContextList-ies",
-	"rabContextList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ContextList_ies_2 = {
+	"raB-ContextList-ies",
+	"raB-ContextList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabContextList_ies_tags_2,
-	sizeof(asn_DEF_rabContextList_ies_tags_2)
-		/sizeof(asn_DEF_rabContextList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabContextList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabContextList_ies_tags_2)
-		/sizeof(asn_DEF_rabContextList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabContextList_ies_constr_2,
-	asn_MBR_rabContextList_ies_2,
+	asn_DEF_raB_ContextList_ies_tags_2,
+	sizeof(asn_DEF_raB_ContextList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ContextList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ContextList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ContextList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ContextList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ContextList_ies_constr_2,
+	asn_MBR_raB_ContextList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabContextList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ContextList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ContextList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextList, rabContextList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ContextList, raB_ContextList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabContextList_ies_2,
-		memb_rabContextList_ies_constraint_1,
-		&asn_PER_memb_rabContextList_ies_constr_2,
+		&asn_DEF_raB_ContextList_ies_2,
+		memb_raB_ContextList_ies_constraint_1,
+		&asn_PER_memb_raB_ContextList_ies_constr_2,
 		0,
-		"rabContextList-ies"
+		"raB-ContextList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ContextList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ContextList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabContextList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ContextList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ContextList_specs_1 = {
 	sizeof(struct RANAP_RAB_ContextList),
diff --git a/src/ranap/RANAP_RAB-ContextList.h b/src/ranap/RANAP_RAB-ContextList.h
index b480389..203d139 100644
--- a/src/ranap/RANAP_RAB-ContextList.h
+++ b/src/ranap/RANAP_RAB-ContextList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ContextList */
 typedef struct RANAP_RAB_ContextList {
-	struct rabContextList_ies {
+	struct raB_ContextList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabContextList_ies;
+	} raB_ContextList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.c b/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.c
new file mode 100644
index 0000000..7b6902b
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-DataForwardingItem-SRNS-CtxReq.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingItem_SRNS_CtxReq, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_DataForwardingItem_SRNS_CtxReq, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_specs_1 = {
+	sizeof(struct RANAP_RAB_DataForwardingItem_SRNS_CtxReq),
+	offsetof(struct RANAP_RAB_DataForwardingItem_SRNS_CtxReq, _asn_ctx),
+	asn_MAP_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq = {
+	"RANAP_RAB-DataForwardingItem-SRNS-CtxReq",
+	"RANAP_RAB-DataForwardingItem-SRNS-CtxReq",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.h b/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.h
new file mode 100644
index 0000000..1ec769b
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataForwardingItem-SRNS-CtxReq.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_H_
+#define	_RANAP_RAB_DataForwardingItem_SRNS_CtxReq_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-DataForwardingItem-SRNS-CtxReq */
+typedef struct RANAP_RAB_DataForwardingItem_SRNS_CtxReq {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_RAB_DataForwardingItem_SRNS_CtxReq_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataForwardingItem_SRNS_CtxReq;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_DataForwardingItem_SRNS_CtxReq_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.c b/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.c
index aa44e11..7d11b7e 100644
--- a/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.c
+++ b/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-DataForwardingList-SRNS-CtxReq.h"
 
 static int
-memb_rabDataForwardingListSRNSCtxReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_DataForwardingList_SRNS_CtxReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabDataForwardingListSRNSCtxReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_DataForwardingList_SRNS_CtxReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabDataForwardingListSRNSCtxReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_DataForwardingList_SRNS_CtxReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabDataForwardingListSRNSCtxReq_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_DataForwardingList_SRNS_CtxReq_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabDataForwardingListSRNSCtxReq_ies_specs_2 = {
-	sizeof(struct rabDataForwardingListSRNSCtxReq_ies),
-	offsetof(struct rabDataForwardingListSRNSCtxReq_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_DataForwardingList_SRNS_CtxReq_ies_specs_2 = {
+	sizeof(struct raB_DataForwardingList_SRNS_CtxReq_ies),
+	offsetof(struct raB_DataForwardingList_SRNS_CtxReq_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabDataForwardingListSRNSCtxReq_ies_2 = {
-	"rabDataForwardingListSRNSCtxReq-ies",
-	"rabDataForwardingListSRNSCtxReq-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_2 = {
+	"raB-DataForwardingList-SRNS-CtxReq-ies",
+	"raB-DataForwardingList-SRNS-CtxReq-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2,
-	sizeof(asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2)
-		/sizeof(asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2)
-		/sizeof(asn_DEF_rabDataForwardingListSRNSCtxReq_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabDataForwardingListSRNSCtxReq_ies_constr_2,
-	asn_MBR_rabDataForwardingListSRNSCtxReq_ies_2,
+	asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2,
+	sizeof(asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_DataForwardingList_SRNS_CtxReq_ies_constr_2,
+	asn_MBR_raB_DataForwardingList_SRNS_CtxReq_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabDataForwardingListSRNSCtxReq_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_DataForwardingList_SRNS_CtxReq_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataForwardingList_SRNS_CtxReq_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingList_SRNS_CtxReq, rabDataForwardingListSRNSCtxReq_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingList_SRNS_CtxReq, raB_DataForwardingList_SRNS_CtxReq_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabDataForwardingListSRNSCtxReq_ies_2,
-		memb_rabDataForwardingListSRNSCtxReq_ies_constraint_1,
-		&asn_PER_memb_rabDataForwardingListSRNSCtxReq_ies_constr_2,
+		&asn_DEF_raB_DataForwardingList_SRNS_CtxReq_ies_2,
+		memb_raB_DataForwardingList_SRNS_CtxReq_ies_constraint_1,
+		&asn_PER_memb_raB_DataForwardingList_SRNS_CtxReq_ies_constr_2,
 		0,
-		"rabDataForwardingListSRNSCtxReq-ies"
+		"raB-DataForwardingList-SRNS-CtxReq-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataForwardingList_SRNS_CtxReq_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataForwardingList_SRNS_CtxReq_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabDataForwardingListSRNSCtxReq-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-DataForwardingList-SRNS-CtxReq-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataForwardingList_SRNS_CtxReq_specs_1 = {
 	sizeof(struct RANAP_RAB_DataForwardingList_SRNS_CtxReq),
diff --git a/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.h b/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.h
index 50d5771..8b0a5e1 100644
--- a/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.h
+++ b/src/ranap/RANAP_RAB-DataForwardingList-SRNS-CtxReq.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-DataForwardingList-SRNS-CtxReq */
 typedef struct RANAP_RAB_DataForwardingList_SRNS_CtxReq {
-	struct rabDataForwardingListSRNSCtxReq_ies {
+	struct raB_DataForwardingList_SRNS_CtxReq_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabDataForwardingListSRNSCtxReq_ies;
+	} raB_DataForwardingList_SRNS_CtxReq_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-DataForwardingList.c b/src/ranap/RANAP_RAB-DataForwardingList.c
index ae67293..3a1a4eb 100644
--- a/src/ranap/RANAP_RAB-DataForwardingList.c
+++ b/src/ranap/RANAP_RAB-DataForwardingList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-DataForwardingList.h"
 
 static int
-memb_rabDataForwardingList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_DataForwardingList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabDataForwardingList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_DataForwardingList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabDataForwardingList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_DataForwardingList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabDataForwardingList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_DataForwardingList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabDataForwardingList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_DataForwardingList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabDataForwardingList_ies_specs_2 = {
-	sizeof(struct rabDataForwardingList_ies),
-	offsetof(struct rabDataForwardingList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_DataForwardingList_ies_specs_2 = {
+	sizeof(struct raB_DataForwardingList_ies),
+	offsetof(struct raB_DataForwardingList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabDataForwardingList_ies_2 = {
-	"rabDataForwardingList-ies",
-	"rabDataForwardingList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_DataForwardingList_ies_2 = {
+	"raB-DataForwardingList-ies",
+	"raB-DataForwardingList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabDataForwardingList_ies_tags_2,
-	sizeof(asn_DEF_rabDataForwardingList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataForwardingList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabDataForwardingList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabDataForwardingList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataForwardingList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabDataForwardingList_ies_constr_2,
-	asn_MBR_rabDataForwardingList_ies_2,
+	asn_DEF_raB_DataForwardingList_ies_tags_2,
+	sizeof(asn_DEF_raB_DataForwardingList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataForwardingList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_DataForwardingList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_DataForwardingList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataForwardingList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_DataForwardingList_ies_constr_2,
+	asn_MBR_raB_DataForwardingList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabDataForwardingList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_DataForwardingList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataForwardingList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingList, rabDataForwardingList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataForwardingList, raB_DataForwardingList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabDataForwardingList_ies_2,
-		memb_rabDataForwardingList_ies_constraint_1,
-		&asn_PER_memb_rabDataForwardingList_ies_constr_2,
+		&asn_DEF_raB_DataForwardingList_ies_2,
+		memb_raB_DataForwardingList_ies_constraint_1,
+		&asn_PER_memb_raB_DataForwardingList_ies_constr_2,
 		0,
-		"rabDataForwardingList-ies"
+		"raB-DataForwardingList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataForwardingList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataForwardingList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabDataForwardingList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-DataForwardingList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataForwardingList_specs_1 = {
 	sizeof(struct RANAP_RAB_DataForwardingList),
diff --git a/src/ranap/RANAP_RAB-DataForwardingList.h b/src/ranap/RANAP_RAB-DataForwardingList.h
index c049071..81d04f3 100644
--- a/src/ranap/RANAP_RAB-DataForwardingList.h
+++ b/src/ranap/RANAP_RAB-DataForwardingList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-DataForwardingList */
 typedef struct RANAP_RAB_DataForwardingList {
-	struct rabDataForwardingList_ies {
+	struct raB_DataForwardingList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabDataForwardingList_ies;
+	} raB_DataForwardingList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportList.c b/src/ranap/RANAP_RAB-DataVolumeReportList.c
index ccfeda6..c4e756b 100644
--- a/src/ranap/RANAP_RAB-DataVolumeReportList.c
+++ b/src/ranap/RANAP_RAB-DataVolumeReportList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-DataVolumeReportList.h"
 
 static int
-memb_rabDataVolumeReportList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_DataVolumeReportList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabDataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_DataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabDataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_DataVolumeReportList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabDataVolumeReportList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_DataVolumeReportList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabDataVolumeReportList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_DataVolumeReportList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabDataVolumeReportList_ies_specs_2 = {
-	sizeof(struct rabDataVolumeReportList_ies),
-	offsetof(struct rabDataVolumeReportList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_DataVolumeReportList_ies_specs_2 = {
+	sizeof(struct raB_DataVolumeReportList_ies),
+	offsetof(struct raB_DataVolumeReportList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabDataVolumeReportList_ies_2 = {
-	"rabDataVolumeReportList-ies",
-	"rabDataVolumeReportList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_DataVolumeReportList_ies_2 = {
+	"raB-DataVolumeReportList-ies",
+	"raB-DataVolumeReportList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabDataVolumeReportList_ies_tags_2,
-	sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabDataVolumeReportList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataVolumeReportList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabDataVolumeReportList_ies_constr_2,
-	asn_MBR_rabDataVolumeReportList_ies_2,
+	asn_DEF_raB_DataVolumeReportList_ies_tags_2,
+	sizeof(asn_DEF_raB_DataVolumeReportList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataVolumeReportList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_DataVolumeReportList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_DataVolumeReportList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataVolumeReportList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_DataVolumeReportList_ies_constr_2,
+	asn_MBR_raB_DataVolumeReportList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabDataVolumeReportList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_DataVolumeReportList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataVolumeReportList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportList, rabDataVolumeReportList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportList, raB_DataVolumeReportList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabDataVolumeReportList_ies_2,
-		memb_rabDataVolumeReportList_ies_constraint_1,
-		&asn_PER_memb_rabDataVolumeReportList_ies_constr_2,
+		&asn_DEF_raB_DataVolumeReportList_ies_2,
+		memb_raB_DataVolumeReportList_ies_constraint_1,
+		&asn_PER_memb_raB_DataVolumeReportList_ies_constr_2,
 		0,
-		"rabDataVolumeReportList-ies"
+		"raB-DataVolumeReportList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataVolumeReportList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataVolumeReportList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabDataVolumeReportList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-DataVolumeReportList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataVolumeReportList_specs_1 = {
 	sizeof(struct RANAP_RAB_DataVolumeReportList),
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportList.h b/src/ranap/RANAP_RAB-DataVolumeReportList.h
index 1876054..a8efc0c 100644
--- a/src/ranap/RANAP_RAB-DataVolumeReportList.h
+++ b/src/ranap/RANAP_RAB-DataVolumeReportList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-DataVolumeReportList */
 typedef struct RANAP_RAB_DataVolumeReportList {
-	struct rabDataVolumeReportList_ies {
+	struct raB_DataVolumeReportList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabDataVolumeReportList_ies;
+	} raB_DataVolumeReportList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.c b/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.c
new file mode 100644
index 0000000..aa629e0
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.c
@@ -0,0 +1,73 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-DataVolumeReportRequestItem.h"
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataVolumeReportRequestItem_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportRequestItem, rAB_ID),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_RAB_ID,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"rAB-ID"
+		},
+	{ ATF_POINTER, 1, offsetof(struct RANAP_RAB_DataVolumeReportRequestItem, iE_Extensions),
+		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		-1,	/* IMPLICIT tag at current level */
+		&asn_DEF_RANAP_ProtocolExtensionContainer,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		"iE-Extensions"
+		},
+};
+static const int asn_MAP_RANAP_RAB_DataVolumeReportRequestItem_oms_1[] = { 1 };
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataVolumeReportRequestItem_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rAB-ID */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* iE-Extensions */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataVolumeReportRequestItem_specs_1 = {
+	sizeof(struct RANAP_RAB_DataVolumeReportRequestItem),
+	offsetof(struct RANAP_RAB_DataVolumeReportRequestItem, _asn_ctx),
+	asn_MAP_RANAP_RAB_DataVolumeReportRequestItem_tag2el_1,
+	2,	/* Count of tags in the map */
+	asn_MAP_RANAP_RAB_DataVolumeReportRequestItem_oms_1,	/* Optional members */
+	1, 0,	/* Root/Additions */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportRequestItem = {
+	"RANAP_RAB-DataVolumeReportRequestItem",
+	"RANAP_RAB-DataVolumeReportRequestItem",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_DataVolumeReportRequestItem_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_DataVolumeReportRequestItem_1,
+	2,	/* Elements count */
+	&asn_SPC_RANAP_RAB_DataVolumeReportRequestItem_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.h b/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.h
new file mode 100644
index 0000000..884ae4d
--- /dev/null
+++ b/src/ranap/RANAP_RAB-DataVolumeReportRequestItem.h
@@ -0,0 +1,43 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_RAB_DataVolumeReportRequestItem_H_
+#define	_RANAP_RAB_DataVolumeReportRequestItem_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-ID.h"
+#include "RANAP_ProtocolExtensionContainer.h"
+#include <constr_SEQUENCE.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-DataVolumeReportRequestItem */
+typedef struct RANAP_RAB_DataVolumeReportRequestItem {
+	RANAP_RAB_ID_t	 rAB_ID;
+	RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_RAB_DataVolumeReportRequestItem_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_DataVolumeReportRequestItem;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_DataVolumeReportRequestItem_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportRequestList.c b/src/ranap/RANAP_RAB-DataVolumeReportRequestList.c
index fc1feaa..c0183f9 100644
--- a/src/ranap/RANAP_RAB-DataVolumeReportRequestList.c
+++ b/src/ranap/RANAP_RAB-DataVolumeReportRequestList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-DataVolumeReportRequestList.h"
 
 static int
-memb_rabDataVolumeReportRequestList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_DataVolumeReportRequestList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabDataVolumeReportRequestList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_DataVolumeReportRequestList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabDataVolumeReportRequestList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_DataVolumeReportRequestList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabDataVolumeReportRequestList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_DataVolumeReportRequestList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabDataVolumeReportRequestList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabDataVolumeReportRequestList_ies_specs_2 = {
-	sizeof(struct rabDataVolumeReportRequestList_ies),
-	offsetof(struct rabDataVolumeReportRequestList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_DataVolumeReportRequestList_ies_specs_2 = {
+	sizeof(struct raB_DataVolumeReportRequestList_ies),
+	offsetof(struct raB_DataVolumeReportRequestList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabDataVolumeReportRequestList_ies_2 = {
-	"rabDataVolumeReportRequestList-ies",
-	"rabDataVolumeReportRequestList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_DataVolumeReportRequestList_ies_2 = {
+	"raB-DataVolumeReportRequestList-ies",
+	"raB-DataVolumeReportRequestList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabDataVolumeReportRequestList_ies_tags_2,
-	sizeof(asn_DEF_rabDataVolumeReportRequestList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataVolumeReportRequestList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabDataVolumeReportRequestList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabDataVolumeReportRequestList_ies_tags_2)
-		/sizeof(asn_DEF_rabDataVolumeReportRequestList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabDataVolumeReportRequestList_ies_constr_2,
-	asn_MBR_rabDataVolumeReportRequestList_ies_2,
+	asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2,
+	sizeof(asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2)
+		/sizeof(asn_DEF_raB_DataVolumeReportRequestList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_DataVolumeReportRequestList_ies_constr_2,
+	asn_MBR_raB_DataVolumeReportRequestList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabDataVolumeReportRequestList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_DataVolumeReportRequestList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_DataVolumeReportRequestList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportRequestList, rabDataVolumeReportRequestList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_DataVolumeReportRequestList, raB_DataVolumeReportRequestList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabDataVolumeReportRequestList_ies_2,
-		memb_rabDataVolumeReportRequestList_ies_constraint_1,
-		&asn_PER_memb_rabDataVolumeReportRequestList_ies_constr_2,
+		&asn_DEF_raB_DataVolumeReportRequestList_ies_2,
+		memb_raB_DataVolumeReportRequestList_ies_constraint_1,
+		&asn_PER_memb_raB_DataVolumeReportRequestList_ies_constr_2,
 		0,
-		"rabDataVolumeReportRequestList-ies"
+		"raB-DataVolumeReportRequestList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_DataVolumeReportRequestList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_DataVolumeReportRequestList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabDataVolumeReportRequestList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-DataVolumeReportRequestList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_DataVolumeReportRequestList_specs_1 = {
 	sizeof(struct RANAP_RAB_DataVolumeReportRequestList),
diff --git a/src/ranap/RANAP_RAB-DataVolumeReportRequestList.h b/src/ranap/RANAP_RAB-DataVolumeReportRequestList.h
index c76bd48..ef16530 100644
--- a/src/ranap/RANAP_RAB-DataVolumeReportRequestList.h
+++ b/src/ranap/RANAP_RAB-DataVolumeReportRequestList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-DataVolumeReportRequestList */
 typedef struct RANAP_RAB_DataVolumeReportRequestList {
-	struct rabDataVolumeReportRequestList_ies {
+	struct raB_DataVolumeReportRequestList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabDataVolumeReportRequestList_ies;
+	} raB_DataVolumeReportRequestList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.c b/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.c
index a113cf1..cb01e7e 100644
--- a/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.c
+++ b/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-FailedList-EnhRelocInfoRes.h"
 
 static int
-memb_rabFailedListEnhRelocInfoRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_FailedList_EnhRelocInfoRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabFailedListEnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_FailedList_EnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabFailedListEnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_FailedList_EnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabFailedListEnhRelocInfoRes_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_FailedList_EnhRelocInfoRes_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabFailedListEnhRelocInfoRes_ies_specs_2 = {
-	sizeof(struct rabFailedListEnhRelocInfoRes_ies),
-	offsetof(struct rabFailedListEnhRelocInfoRes_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_FailedList_EnhRelocInfoRes_ies_specs_2 = {
+	sizeof(struct raB_FailedList_EnhRelocInfoRes_ies),
+	offsetof(struct raB_FailedList_EnhRelocInfoRes_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabFailedListEnhRelocInfoRes_ies_2 = {
-	"rabFailedListEnhRelocInfoRes-ies",
-	"rabFailedListEnhRelocInfoRes-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_2 = {
+	"raB-FailedList-EnhRelocInfoRes-ies",
+	"raB-FailedList-EnhRelocInfoRes-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2,
-	sizeof(asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedListEnhRelocInfoRes_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabFailedListEnhRelocInfoRes_ies_constr_2,
-	asn_MBR_rabFailedListEnhRelocInfoRes_ies_2,
+	asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2,
+	sizeof(asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_FailedList_EnhRelocInfoRes_ies_constr_2,
+	asn_MBR_raB_FailedList_EnhRelocInfoRes_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabFailedListEnhRelocInfoRes_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_FailedList_EnhRelocInfoRes_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_FailedList_EnhRelocInfoRes_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedList_EnhRelocInfoRes, rabFailedListEnhRelocInfoRes_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedList_EnhRelocInfoRes, raB_FailedList_EnhRelocInfoRes_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabFailedListEnhRelocInfoRes_ies_2,
-		memb_rabFailedListEnhRelocInfoRes_ies_constraint_1,
-		&asn_PER_memb_rabFailedListEnhRelocInfoRes_ies_constr_2,
+		&asn_DEF_raB_FailedList_EnhRelocInfoRes_ies_2,
+		memb_raB_FailedList_EnhRelocInfoRes_ies_constraint_1,
+		&asn_PER_memb_raB_FailedList_EnhRelocInfoRes_ies_constr_2,
 		0,
-		"rabFailedListEnhRelocInfoRes-ies"
+		"raB-FailedList-EnhRelocInfoRes-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_FailedList_EnhRelocInfoRes_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_FailedList_EnhRelocInfoRes_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabFailedListEnhRelocInfoRes-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-FailedList-EnhRelocInfoRes-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_FailedList_EnhRelocInfoRes_specs_1 = {
 	sizeof(struct RANAP_RAB_FailedList_EnhRelocInfoRes),
diff --git a/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.h b/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.h
index 23a0357..21c15af 100644
--- a/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.h
+++ b/src/ranap/RANAP_RAB-FailedList-EnhRelocInfoRes.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-FailedList-EnhRelocInfoRes */
 typedef struct RANAP_RAB_FailedList_EnhRelocInfoRes {
-	struct rabFailedListEnhRelocInfoRes_ies {
+	struct raB_FailedList_EnhRelocInfoRes_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedListEnhRelocInfoRes_ies;
+	} raB_FailedList_EnhRelocInfoRes_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-FailedList.c b/src/ranap/RANAP_RAB-FailedList.c
index 3dc8d53..d1599c3 100644
--- a/src/ranap/RANAP_RAB-FailedList.c
+++ b/src/ranap/RANAP_RAB-FailedList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-FailedList.h"
 
 static int
-memb_rabFailedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_FailedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabFailedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_FailedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabFailedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_FailedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabFailedList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_FailedList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabFailedList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_FailedList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabFailedList_ies_specs_2 = {
-	sizeof(struct rabFailedList_ies),
-	offsetof(struct rabFailedList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_FailedList_ies_specs_2 = {
+	sizeof(struct raB_FailedList_ies),
+	offsetof(struct raB_FailedList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabFailedList_ies_2 = {
-	"rabFailedList-ies",
-	"rabFailedList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_FailedList_ies_2 = {
+	"raB-FailedList-ies",
+	"raB-FailedList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabFailedList_ies_tags_2,
-	sizeof(asn_DEF_rabFailedList_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabFailedList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabFailedList_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabFailedList_ies_constr_2,
-	asn_MBR_rabFailedList_ies_2,
+	asn_DEF_raB_FailedList_ies_tags_2,
+	sizeof(asn_DEF_raB_FailedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_FailedList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_FailedList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_FailedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_FailedList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_FailedList_ies_constr_2,
+	asn_MBR_raB_FailedList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabFailedList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_FailedList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_FailedList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedList, rabFailedList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedList, raB_FailedList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabFailedList_ies_2,
-		memb_rabFailedList_ies_constraint_1,
-		&asn_PER_memb_rabFailedList_ies_constr_2,
+		&asn_DEF_raB_FailedList_ies_2,
+		memb_raB_FailedList_ies_constraint_1,
+		&asn_PER_memb_raB_FailedList_ies_constr_2,
 		0,
-		"rabFailedList-ies"
+		"raB-FailedList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_FailedList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_FailedList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabFailedList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-FailedList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_FailedList_specs_1 = {
 	sizeof(struct RANAP_RAB_FailedList),
diff --git a/src/ranap/RANAP_RAB-FailedList.h b/src/ranap/RANAP_RAB-FailedList.h
index 70b01dc..6338feb 100644
--- a/src/ranap/RANAP_RAB-FailedList.h
+++ b/src/ranap/RANAP_RAB-FailedList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-FailedList */
 typedef struct RANAP_RAB_FailedList {
-	struct rabFailedList_ies {
+	struct raB_FailedList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedList_ies;
+	} raB_FailedList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.c b/src/ranap/RANAP_RAB-FailedtoReportList.c
deleted file mode 100644
index 5dfe091..0000000
--- a/src/ranap/RANAP_RAB-FailedtoReportList.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
- * From ASN.1 module "RANAP-PDU"
- * 	found in "../../asn1/ranap/RANAP-PDU.asn"
- */
-
-#include "RANAP_RAB-FailedtoReportList.h"
-
-static int
-memb_rabFailedtoReportList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	size_t size;
-	
-	if(!sptr) {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: value not given (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-	
-	/* Determine the number of elements */
-	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
-	
-	if((size <= 65535l)) {
-		/* Perform validation of the inner elements */
-		return td->check_constraints(td, sptr, ctfailcb, app_key);
-	} else {
-		_ASN_CTFAIL(app_key, td, sptr,
-			"%s: constraint failed (%s:%d)",
-			td->name, __FILE__, __LINE__);
-		return -1;
-	}
-}
-
-static asn_per_constraints_t asn_PER_type_rabFailedtoReportList_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_per_constraints_t asn_PER_memb_rabFailedtoReportList_ies_constr_2 GCC_NOTUSED = {
-	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
-	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
-	0, 0	/* No PER value map */
-};
-static asn_TYPE_member_t asn_MBR_rabFailedtoReportList_ies_2[] = {
-	{ ATF_POINTER, 0, 0,
-		-1 /* Ambiguous tag (CHOICE?) */,
-		0,
-		&asn_DEF_RANAP_IE,
-		0,	/* Defer constraints checking to the member type */
-		0,	/* No PER visible constraints */
-		0,
-		""
-		},
-};
-static const ber_tlv_tag_t asn_DEF_rabFailedtoReportList_ies_tags_2[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static asn_SET_OF_specifics_t asn_SPC_rabFailedtoReportList_ies_specs_2 = {
-	sizeof(struct rabFailedtoReportList_ies),
-	offsetof(struct rabFailedtoReportList_ies, _asn_ctx),
-	0,	/* XER encoding is XMLDelimitedItemList */
-};
-static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabFailedtoReportList_ies_2 = {
-	"rabFailedtoReportList-ies",
-	"rabFailedtoReportList-ies",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_encode_xer,
-	SEQUENCE_OF_decode_uper,
-	SEQUENCE_OF_encode_uper,
-	SEQUENCE_OF_decode_aper,
-	SEQUENCE_OF_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabFailedtoReportList_ies_tags_2,
-	sizeof(asn_DEF_rabFailedtoReportList_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedtoReportList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabFailedtoReportList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabFailedtoReportList_ies_tags_2)
-		/sizeof(asn_DEF_rabFailedtoReportList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabFailedtoReportList_ies_constr_2,
-	asn_MBR_rabFailedtoReportList_ies_2,
-	1,	/* Single element */
-	&asn_SPC_rabFailedtoReportList_ies_specs_2	/* Additional specs */
-};
-
-static asn_TYPE_member_t asn_MBR_RANAP_RAB_FailedtoReportList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_FailedtoReportList, rabFailedtoReportList_ies),
-		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
-		0,
-		&asn_DEF_rabFailedtoReportList_ies_2,
-		memb_rabFailedtoReportList_ies_constraint_1,
-		&asn_PER_memb_rabFailedtoReportList_ies_constr_2,
-		0,
-		"rabFailedtoReportList-ies"
-		},
-};
-static const ber_tlv_tag_t asn_DEF_RANAP_RAB_FailedtoReportList_tags_1[] = {
-	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-};
-static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_FailedtoReportList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabFailedtoReportList-ies */
-};
-static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_FailedtoReportList_specs_1 = {
-	sizeof(struct RANAP_RAB_FailedtoReportList),
-	offsetof(struct RANAP_RAB_FailedtoReportList, _asn_ctx),
-	asn_MAP_RANAP_RAB_FailedtoReportList_tag2el_1,
-	1,	/* Count of tags in the map */
-	0, 0, 0,	/* Optional elements (not needed) */
-	0,	/* Start extensions */
-	2	/* Stop extensions */
-};
-asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList = {
-	"RANAP_RAB-FailedtoReportList",
-	"RANAP_RAB-FailedtoReportList",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	SEQUENCE_decode_aper,
-	SEQUENCE_encode_aper,
-	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_RANAP_RAB_FailedtoReportList_tags_1,
-	sizeof(asn_DEF_RANAP_RAB_FailedtoReportList_tags_1)
-		/sizeof(asn_DEF_RANAP_RAB_FailedtoReportList_tags_1[0]), /* 1 */
-	asn_DEF_RANAP_RAB_FailedtoReportList_tags_1,	/* Same as above */
-	sizeof(asn_DEF_RANAP_RAB_FailedtoReportList_tags_1)
-		/sizeof(asn_DEF_RANAP_RAB_FailedtoReportList_tags_1[0]), /* 1 */
-	0,	/* No PER visible constraints */
-	asn_MBR_RANAP_RAB_FailedtoReportList_1,
-	1,	/* Elements count */
-	&asn_SPC_RANAP_RAB_FailedtoReportList_specs_1	/* Additional specs */
-};
-
diff --git a/src/ranap/RANAP_RAB-IE-ContainerList.c b/src/ranap/RANAP_RAB-IE-ContainerList.c
new file mode 100644
index 0000000..1961998
--- /dev/null
+++ b/src/ranap/RANAP_RAB-IE-ContainerList.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-IE-ContainerList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_RAB_IE_ContainerList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_IE_ContainerList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_Container,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_IE_ContainerList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_RAB_IE_ContainerList_specs_1 = {
+	sizeof(struct RANAP_RAB_IE_ContainerList),
+	offsetof(struct RANAP_RAB_IE_ContainerList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_IE_ContainerList = {
+	"RANAP_RAB-IE-ContainerList",
+	"RANAP_RAB-IE-ContainerList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_IE_ContainerList_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_IE_ContainerList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_IE_ContainerList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_IE_ContainerList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_IE_ContainerList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_RAB_IE_ContainerList_constr_1,
+	asn_MBR_RANAP_RAB_IE_ContainerList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_RAB_IE_ContainerList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-IE-ContainerList.h b/src/ranap/RANAP_RAB-IE-ContainerList.h
new file mode 100644
index 0000000..c5766da
--- /dev/null
+++ b/src/ranap/RANAP_RAB-IE-ContainerList.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_RAB_IE_ContainerList_H_
+#define	_RANAP_RAB_IE_ContainerList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-Container.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-IE-ContainerList */
+typedef struct RANAP_RAB_IE_ContainerList {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_Container_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_RAB_IE_ContainerList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_IE_ContainerList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_IE_ContainerList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-IE-ContainerPairList.c b/src/ranap/RANAP_RAB-IE-ContainerPairList.c
new file mode 100644
index 0000000..6620bef
--- /dev/null
+++ b/src/ranap/RANAP_RAB-IE-ContainerPairList.c
@@ -0,0 +1,59 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RAB-IE-ContainerPairList.h"
+
+static asn_per_constraints_t asn_PER_type_RANAP_RAB_IE_ContainerPairList_constr_1 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_IE_ContainerPairList_1[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_ProtocolIE_FieldPair,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_RANAP_RAB_IE_ContainerPairList_specs_1 = {
+	sizeof(struct RANAP_RAB_IE_ContainerPairList),
+	offsetof(struct RANAP_RAB_IE_ContainerPairList, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_IE_ContainerPairList = {
+	"RANAP_RAB-IE-ContainerPairList",
+	"RANAP_RAB-IE-ContainerPairList",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_IE_ContainerPairList_tags_1[0]), /* 1 */
+	&asn_PER_type_RANAP_RAB_IE_ContainerPairList_constr_1,
+	asn_MBR_RANAP_RAB_IE_ContainerPairList_1,
+	1,	/* Single element */
+	&asn_SPC_RANAP_RAB_IE_ContainerPairList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-IE-ContainerPairList.h b/src/ranap/RANAP_RAB-IE-ContainerPairList.h
new file mode 100644
index 0000000..871d8e6
--- /dev/null
+++ b/src/ranap/RANAP_RAB-IE-ContainerPairList.h
@@ -0,0 +1,38 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_RAB_IE_ContainerPairList_H_
+#define	_RANAP_RAB_IE_ContainerPairList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_ProtocolIE-FieldPair.h"
+#include <asn_SEQUENCE_OF.h>
+#include <constr_SEQUENCE_OF.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-IE-ContainerPairList */
+typedef struct RANAP_RAB_IE_ContainerPairList {
+	A_SEQUENCE_OF(RANAP_ProtocolIE_FieldPair_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} RANAP_RAB_IE_ContainerPairList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_IE_ContainerPairList;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_IE_ContainerPairList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ModifyList.c b/src/ranap/RANAP_RAB-ModifyList.c
index 8e86394..1515e0e 100644
--- a/src/ranap/RANAP_RAB-ModifyList.c
+++ b/src/ranap/RANAP_RAB-ModifyList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ModifyList.h"
 
 static int
-memb_rabModifyList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ModifyList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabModifyList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ModifyList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabModifyList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ModifyList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabModifyList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ModifyList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabModifyList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ModifyList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabModifyList_ies_specs_2 = {
-	sizeof(struct rabModifyList_ies),
-	offsetof(struct rabModifyList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ModifyList_ies_specs_2 = {
+	sizeof(struct raB_ModifyList_ies),
+	offsetof(struct raB_ModifyList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabModifyList_ies_2 = {
-	"rabModifyList-ies",
-	"rabModifyList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ModifyList_ies_2 = {
+	"raB-ModifyList-ies",
+	"raB-ModifyList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabModifyList_ies_tags_2,
-	sizeof(asn_DEF_rabModifyList_ies_tags_2)
-		/sizeof(asn_DEF_rabModifyList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabModifyList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabModifyList_ies_tags_2)
-		/sizeof(asn_DEF_rabModifyList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabModifyList_ies_constr_2,
-	asn_MBR_rabModifyList_ies_2,
+	asn_DEF_raB_ModifyList_ies_tags_2,
+	sizeof(asn_DEF_raB_ModifyList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ModifyList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ModifyList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ModifyList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ModifyList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ModifyList_ies_constr_2,
+	asn_MBR_raB_ModifyList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabModifyList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ModifyList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ModifyList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyList, rabModifyList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyList, raB_ModifyList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabModifyList_ies_2,
-		memb_rabModifyList_ies_constraint_1,
-		&asn_PER_memb_rabModifyList_ies_constr_2,
+		&asn_DEF_raB_ModifyList_ies_2,
+		memb_raB_ModifyList_ies_constraint_1,
+		&asn_PER_memb_raB_ModifyList_ies_constr_2,
 		0,
-		"rabModifyList-ies"
+		"raB-ModifyList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ModifyList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ModifyList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabModifyList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ModifyList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ModifyList_specs_1 = {
 	sizeof(struct RANAP_RAB_ModifyList),
diff --git a/src/ranap/RANAP_RAB-ModifyList.h b/src/ranap/RANAP_RAB-ModifyList.h
index 9ec1662..cea2414 100644
--- a/src/ranap/RANAP_RAB-ModifyList.h
+++ b/src/ranap/RANAP_RAB-ModifyList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ModifyList */
 typedef struct RANAP_RAB_ModifyList {
-	struct rabModifyList_ies {
+	struct raB_ModifyList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabModifyList_ies;
+	} raB_ModifyList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ModifyRequest.c b/src/ranap/RANAP_RAB-ModifyRequest.c
index 4dce204..05bb357 100644
--- a/src/ranap/RANAP_RAB-ModifyRequest.c
+++ b/src/ranap/RANAP_RAB-ModifyRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ModifyRequest.h"
 
 static int
-memb_rAB_ModifyRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ModifyRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rAB_ModifyRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ModifyRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rAB_ModifyRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ModifyRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rAB_ModifyRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ModifyRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rAB_ModifyRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ModifyRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rAB_ModifyRequest_ies_specs_2 = {
-	sizeof(struct rAB_ModifyRequest_ies),
-	offsetof(struct rAB_ModifyRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ModifyRequest_ies_specs_2 = {
+	sizeof(struct raB_ModifyRequest_ies),
+	offsetof(struct raB_ModifyRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rAB_ModifyRequest_ies_2 = {
-	"rAB-ModifyRequest-ies",
-	"rAB-ModifyRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ModifyRequest_ies_2 = {
+	"raB-ModifyRequest-ies",
+	"raB-ModifyRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rAB_ModifyRequest_ies_tags_2,
-	sizeof(asn_DEF_rAB_ModifyRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_ModifyRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rAB_ModifyRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rAB_ModifyRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_ModifyRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rAB_ModifyRequest_ies_constr_2,
-	asn_MBR_rAB_ModifyRequest_ies_2,
+	asn_DEF_raB_ModifyRequest_ies_tags_2,
+	sizeof(asn_DEF_raB_ModifyRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_ModifyRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ModifyRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ModifyRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_ModifyRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ModifyRequest_ies_constr_2,
+	asn_MBR_raB_ModifyRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rAB_ModifyRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ModifyRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ModifyRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyRequest, rAB_ModifyRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ModifyRequest, raB_ModifyRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rAB_ModifyRequest_ies_2,
-		memb_rAB_ModifyRequest_ies_constraint_1,
-		&asn_PER_memb_rAB_ModifyRequest_ies_constr_2,
+		&asn_DEF_raB_ModifyRequest_ies_2,
+		memb_raB_ModifyRequest_ies_constraint_1,
+		&asn_PER_memb_raB_ModifyRequest_ies_constr_2,
 		0,
-		"rAB-ModifyRequest-ies"
+		"raB-ModifyRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ModifyRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ModifyRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rAB-ModifyRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ModifyRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ModifyRequest_specs_1 = {
 	sizeof(struct RANAP_RAB_ModifyRequest),
diff --git a/src/ranap/RANAP_RAB-ModifyRequest.h b/src/ranap/RANAP_RAB-ModifyRequest.h
index cf1c8d6..d4398cc 100644
--- a/src/ranap/RANAP_RAB-ModifyRequest.h
+++ b/src/ranap/RANAP_RAB-ModifyRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ModifyRequest */
 typedef struct RANAP_RAB_ModifyRequest {
-	struct rAB_ModifyRequest_ies {
+	struct raB_ModifyRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rAB_ModifyRequest_ies;
+	} raB_ModifyRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-QueuedList.c b/src/ranap/RANAP_RAB-QueuedList.c
index d8bf291..eac724b 100644
--- a/src/ranap/RANAP_RAB-QueuedList.c
+++ b/src/ranap/RANAP_RAB-QueuedList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-QueuedList.h"
 
 static int
-memb_rabQueuedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_QueuedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabQueuedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_QueuedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabQueuedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_QueuedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabQueuedList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_QueuedList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabQueuedList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_QueuedList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabQueuedList_ies_specs_2 = {
-	sizeof(struct rabQueuedList_ies),
-	offsetof(struct rabQueuedList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_QueuedList_ies_specs_2 = {
+	sizeof(struct raB_QueuedList_ies),
+	offsetof(struct raB_QueuedList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabQueuedList_ies_2 = {
-	"rabQueuedList-ies",
-	"rabQueuedList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_QueuedList_ies_2 = {
+	"raB-QueuedList-ies",
+	"raB-QueuedList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabQueuedList_ies_tags_2,
-	sizeof(asn_DEF_rabQueuedList_ies_tags_2)
-		/sizeof(asn_DEF_rabQueuedList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabQueuedList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabQueuedList_ies_tags_2)
-		/sizeof(asn_DEF_rabQueuedList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabQueuedList_ies_constr_2,
-	asn_MBR_rabQueuedList_ies_2,
+	asn_DEF_raB_QueuedList_ies_tags_2,
+	sizeof(asn_DEF_raB_QueuedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_QueuedList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_QueuedList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_QueuedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_QueuedList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_QueuedList_ies_constr_2,
+	asn_MBR_raB_QueuedList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabQueuedList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_QueuedList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_QueuedList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_QueuedList, rabQueuedList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_QueuedList, raB_QueuedList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabQueuedList_ies_2,
-		memb_rabQueuedList_ies_constraint_1,
-		&asn_PER_memb_rabQueuedList_ies_constr_2,
+		&asn_DEF_raB_QueuedList_ies_2,
+		memb_raB_QueuedList_ies_constraint_1,
+		&asn_PER_memb_raB_QueuedList_ies_constr_2,
 		0,
-		"rabQueuedList-ies"
+		"raB-QueuedList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_QueuedList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_QueuedList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabQueuedList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-QueuedList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_QueuedList_specs_1 = {
 	sizeof(struct RANAP_RAB_QueuedList),
diff --git a/src/ranap/RANAP_RAB-QueuedList.h b/src/ranap/RANAP_RAB-QueuedList.h
index 5380eb3..94ecdd8 100644
--- a/src/ranap/RANAP_RAB-QueuedList.h
+++ b/src/ranap/RANAP_RAB-QueuedList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-QueuedList */
 typedef struct RANAP_RAB_QueuedList {
-	struct rabQueuedList_ies {
+	struct raB_QueuedList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabQueuedList_ies;
+	} raB_QueuedList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ReleaseList.c b/src/ranap/RANAP_RAB-ReleaseList.c
new file mode 100644
index 0000000..80cae41
--- /dev/null
+++ b/src/ranap/RANAP_RAB-ReleaseList.c
@@ -0,0 +1,146 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+#include <constr_CHOICE.h>
+
+#include "RANAP_RAB-ReleaseList.h"
+
+static int
+memb_raB_ReleaseList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_raB_ReleaseList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_raB_ReleaseList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_raB_ReleaseList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_raB_ReleaseList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_raB_ReleaseList_ies_specs_2 = {
+	sizeof(struct raB_ReleaseList_ies),
+	offsetof(struct raB_ReleaseList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_raB_ReleaseList_ies_2 = {
+	"raB-ReleaseList-ies",
+	"raB-ReleaseList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_raB_ReleaseList_ies_tags_2,
+	sizeof(asn_DEF_raB_ReleaseList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleaseList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ReleaseList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ReleaseList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleaseList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ReleaseList_ies_constr_2,
+	asn_MBR_raB_ReleaseList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_raB_ReleaseList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleaseList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleaseList, raB_ReleaseList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_raB_ReleaseList_ies_2,
+		memb_raB_ReleaseList_ies_constraint_1,
+		&asn_PER_memb_raB_ReleaseList_ies_constr_2,
+		0,
+		"raB-ReleaseList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleaseList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleaseList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ReleaseList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleaseList_specs_1 = {
+	sizeof(struct RANAP_RAB_ReleaseList),
+	offsetof(struct RANAP_RAB_ReleaseList, _asn_ctx),
+	asn_MAP_RANAP_RAB_ReleaseList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseList = {
+	"RANAP_RAB-ReleaseList",
+	"RANAP_RAB-ReleaseList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RAB_ReleaseList_tags_1,
+	sizeof(asn_DEF_RANAP_RAB_ReleaseList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleaseList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RAB_ReleaseList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RAB_ReleaseList_tags_1)
+		/sizeof(asn_DEF_RANAP_RAB_ReleaseList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RAB_ReleaseList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RAB_ReleaseList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.h b/src/ranap/RANAP_RAB-ReleaseList.h
similarity index 65%
copy from src/ranap/RANAP_RAB-FailedtoReportList.h
copy to src/ranap/RANAP_RAB-ReleaseList.h
index 71a2024..20cde4b 100644
--- a/src/ranap/RANAP_RAB-FailedtoReportList.h
+++ b/src/ranap/RANAP_RAB-ReleaseList.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_FailedtoReportList_H_
-#define	_RANAP_RAB_FailedtoReportList_H_
+#ifndef	_RANAP_RAB_ReleaseList_H_
+#define	_RANAP_RAB_ReleaseList_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-FailedtoReportList */
-typedef struct RANAP_RAB_FailedtoReportList {
-	struct rabFailedtoReportList_ies {
+/* RANAP_RAB-ReleaseList */
+typedef struct RANAP_RAB_ReleaseList {
+	struct raB_ReleaseList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedtoReportList_ies;
+	} raB_ReleaseList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_FailedtoReportList_t;
+} RANAP_RAB_ReleaseList_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ReleaseList;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_FailedtoReportList_H_ */
+#endif	/* _RANAP_RAB_ReleaseList_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ReleaseRequest.c b/src/ranap/RANAP_RAB-ReleaseRequest.c
index 2db478b..6c0f0e3 100644
--- a/src/ranap/RANAP_RAB-ReleaseRequest.c
+++ b/src/ranap/RANAP_RAB-ReleaseRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ReleaseRequest.h"
 
 static int
-memb_rAB_ReleaseRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ReleaseRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rAB_ReleaseRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ReleaseRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rAB_ReleaseRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ReleaseRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rAB_ReleaseRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ReleaseRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rAB_ReleaseRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ReleaseRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rAB_ReleaseRequest_ies_specs_2 = {
-	sizeof(struct rAB_ReleaseRequest_ies),
-	offsetof(struct rAB_ReleaseRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ReleaseRequest_ies_specs_2 = {
+	sizeof(struct raB_ReleaseRequest_ies),
+	offsetof(struct raB_ReleaseRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rAB_ReleaseRequest_ies_2 = {
-	"rAB-ReleaseRequest-ies",
-	"rAB-ReleaseRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ReleaseRequest_ies_2 = {
+	"raB-ReleaseRequest-ies",
+	"raB-ReleaseRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rAB_ReleaseRequest_ies_tags_2,
-	sizeof(asn_DEF_rAB_ReleaseRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_ReleaseRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rAB_ReleaseRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rAB_ReleaseRequest_ies_tags_2)
-		/sizeof(asn_DEF_rAB_ReleaseRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rAB_ReleaseRequest_ies_constr_2,
-	asn_MBR_rAB_ReleaseRequest_ies_2,
+	asn_DEF_raB_ReleaseRequest_ies_tags_2,
+	sizeof(asn_DEF_raB_ReleaseRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleaseRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ReleaseRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ReleaseRequest_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleaseRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ReleaseRequest_ies_constr_2,
+	asn_MBR_raB_ReleaseRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rAB_ReleaseRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ReleaseRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleaseRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleaseRequest, rAB_ReleaseRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleaseRequest, raB_ReleaseRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rAB_ReleaseRequest_ies_2,
-		memb_rAB_ReleaseRequest_ies_constraint_1,
-		&asn_PER_memb_rAB_ReleaseRequest_ies_constr_2,
+		&asn_DEF_raB_ReleaseRequest_ies_2,
+		memb_raB_ReleaseRequest_ies_constraint_1,
+		&asn_PER_memb_raB_ReleaseRequest_ies_constr_2,
 		0,
-		"rAB-ReleaseRequest-ies"
+		"raB-ReleaseRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleaseRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleaseRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rAB-ReleaseRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ReleaseRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleaseRequest_specs_1 = {
 	sizeof(struct RANAP_RAB_ReleaseRequest),
diff --git a/src/ranap/RANAP_RAB-ReleaseRequest.h b/src/ranap/RANAP_RAB-ReleaseRequest.h
index a4ba249..37a6630 100644
--- a/src/ranap/RANAP_RAB-ReleaseRequest.h
+++ b/src/ranap/RANAP_RAB-ReleaseRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ReleaseRequest */
 typedef struct RANAP_RAB_ReleaseRequest {
-	struct rAB_ReleaseRequest_ies {
+	struct raB_ReleaseRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rAB_ReleaseRequest_ies;
+	} raB_ReleaseRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c
index d97baa5..980e5ae 100644
--- a/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c
+++ b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ReleasedList-IuRelComp.h"
 
 static int
-memb_rabReleasedListIuRelComp_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ReleasedList_IuRelComp_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabReleasedListIuRelComp_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ReleasedList_IuRelComp_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabReleasedListIuRelComp_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ReleasedList_IuRelComp_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabReleasedListIuRelComp_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ReleasedList_IuRelComp_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabReleasedListIuRelComp_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabReleasedListIuRelComp_ies_specs_2 = {
-	sizeof(struct rabReleasedListIuRelComp_ies),
-	offsetof(struct rabReleasedListIuRelComp_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ReleasedList_IuRelComp_ies_specs_2 = {
+	sizeof(struct raB_ReleasedList_IuRelComp_ies),
+	offsetof(struct raB_ReleasedList_IuRelComp_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabReleasedListIuRelComp_ies_2 = {
-	"rabReleasedListIuRelComp-ies",
-	"rabReleasedListIuRelComp-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ReleasedList_IuRelComp_ies_2 = {
+	"raB-ReleasedList-IuRelComp-ies",
+	"raB-ReleasedList-IuRelComp-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabReleasedListIuRelComp_ies_tags_2,
-	sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2)
-		/sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabReleasedListIuRelComp_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2)
-		/sizeof(asn_DEF_rabReleasedListIuRelComp_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabReleasedListIuRelComp_ies_constr_2,
-	asn_MBR_rabReleasedListIuRelComp_ies_2,
+	asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2,
+	sizeof(asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleasedList_IuRelComp_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ReleasedList_IuRelComp_ies_constr_2,
+	asn_MBR_raB_ReleasedList_IuRelComp_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabReleasedListIuRelComp_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ReleasedList_IuRelComp_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleasedList_IuRelComp_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedList_IuRelComp, rabReleasedListIuRelComp_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedList_IuRelComp, raB_ReleasedList_IuRelComp_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabReleasedListIuRelComp_ies_2,
-		memb_rabReleasedListIuRelComp_ies_constraint_1,
-		&asn_PER_memb_rabReleasedListIuRelComp_ies_constr_2,
+		&asn_DEF_raB_ReleasedList_IuRelComp_ies_2,
+		memb_raB_ReleasedList_IuRelComp_ies_constraint_1,
+		&asn_PER_memb_raB_ReleasedList_IuRelComp_ies_constr_2,
 		0,
-		"rabReleasedListIuRelComp-ies"
+		"raB-ReleasedList-IuRelComp-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleasedList_IuRelComp_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleasedList_IuRelComp_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabReleasedListIuRelComp-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ReleasedList-IuRelComp-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleasedList_IuRelComp_specs_1 = {
 	sizeof(struct RANAP_RAB_ReleasedList_IuRelComp),
diff --git a/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.h b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.h
index 0a555e7..5fc1401 100644
--- a/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.h
+++ b/src/ranap/RANAP_RAB-ReleasedList-IuRelComp.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ReleasedList-IuRelComp */
 typedef struct RANAP_RAB_ReleasedList_IuRelComp {
-	struct rabReleasedListIuRelComp_ies {
+	struct raB_ReleasedList_IuRelComp_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabReleasedListIuRelComp_ies;
+	} raB_ReleasedList_IuRelComp_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-ReleasedList.c b/src/ranap/RANAP_RAB-ReleasedList.c
index d4f55d3..d052667 100644
--- a/src/ranap/RANAP_RAB-ReleasedList.c
+++ b/src/ranap/RANAP_RAB-ReleasedList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ReleasedList.h"
 
 static int
-memb_rabReleaesdList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ReleasedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabReleaesdList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ReleasedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabReleaesdList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ReleasedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabReleaesdList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ReleasedList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabReleaesdList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ReleasedList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabReleaesdList_ies_specs_2 = {
-	sizeof(struct rabReleaesdList_ies),
-	offsetof(struct rabReleaesdList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ReleasedList_ies_specs_2 = {
+	sizeof(struct raB_ReleasedList_ies),
+	offsetof(struct raB_ReleasedList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabReleaesdList_ies_2 = {
-	"rabReleaesdList-ies",
-	"rabReleaesdList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ReleasedList_ies_2 = {
+	"raB-ReleasedList-ies",
+	"raB-ReleasedList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabReleaesdList_ies_tags_2,
-	sizeof(asn_DEF_rabReleaesdList_ies_tags_2)
-		/sizeof(asn_DEF_rabReleaesdList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabReleaesdList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabReleaesdList_ies_tags_2)
-		/sizeof(asn_DEF_rabReleaesdList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabReleaesdList_ies_constr_2,
-	asn_MBR_rabReleaesdList_ies_2,
+	asn_DEF_raB_ReleasedList_ies_tags_2,
+	sizeof(asn_DEF_raB_ReleasedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleasedList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ReleasedList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ReleasedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_ReleasedList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ReleasedList_ies_constr_2,
+	asn_MBR_raB_ReleasedList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabReleaesdList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ReleasedList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ReleasedList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedList, rabReleaesdList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ReleasedList, raB_ReleasedList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabReleaesdList_ies_2,
-		memb_rabReleaesdList_ies_constraint_1,
-		&asn_PER_memb_rabReleaesdList_ies_constr_2,
+		&asn_DEF_raB_ReleasedList_ies_2,
+		memb_raB_ReleasedList_ies_constraint_1,
+		&asn_PER_memb_raB_ReleasedList_ies_constr_2,
 		0,
-		"rabReleaesdList-ies"
+		"raB-ReleasedList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ReleasedList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ReleasedList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabReleaesdList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ReleasedList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ReleasedList_specs_1 = {
 	sizeof(struct RANAP_RAB_ReleasedList),
diff --git a/src/ranap/RANAP_RAB-ReleasedList.h b/src/ranap/RANAP_RAB-ReleasedList.h
index 5d815d8..7a8e95d 100644
--- a/src/ranap/RANAP_RAB-ReleasedList.h
+++ b/src/ranap/RANAP_RAB-ReleasedList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ReleasedList */
 typedef struct RANAP_RAB_ReleasedList {
-	struct rabReleaesdList_ies {
+	struct raB_ReleasedList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabReleaesdList_ies;
+	} raB_ReleasedList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-RelocationReleaseList.c b/src/ranap/RANAP_RAB-RelocationReleaseList.c
index b836c55..cd7f6fd 100644
--- a/src/ranap/RANAP_RAB-RelocationReleaseList.c
+++ b/src/ranap/RANAP_RAB-RelocationReleaseList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-RelocationReleaseList.h"
 
 static int
-memb_rabRelocationReleaseList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_RelocationReleaseList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabRelocationReleaseList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_RelocationReleaseList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabRelocationReleaseList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_RelocationReleaseList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabRelocationReleaseList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_RelocationReleaseList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabRelocationReleaseList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_RelocationReleaseList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabRelocationReleaseList_ies_specs_2 = {
-	sizeof(struct rabRelocationReleaseList_ies),
-	offsetof(struct rabRelocationReleaseList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_RelocationReleaseList_ies_specs_2 = {
+	sizeof(struct raB_RelocationReleaseList_ies),
+	offsetof(struct raB_RelocationReleaseList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabRelocationReleaseList_ies_2 = {
-	"rabRelocationReleaseList-ies",
-	"rabRelocationReleaseList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_RelocationReleaseList_ies_2 = {
+	"raB-RelocationReleaseList-ies",
+	"raB-RelocationReleaseList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabRelocationReleaseList_ies_tags_2,
-	sizeof(asn_DEF_rabRelocationReleaseList_ies_tags_2)
-		/sizeof(asn_DEF_rabRelocationReleaseList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabRelocationReleaseList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabRelocationReleaseList_ies_tags_2)
-		/sizeof(asn_DEF_rabRelocationReleaseList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabRelocationReleaseList_ies_constr_2,
-	asn_MBR_rabRelocationReleaseList_ies_2,
+	asn_DEF_raB_RelocationReleaseList_ies_tags_2,
+	sizeof(asn_DEF_raB_RelocationReleaseList_ies_tags_2)
+		/sizeof(asn_DEF_raB_RelocationReleaseList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_RelocationReleaseList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_RelocationReleaseList_ies_tags_2)
+		/sizeof(asn_DEF_raB_RelocationReleaseList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_RelocationReleaseList_ies_constr_2,
+	asn_MBR_raB_RelocationReleaseList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabRelocationReleaseList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_RelocationReleaseList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_RelocationReleaseList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_RelocationReleaseList, rabRelocationReleaseList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_RelocationReleaseList, raB_RelocationReleaseList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabRelocationReleaseList_ies_2,
-		memb_rabRelocationReleaseList_ies_constraint_1,
-		&asn_PER_memb_rabRelocationReleaseList_ies_constr_2,
+		&asn_DEF_raB_RelocationReleaseList_ies_2,
+		memb_raB_RelocationReleaseList_ies_constraint_1,
+		&asn_PER_memb_raB_RelocationReleaseList_ies_constr_2,
 		0,
-		"rabRelocationReleaseList-ies"
+		"raB-RelocationReleaseList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_RelocationReleaseList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_RelocationReleaseList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabRelocationReleaseList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-RelocationReleaseList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_RelocationReleaseList_specs_1 = {
 	sizeof(struct RANAP_RAB_RelocationReleaseList),
diff --git a/src/ranap/RANAP_RAB-RelocationReleaseList.h b/src/ranap/RANAP_RAB-RelocationReleaseList.h
index a68f756..e64f148 100644
--- a/src/ranap/RANAP_RAB-RelocationReleaseList.h
+++ b/src/ranap/RANAP_RAB-RelocationReleaseList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-RelocationReleaseList */
 typedef struct RANAP_RAB_RelocationReleaseList {
-	struct rabRelocationReleaseList_ies {
+	struct raB_RelocationReleaseList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabRelocationReleaseList_ies;
+	} raB_RelocationReleaseList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.c b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.c
index d606080..0ade258 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.c
+++ b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-EnhRelocInfoReq.h"
 
 static int
-memb_rabSetupListEnhRelocInfoReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_EnhRelocInfoReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListEnhRelocInfoReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_EnhRelocInfoReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListEnhRelocInfoReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_EnhRelocInfoReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListEnhRelocInfoReq_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_EnhRelocInfoReq_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListEnhRelocInfoReq_ies_specs_2 = {
-	sizeof(struct rabSetupListEnhRelocInfoReq_ies),
-	offsetof(struct rabSetupListEnhRelocInfoReq_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_EnhRelocInfoReq_ies_specs_2 = {
+	sizeof(struct raB_SetupList_EnhRelocInfoReq_ies),
+	offsetof(struct raB_SetupList_EnhRelocInfoReq_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListEnhRelocInfoReq_ies_2 = {
-	"rabSetupListEnhRelocInfoReq-ies",
-	"rabSetupListEnhRelocInfoReq-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_2 = {
+	"raB-SetupList-EnhRelocInfoReq-ies",
+	"raB-SetupList-EnhRelocInfoReq-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhRelocInfoReq_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListEnhRelocInfoReq_ies_constr_2,
-	asn_MBR_rabSetupListEnhRelocInfoReq_ies_2,
+	asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_EnhRelocInfoReq_ies_constr_2,
+	asn_MBR_raB_SetupList_EnhRelocInfoReq_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListEnhRelocInfoReq_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_EnhRelocInfoReq_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_EnhRelocInfoReq_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhRelocInfoReq, rabSetupListEnhRelocInfoReq_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhRelocInfoReq, raB_SetupList_EnhRelocInfoReq_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListEnhRelocInfoReq_ies_2,
-		memb_rabSetupListEnhRelocInfoReq_ies_constraint_1,
-		&asn_PER_memb_rabSetupListEnhRelocInfoReq_ies_constr_2,
+		&asn_DEF_raB_SetupList_EnhRelocInfoReq_ies_2,
+		memb_raB_SetupList_EnhRelocInfoReq_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_EnhRelocInfoReq_ies_constr_2,
 		0,
-		"rabSetupListEnhRelocInfoReq-ies"
+		"raB-SetupList-EnhRelocInfoReq-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_EnhRelocInfoReq_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_EnhRelocInfoReq_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListEnhRelocInfoReq-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-EnhRelocInfoReq-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_EnhRelocInfoReq_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_EnhRelocInfoReq),
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.h b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.h
index 92f034e..bcc097b 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.h
+++ b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoReq.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-EnhRelocInfoReq */
 typedef struct RANAP_RAB_SetupList_EnhRelocInfoReq {
-	struct rabSetupListEnhRelocInfoReq_ies {
+	struct raB_SetupList_EnhRelocInfoReq_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListEnhRelocInfoReq_ies;
+	} raB_SetupList_EnhRelocInfoReq_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.c b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.c
index b580e2f..8c322fb 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.c
+++ b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-EnhRelocInfoRes.h"
 
 static int
-memb_rabSetupListEnhRelocInfoRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_EnhRelocInfoRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListEnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_EnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListEnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_EnhRelocInfoRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListEnhRelocInfoRes_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_EnhRelocInfoRes_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListEnhRelocInfoRes_ies_specs_2 = {
-	sizeof(struct rabSetupListEnhRelocInfoRes_ies),
-	offsetof(struct rabSetupListEnhRelocInfoRes_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_EnhRelocInfoRes_ies_specs_2 = {
+	sizeof(struct raB_SetupList_EnhRelocInfoRes_ies),
+	offsetof(struct raB_SetupList_EnhRelocInfoRes_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListEnhRelocInfoRes_ies_2 = {
-	"rabSetupListEnhRelocInfoRes-ies",
-	"rabSetupListEnhRelocInfoRes-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_2 = {
+	"raB-SetupList-EnhRelocInfoRes-ies",
+	"raB-SetupList-EnhRelocInfoRes-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhRelocInfoRes_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListEnhRelocInfoRes_ies_constr_2,
-	asn_MBR_rabSetupListEnhRelocInfoRes_ies_2,
+	asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_EnhRelocInfoRes_ies_constr_2,
+	asn_MBR_raB_SetupList_EnhRelocInfoRes_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListEnhRelocInfoRes_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_EnhRelocInfoRes_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_EnhRelocInfoRes_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhRelocInfoRes, rabSetupListEnhRelocInfoRes_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhRelocInfoRes, raB_SetupList_EnhRelocInfoRes_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListEnhRelocInfoRes_ies_2,
-		memb_rabSetupListEnhRelocInfoRes_ies_constraint_1,
-		&asn_PER_memb_rabSetupListEnhRelocInfoRes_ies_constr_2,
+		&asn_DEF_raB_SetupList_EnhRelocInfoRes_ies_2,
+		memb_raB_SetupList_EnhRelocInfoRes_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_EnhRelocInfoRes_ies_constr_2,
 		0,
-		"rabSetupListEnhRelocInfoRes-ies"
+		"raB-SetupList-EnhRelocInfoRes-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_EnhRelocInfoRes_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_EnhRelocInfoRes_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListEnhRelocInfoRes-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-EnhRelocInfoRes-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_EnhRelocInfoRes_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_EnhRelocInfoRes),
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.h b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.h
index 611bd03..dbb6a49 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.h
+++ b/src/ranap/RANAP_RAB-SetupList-EnhRelocInfoRes.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-EnhRelocInfoRes */
 typedef struct RANAP_RAB_SetupList_EnhRelocInfoRes {
-	struct rabSetupListEnhRelocInfoRes_ies {
+	struct raB_SetupList_EnhRelocInfoRes_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListEnhRelocInfoRes_ies;
+	} raB_SetupList_EnhRelocInfoRes_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.c b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.c
index 2b7579c..ada1e6d 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.c
+++ b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h"
 
 static int
-memb_rabSetupListEnhancedRElocCompleteReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_EnhancedRelocCompleteReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListEnhancedRElocCompleteReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_EnhancedRelocCompleteReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListEnhancedRElocCompleteReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_EnhancedRelocCompleteReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListEnhancedRElocCompleteReq_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_EnhancedRelocCompleteReq_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListEnhancedRElocCompleteReq_ies_specs_2 = {
-	sizeof(struct rabSetupListEnhancedRElocCompleteReq_ies),
-	offsetof(struct rabSetupListEnhancedRElocCompleteReq_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_EnhancedRelocCompleteReq_ies_specs_2 = {
+	sizeof(struct raB_SetupList_EnhancedRelocCompleteReq_ies),
+	offsetof(struct raB_SetupList_EnhancedRelocCompleteReq_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_2 = {
-	"rabSetupListEnhancedRElocCompleteReq-ies",
-	"rabSetupListEnhancedRElocCompleteReq-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_2 = {
+	"raB-SetupList-EnhancedRelocCompleteReq-ies",
+	"raB-SetupList-EnhancedRelocCompleteReq-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListEnhancedRElocCompleteReq_ies_constr_2,
-	asn_MBR_rabSetupListEnhancedRElocCompleteReq_ies_2,
+	asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_EnhancedRelocCompleteReq_ies_constr_2,
+	asn_MBR_raB_SetupList_EnhancedRelocCompleteReq_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListEnhancedRElocCompleteReq_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_EnhancedRelocCompleteReq_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_EnhancedRelocCompleteReq_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteReq, rabSetupListEnhancedRElocCompleteReq_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteReq, raB_SetupList_EnhancedRelocCompleteReq_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListEnhancedRElocCompleteReq_ies_2,
-		memb_rabSetupListEnhancedRElocCompleteReq_ies_constraint_1,
-		&asn_PER_memb_rabSetupListEnhancedRElocCompleteReq_ies_constr_2,
+		&asn_DEF_raB_SetupList_EnhancedRelocCompleteReq_ies_2,
+		memb_raB_SetupList_EnhancedRelocCompleteReq_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_EnhancedRelocCompleteReq_ies_constr_2,
 		0,
-		"rabSetupListEnhancedRElocCompleteReq-ies"
+		"raB-SetupList-EnhancedRelocCompleteReq-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_EnhancedRelocCompleteReq_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_EnhancedRelocCompleteReq_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListEnhancedRElocCompleteReq-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-EnhancedRelocCompleteReq-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_EnhancedRelocCompleteReq_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteReq),
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h
index 6a6c9bc..021d903 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h
+++ b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteReq.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-EnhancedRelocCompleteReq */
 typedef struct RANAP_RAB_SetupList_EnhancedRelocCompleteReq {
-	struct rabSetupListEnhancedRElocCompleteReq_ies {
+	struct raB_SetupList_EnhancedRelocCompleteReq_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListEnhancedRElocCompleteReq_ies;
+	} raB_SetupList_EnhancedRelocCompleteReq_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.c b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.c
index 6c3d464..2b99389 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.c
+++ b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h"
 
 static int
-memb_rabSetupListEnhancedRelocCompleteRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_EnhancedRelocCompleteRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListEnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_EnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListEnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_EnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListEnhancedRelocCompleteRes_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_EnhancedRelocCompleteRes_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListEnhancedRelocCompleteRes_ies_specs_2 = {
-	sizeof(struct rabSetupListEnhancedRelocCompleteRes_ies),
-	offsetof(struct rabSetupListEnhancedRelocCompleteRes_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_EnhancedRelocCompleteRes_ies_specs_2 = {
+	sizeof(struct raB_SetupList_EnhancedRelocCompleteRes_ies),
+	offsetof(struct raB_SetupList_EnhancedRelocCompleteRes_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_2 = {
-	"rabSetupListEnhancedRelocCompleteRes-ies",
-	"rabSetupListEnhancedRelocCompleteRes-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_2 = {
+	"raB-SetupList-EnhancedRelocCompleteRes-ies",
+	"raB-SetupList-EnhancedRelocCompleteRes-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListEnhancedRelocCompleteRes_ies_constr_2,
-	asn_MBR_rabSetupListEnhancedRelocCompleteRes_ies_2,
+	asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_EnhancedRelocCompleteRes_ies_constr_2,
+	asn_MBR_raB_SetupList_EnhancedRelocCompleteRes_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListEnhancedRelocCompleteRes_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_EnhancedRelocCompleteRes_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_EnhancedRelocCompleteRes_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteRes, rabSetupListEnhancedRelocCompleteRes_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteRes, raB_SetupList_EnhancedRelocCompleteRes_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListEnhancedRelocCompleteRes_ies_2,
-		memb_rabSetupListEnhancedRelocCompleteRes_ies_constraint_1,
-		&asn_PER_memb_rabSetupListEnhancedRelocCompleteRes_ies_constr_2,
+		&asn_DEF_raB_SetupList_EnhancedRelocCompleteRes_ies_2,
+		memb_raB_SetupList_EnhancedRelocCompleteRes_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_EnhancedRelocCompleteRes_ies_constr_2,
 		0,
-		"rabSetupListEnhancedRelocCompleteRes-ies"
+		"raB-SetupList-EnhancedRelocCompleteRes-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_EnhancedRelocCompleteRes_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_EnhancedRelocCompleteRes_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListEnhancedRelocCompleteRes-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-EnhancedRelocCompleteRes-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_EnhancedRelocCompleteRes_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_EnhancedRelocCompleteRes),
diff --git a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h
index d1f3999..0604962 100644
--- a/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h
+++ b/src/ranap/RANAP_RAB-SetupList-EnhancedRelocCompleteRes.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-EnhancedRelocCompleteRes */
 typedef struct RANAP_RAB_SetupList_EnhancedRelocCompleteRes {
-	struct rabSetupListEnhancedRelocCompleteRes_ies {
+	struct raB_SetupList_EnhancedRelocCompleteRes_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListEnhancedRelocCompleteRes_ies;
+	} raB_SetupList_EnhancedRelocCompleteRes_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-RelocReq.c b/src/ranap/RANAP_RAB-SetupList-RelocReq.c
index ac4b3a6..bb31b4f 100644
--- a/src/ranap/RANAP_RAB-SetupList-RelocReq.c
+++ b/src/ranap/RANAP_RAB-SetupList-RelocReq.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-RelocReq.h"
 
 static int
-memb_rabSetupListRelocReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_RelocReq_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListRelocReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_RelocReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListRelocReq_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_RelocReq_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListRelocReq_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_RelocReq_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListRelocReq_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_RelocReq_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListRelocReq_ies_specs_2 = {
-	sizeof(struct rabSetupListRelocReq_ies),
-	offsetof(struct rabSetupListRelocReq_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_RelocReq_ies_specs_2 = {
+	sizeof(struct raB_SetupList_RelocReq_ies),
+	offsetof(struct raB_SetupList_RelocReq_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListRelocReq_ies_2 = {
-	"rabSetupListRelocReq-ies",
-	"rabSetupListRelocReq-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_RelocReq_ies_2 = {
+	"raB-SetupList-RelocReq-ies",
+	"raB-SetupList-RelocReq-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListRelocReq_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListRelocReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListRelocReq_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListRelocReq_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListRelocReq_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListRelocReq_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListRelocReq_ies_constr_2,
-	asn_MBR_rabSetupListRelocReq_ies_2,
+	asn_DEF_raB_SetupList_RelocReq_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_RelocReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_RelocReq_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_RelocReq_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_RelocReq_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_RelocReq_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_RelocReq_ies_constr_2,
+	asn_MBR_raB_SetupList_RelocReq_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListRelocReq_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_RelocReq_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_RelocReq_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_RelocReq, rabSetupListRelocReq_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_RelocReq, raB_SetupList_RelocReq_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListRelocReq_ies_2,
-		memb_rabSetupListRelocReq_ies_constraint_1,
-		&asn_PER_memb_rabSetupListRelocReq_ies_constr_2,
+		&asn_DEF_raB_SetupList_RelocReq_ies_2,
+		memb_raB_SetupList_RelocReq_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_RelocReq_ies_constr_2,
 		0,
-		"rabSetupListRelocReq-ies"
+		"raB-SetupList-RelocReq-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_RelocReq_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_RelocReq_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListRelocReq-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-RelocReq-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_RelocReq_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_RelocReq),
diff --git a/src/ranap/RANAP_RAB-SetupList-RelocReq.h b/src/ranap/RANAP_RAB-SetupList-RelocReq.h
index 84a3a56..0638aa3 100644
--- a/src/ranap/RANAP_RAB-SetupList-RelocReq.h
+++ b/src/ranap/RANAP_RAB-SetupList-RelocReq.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-RelocReq */
 typedef struct RANAP_RAB_SetupList_RelocReq {
-	struct rabSetupListRelocReq_ies {
+	struct raB_SetupList_RelocReq_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListRelocReq_ies;
+	} raB_SetupList_RelocReq_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupList-RelocReqAck.c b/src/ranap/RANAP_RAB-SetupList-RelocReqAck.c
index 0c95d4d..347cb01 100644
--- a/src/ranap/RANAP_RAB-SetupList-RelocReqAck.c
+++ b/src/ranap/RANAP_RAB-SetupList-RelocReqAck.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupList-RelocReqAck.h"
 
 static int
-memb_rabSetupListRelocReqAck_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupList_RelocReqAck_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupListRelocReqAck_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupList_RelocReqAck_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupListRelocReqAck_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupList_RelocReqAck_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupListRelocReqAck_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupList_RelocReqAck_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupListRelocReqAck_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupListRelocReqAck_ies_specs_2 = {
-	sizeof(struct rabSetupListRelocReqAck_ies),
-	offsetof(struct rabSetupListRelocReqAck_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupList_RelocReqAck_ies_specs_2 = {
+	sizeof(struct raB_SetupList_RelocReqAck_ies),
+	offsetof(struct raB_SetupList_RelocReqAck_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupListRelocReqAck_ies_2 = {
-	"rabSetupListRelocReqAck-ies",
-	"rabSetupListRelocReqAck-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupList_RelocReqAck_ies_2 = {
+	"raB-SetupList-RelocReqAck-ies",
+	"raB-SetupList-RelocReqAck-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupListRelocReqAck_ies_tags_2,
-	sizeof(asn_DEF_rabSetupListRelocReqAck_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListRelocReqAck_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupListRelocReqAck_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupListRelocReqAck_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupListRelocReqAck_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupListRelocReqAck_ies_constr_2,
-	asn_MBR_rabSetupListRelocReqAck_ies_2,
+	asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupList_RelocReqAck_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupList_RelocReqAck_ies_constr_2,
+	asn_MBR_raB_SetupList_RelocReqAck_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupListRelocReqAck_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupList_RelocReqAck_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupList_RelocReqAck_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_RelocReqAck, rabSetupListRelocReqAck_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupList_RelocReqAck, raB_SetupList_RelocReqAck_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupListRelocReqAck_ies_2,
-		memb_rabSetupListRelocReqAck_ies_constraint_1,
-		&asn_PER_memb_rabSetupListRelocReqAck_ies_constr_2,
+		&asn_DEF_raB_SetupList_RelocReqAck_ies_2,
+		memb_raB_SetupList_RelocReqAck_ies_constraint_1,
+		&asn_PER_memb_raB_SetupList_RelocReqAck_ies_constr_2,
 		0,
-		"rabSetupListRelocReqAck-ies"
+		"raB-SetupList-RelocReqAck-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupList_RelocReqAck_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupList_RelocReqAck_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupListRelocReqAck-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupList-RelocReqAck-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupList_RelocReqAck_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupList_RelocReqAck),
diff --git a/src/ranap/RANAP_RAB-SetupList-RelocReqAck.h b/src/ranap/RANAP_RAB-SetupList-RelocReqAck.h
index a1b16dc..db35023 100644
--- a/src/ranap/RANAP_RAB-SetupList-RelocReqAck.h
+++ b/src/ranap/RANAP_RAB-SetupList-RelocReqAck.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupList-RelocReqAck */
 typedef struct RANAP_RAB_SetupList_RelocReqAck {
-	struct rabSetupListRelocReqAck_ies {
+	struct raB_SetupList_RelocReqAck_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupListRelocReqAck_ies;
+	} raB_SetupList_RelocReqAck_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupOrModifiedList.c b/src/ranap/RANAP_RAB-SetupOrModifiedList.c
index 499b8b7..46e5fba 100644
--- a/src/ranap/RANAP_RAB-SetupOrModifiedList.c
+++ b/src/ranap/RANAP_RAB-SetupOrModifiedList.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-SetupOrModifiedList.h"
 
 static int
-memb_rabSetupOrModifiedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_SetupOrModifiedList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabSetupOrModifiedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_SetupOrModifiedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabSetupOrModifiedList_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_SetupOrModifiedList_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabSetupOrModifiedList_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_SetupOrModifiedList_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabSetupOrModifiedList_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_SetupOrModifiedList_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabSetupOrModifiedList_ies_specs_2 = {
-	sizeof(struct rabSetupOrModifiedList_ies),
-	offsetof(struct rabSetupOrModifiedList_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_SetupOrModifiedList_ies_specs_2 = {
+	sizeof(struct raB_SetupOrModifiedList_ies),
+	offsetof(struct raB_SetupOrModifiedList_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabSetupOrModifiedList_ies_2 = {
-	"rabSetupOrModifiedList-ies",
-	"rabSetupOrModifiedList-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_SetupOrModifiedList_ies_2 = {
+	"raB-SetupOrModifiedList-ies",
+	"raB-SetupOrModifiedList-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabSetupOrModifiedList_ies_tags_2,
-	sizeof(asn_DEF_rabSetupOrModifiedList_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupOrModifiedList_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabSetupOrModifiedList_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabSetupOrModifiedList_ies_tags_2)
-		/sizeof(asn_DEF_rabSetupOrModifiedList_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabSetupOrModifiedList_ies_constr_2,
-	asn_MBR_rabSetupOrModifiedList_ies_2,
+	asn_DEF_raB_SetupOrModifiedList_ies_tags_2,
+	sizeof(asn_DEF_raB_SetupOrModifiedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupOrModifiedList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_SetupOrModifiedList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_SetupOrModifiedList_ies_tags_2)
+		/sizeof(asn_DEF_raB_SetupOrModifiedList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_SetupOrModifiedList_ies_constr_2,
+	asn_MBR_raB_SetupOrModifiedList_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabSetupOrModifiedList_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_SetupOrModifiedList_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_SetupOrModifiedList_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupOrModifiedList, rabSetupOrModifiedList_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_SetupOrModifiedList, raB_SetupOrModifiedList_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabSetupOrModifiedList_ies_2,
-		memb_rabSetupOrModifiedList_ies_constraint_1,
-		&asn_PER_memb_rabSetupOrModifiedList_ies_constr_2,
+		&asn_DEF_raB_SetupOrModifiedList_ies_2,
+		memb_raB_SetupOrModifiedList_ies_constraint_1,
+		&asn_PER_memb_raB_SetupOrModifiedList_ies_constr_2,
 		0,
-		"rabSetupOrModifiedList-ies"
+		"raB-SetupOrModifiedList-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_SetupOrModifiedList_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_SetupOrModifiedList_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabSetupOrModifiedList-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-SetupOrModifiedList-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_SetupOrModifiedList_specs_1 = {
 	sizeof(struct RANAP_RAB_SetupOrModifiedList),
diff --git a/src/ranap/RANAP_RAB-SetupOrModifiedList.h b/src/ranap/RANAP_RAB-SetupOrModifiedList.h
index 5165ea9..8372f74 100644
--- a/src/ranap/RANAP_RAB-SetupOrModifiedList.h
+++ b/src/ranap/RANAP_RAB-SetupOrModifiedList.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-SetupOrModifiedList */
 typedef struct RANAP_RAB_SetupOrModifiedList {
-	struct rabSetupOrModifiedList_ies {
+	struct raB_SetupOrModifiedList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabSetupOrModifiedList_ies;
+	} raB_SetupOrModifiedList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyList.c b/src/ranap/RANAP_RAB-SetupOrModifyList.c
new file mode 100644
index 0000000..59d72d4
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyList.c
@@ -0,0 +1,158 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+#include <constr_CHOICE.h>
+
+#include "RANAP_RAB-SetupOrModifyList.h"
+
+int
+RANAP_RAB_SetupOrModifyList_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	/* Replace with underlying type checker */
+	td->check_constraints = asn_DEF_RANAP_RAB_IE_ContainerPairList.check_constraints;
+	return td->check_constraints(td, sptr, ctfailcb, app_key);
+}
+
+/*
+ * This type is implemented using RANAP_RAB_IE_ContainerPairList,
+ * so here we adjust the DEF accordingly.
+ */
+static void
+RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_RANAP_RAB_IE_ContainerPairList.free_struct;
+	td->print_struct   = asn_DEF_RANAP_RAB_IE_ContainerPairList.print_struct;
+	td->check_constraints = asn_DEF_RANAP_RAB_IE_ContainerPairList.check_constraints;
+	td->ber_decoder    = asn_DEF_RANAP_RAB_IE_ContainerPairList.ber_decoder;
+	td->der_encoder    = asn_DEF_RANAP_RAB_IE_ContainerPairList.der_encoder;
+	td->xer_decoder    = asn_DEF_RANAP_RAB_IE_ContainerPairList.xer_decoder;
+	td->xer_encoder    = asn_DEF_RANAP_RAB_IE_ContainerPairList.xer_encoder;
+	td->uper_decoder   = asn_DEF_RANAP_RAB_IE_ContainerPairList.uper_decoder;
+	td->uper_encoder   = asn_DEF_RANAP_RAB_IE_ContainerPairList.uper_encoder;
+	td->aper_decoder   = asn_DEF_RANAP_RAB_IE_ContainerPairList.aper_decoder;
+	td->aper_encoder   = asn_DEF_RANAP_RAB_IE_ContainerPairList.aper_encoder;
+	/* The next four lines are here because of -fknown-extern-type */
+	td->tags           = asn_DEF_RANAP_RAB_IE_ContainerPairList.tags;
+	td->tags_count     = asn_DEF_RANAP_RAB_IE_ContainerPairList.tags_count;
+	td->all_tags       = asn_DEF_RANAP_RAB_IE_ContainerPairList.all_tags;
+	td->all_tags_count = asn_DEF_RANAP_RAB_IE_ContainerPairList.all_tags_count;
+	/* End of these lines */
+	if(!td->per_constraints)
+		td->per_constraints = asn_DEF_RANAP_RAB_IE_ContainerPairList.per_constraints;
+	td->elements       = asn_DEF_RANAP_RAB_IE_ContainerPairList.elements;
+	td->elements_count = asn_DEF_RANAP_RAB_IE_ContainerPairList.elements_count;
+	td->specifics      = asn_DEF_RANAP_RAB_IE_ContainerPairList.specifics;
+}
+
+void
+RANAP_RAB_SetupOrModifyList_free(asn_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+int
+RANAP_RAB_SetupOrModifyList_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_SetupOrModifyList_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const void *bufptr, size_t size, int tag_mode) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
+}
+
+asn_enc_rval_t
+RANAP_RAB_SetupOrModifyList_encode_der(asn_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_SetupOrModifyList_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
+}
+
+asn_enc_rval_t
+RANAP_RAB_SetupOrModifyList_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
+		int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
+}
+
+asn_dec_rval_t
+RANAP_RAB_SetupOrModifyList_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data);
+}
+
+asn_enc_rval_t
+RANAP_RAB_SetupOrModifyList_encode_uper(asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints,
+		void *structure, asn_per_outp_t *per_out) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->uper_encoder(td, constraints, structure, per_out);
+}
+
+asn_enc_rval_t
+RANAP_RAB_SetupOrModifyList_encode_aper(asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints,
+		void *structure, asn_per_outp_t *per_out) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->aper_encoder(td, constraints, structure, per_out);
+}
+
+asn_dec_rval_t
+RANAP_RAB_SetupOrModifyList_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+		asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {
+	RANAP_RAB_SetupOrModifyList_1_inherit_TYPE_descriptor(td);
+	return td->aper_decoder(opt_codec_ctx, td, constraints, structure, per_data);
+}
+
+asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyList = {
+	"RANAP_RAB-SetupOrModifyList",
+	"RANAP_RAB-SetupOrModifyList",
+	RANAP_RAB_SetupOrModifyList_free,
+	RANAP_RAB_SetupOrModifyList_print,
+	RANAP_RAB_SetupOrModifyList_constraint,
+	RANAP_RAB_SetupOrModifyList_decode_ber,
+	RANAP_RAB_SetupOrModifyList_encode_der,
+	RANAP_RAB_SetupOrModifyList_decode_xer,
+	RANAP_RAB_SetupOrModifyList_encode_xer,
+	RANAP_RAB_SetupOrModifyList_decode_uper,
+	RANAP_RAB_SetupOrModifyList_encode_uper,
+	RANAP_RAB_SetupOrModifyList_decode_aper,
+	RANAP_RAB_SetupOrModifyList_encode_aper,
+	CHOICE_outmost_tag,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	0,	/* No PER visible constraints */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
diff --git a/src/ranap/RANAP_RAB-SetupOrModifyList.h b/src/ranap/RANAP_RAB-SetupOrModifyList.h
new file mode 100644
index 0000000..bd51f7f
--- /dev/null
+++ b/src/ranap/RANAP_RAB-SetupOrModifyList.h
@@ -0,0 +1,42 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#ifndef	_RANAP_RAB_SetupOrModifyList_H_
+#define	_RANAP_RAB_SetupOrModifyList_H_
+
+
+#include <asn_application.h>
+
+/* Including external dependencies */
+#include "RANAP_RAB-IE-ContainerPairList.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* RANAP_RAB-SetupOrModifyList */
+typedef RANAP_RAB_IE_ContainerPairList_t	 RANAP_RAB_SetupOrModifyList_t;
+
+/* Implementation */
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_SetupOrModifyList;
+asn_struct_free_f RANAP_RAB_SetupOrModifyList_free;
+asn_struct_print_f RANAP_RAB_SetupOrModifyList_print;
+asn_constr_check_f RANAP_RAB_SetupOrModifyList_constraint;
+ber_type_decoder_f RANAP_RAB_SetupOrModifyList_decode_ber;
+der_type_encoder_f RANAP_RAB_SetupOrModifyList_encode_der;
+xer_type_decoder_f RANAP_RAB_SetupOrModifyList_decode_xer;
+xer_type_encoder_f RANAP_RAB_SetupOrModifyList_encode_xer;
+per_type_decoder_f RANAP_RAB_SetupOrModifyList_decode_uper;
+per_type_encoder_f RANAP_RAB_SetupOrModifyList_encode_uper;
+per_type_decoder_f RANAP_RAB_SetupOrModifyList_decode_aper;
+per_type_encoder_f RANAP_RAB_SetupOrModifyList_encode_aper;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* _RANAP_RAB_SetupOrModifyList_H_ */
+#include <asn_internal.h>
diff --git a/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.c b/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.c
index de451a0..cb92308 100644
--- a/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.c
+++ b/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.c
@@ -7,7 +7,7 @@
 #include "RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h"
 
 static int
-memb_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rabToBeReleasedListEnhancedRelocCompleteRes_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rabToBeReleasedListEnhancedRelocCompleteRes_ies_specs_2 = {
-	sizeof(struct rabToBeReleasedListEnhancedRelocCompleteRes_ies),
-	offsetof(struct rabToBeReleasedListEnhancedRelocCompleteRes_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_specs_2 = {
+	sizeof(struct raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies),
+	offsetof(struct raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_2 = {
-	"rabToBeReleasedListEnhancedRelocCompleteRes-ies",
-	"rabToBeReleasedListEnhancedRelocCompleteRes-ies",
+asn_TYPE_descriptor_t asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_2 = {
+	"raB-ToBeReleasedList-EnhancedRelocCompleteRes-ies",
+	"raB-ToBeReleasedList-EnhancedRelocCompleteRes-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2,
-	sizeof(asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2)
-		/sizeof(asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2)
-		/sizeof(asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constr_2,
-	asn_MBR_rabToBeReleasedListEnhancedRelocCompleteRes_ies_2,
+	asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2,
+	sizeof(asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2)
+		/sizeof(asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constr_2,
+	asn_MBR_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rabToBeReleasedListEnhancedRelocCompleteRes_ies_specs_2	/* Additional specs */
+	&asn_SPC_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes, rabToBeReleasedListEnhancedRelocCompleteRes_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes, raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rabToBeReleasedListEnhancedRelocCompleteRes_ies_2,
-		memb_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constraint_1,
-		&asn_PER_memb_rabToBeReleasedListEnhancedRelocCompleteRes_ies_constr_2,
+		&asn_DEF_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_2,
+		memb_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constraint_1,
+		&asn_PER_memb_raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies_constr_2,
 		0,
-		"rabToBeReleasedListEnhancedRelocCompleteRes-ies"
+		"raB-ToBeReleasedList-EnhancedRelocCompleteRes-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rabToBeReleasedListEnhancedRelocCompleteRes-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raB-ToBeReleasedList-EnhancedRelocCompleteRes-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes_specs_1 = {
 	sizeof(struct RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes),
diff --git a/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h b/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h
index cffd964..d41b79d 100644
--- a/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h
+++ b/src/ranap/RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RAB-ToBeReleasedList-EnhancedRelocCompleteRes */
 typedef struct RANAP_RAB_ToBeReleasedList_EnhancedRelocCompleteRes {
-	struct rabToBeReleasedListEnhancedRelocCompleteRes_ies {
+	struct raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabToBeReleasedListEnhancedRelocCompleteRes_ies;
+	} raB_ToBeReleasedList_EnhancedRelocCompleteRes_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RABDataVolumeReport.c b/src/ranap/RANAP_RABDataVolumeReport.c
index 06d21b6..966b4db 100644
--- a/src/ranap/RANAP_RABDataVolumeReport.c
+++ b/src/ranap/RANAP_RABDataVolumeReport.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 1,  1,  1l,  2l }	/* (SIZE(1..2)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, dl_UnsuccessfullyTransmittedDataVolume),
+static asn_TYPE_member_t asn_MBR_MemberN_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberN, dl_UnsuccessfullyTransmittedDataVolume),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_UnsuccessfullyTransmittedDataVolume,
@@ -21,7 +21,7 @@
 		0,
 		"dl-UnsuccessfullyTransmittedDataVolume"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, dataVolumeReference),
+	{ ATF_POINTER, 2, offsetof(struct MemberN, dataVolumeReference),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_DataVolumeReference,
@@ -30,7 +30,7 @@
 		0,
 		"dataVolumeReference"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberN, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberN_oms_2[] = { 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberN_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberN_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-UnsuccessfullyTransmittedDataVolume */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dataVolumeReference */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberN_specs_2 = {
+	sizeof(struct MemberN),
+	offsetof(struct MemberN, _asn_ctx),
+	asn_MAP_MemberN_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberN_oms_2,	/* Optional members */
 	2, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberN_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberN_tags_2,
+	sizeof(asn_DEF_MemberN_tags_2)
+		/sizeof(asn_DEF_MemberN_tags_2[0]), /* 1 */
+	asn_DEF_MemberN_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberN_tags_2)
+		/sizeof(asn_DEF_MemberN_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberN_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberN_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RABDataVolumeReport_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberN_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_RABDataVolumeReport.h b/src/ranap/RANAP_RABDataVolumeReport.h
index 904c275..67bec9d 100644
--- a/src/ranap/RANAP_RABDataVolumeReport.h
+++ b/src/ranap/RANAP_RABDataVolumeReport.h
@@ -24,7 +24,7 @@
 
 /* RANAP_RABDataVolumeReport */
 typedef struct RANAP_RABDataVolumeReport {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberN {
 		RANAP_UnsuccessfullyTransmittedDataVolume_t	 dl_UnsuccessfullyTransmittedDataVolume;
 		RANAP_DataVolumeReference_t	*dataVolumeReference	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_RABParametersList.c b/src/ranap/RANAP_RABParametersList.c
index d9193c3..5e9288f 100644
--- a/src/ranap/RANAP_RABParametersList.c
+++ b/src/ranap/RANAP_RABParametersList.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 8,  8,  1l,  256l }	/* (SIZE(1..256)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_MemberA_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, rab_Id),
+static asn_TYPE_member_t asn_MBR_MemberB_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberB, rab_Id),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_RAB_ID,
@@ -21,7 +21,7 @@
 		0,
 		"rab-Id"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, cn_domain),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberB, cn_domain),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_CN_DomainIndicator,
@@ -30,7 +30,7 @@
 		0,
 		"cn-domain"
 		},
-	{ ATF_POINTER, 3, offsetof(struct MemberA, rabDataVolumeReport),
+	{ ATF_POINTER, 3, offsetof(struct MemberB, rabDataVolumeReport),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_RABDataVolumeReport,
@@ -39,7 +39,7 @@
 		0,
 		"rabDataVolumeReport"
 		},
-	{ ATF_POINTER, 2, offsetof(struct MemberA, upInformation),
+	{ ATF_POINTER, 2, offsetof(struct MemberB, upInformation),
 		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_UPInformation,
@@ -48,7 +48,7 @@
 		0,
 		"upInformation"
 		},
-	{ ATF_POINTER, 1, offsetof(struct MemberA, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberB, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -58,29 +58,29 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_MemberA_oms_2[] = { 2, 3, 4 };
-static const ber_tlv_tag_t asn_DEF_MemberA_tags_2[] = {
+static const int asn_MAP_MemberB_oms_2[] = { 2, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_MemberB_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_MemberA_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberB_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rab-Id */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cn-domain */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rabDataVolumeReport */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* upInformation */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_MemberA_specs_2 = {
-	sizeof(struct MemberA),
-	offsetof(struct MemberA, _asn_ctx),
-	asn_MAP_MemberA_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberB_specs_2 = {
+	sizeof(struct MemberB),
+	offsetof(struct MemberB, _asn_ctx),
+	asn_MAP_MemberB_tag2el_2,
 	5,	/* Count of tags in the map */
-	asn_MAP_MemberA_oms_2,	/* Optional members */
+	asn_MAP_MemberB_oms_2,	/* Optional members */
 	3, 0,	/* Root/Additions */
 	4,	/* Start extensions */
 	6	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_MemberA_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberB_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -95,23 +95,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_MemberA_tags_2,
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
-	asn_DEF_MemberA_tags_2,	/* Same as above */
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
+	asn_DEF_MemberB_tags_2,
+	sizeof(asn_DEF_MemberB_tags_2)
+		/sizeof(asn_DEF_MemberB_tags_2[0]), /* 1 */
+	asn_DEF_MemberB_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberB_tags_2)
+		/sizeof(asn_DEF_MemberB_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_MemberA_2,
+	asn_MBR_MemberB_2,
 	5,	/* Elements count */
-	&asn_SPC_MemberA_specs_2	/* Additional specs */
+	&asn_SPC_MemberB_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RABParametersList_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_MemberA_2,
+		&asn_DEF_MemberB_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_RABParametersList.h b/src/ranap/RANAP_RABParametersList.h
index 0208cda..8c702b4 100644
--- a/src/ranap/RANAP_RABParametersList.h
+++ b/src/ranap/RANAP_RABParametersList.h
@@ -26,7 +26,7 @@
 
 /* RANAP_RABParametersList */
 typedef struct RANAP_RABParametersList {
-	A_SEQUENCE_OF(struct MemberA {
+	A_SEQUENCE_OF(struct MemberB {
 		RANAP_RAB_ID_t	 rab_Id;
 		RANAP_CN_DomainIndicator_t	 cn_domain;
 		RANAP_RABDataVolumeReport_t	*rabDataVolumeReport	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_RABs-ContextFailedtoTransferList.c b/src/ranap/RANAP_RABs-ContextFailedtoTransferList.c
new file mode 100644
index 0000000..3d095f3
--- /dev/null
+++ b/src/ranap/RANAP_RABs-ContextFailedtoTransferList.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RABs-ContextFailedtoTransferList.h"
+
+static int
+memb_raBs_ContextFailedtoTransferList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_raBs_ContextFailedtoTransferList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_raBs_ContextFailedtoTransferList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_raBs_ContextFailedtoTransferList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_raBs_ContextFailedtoTransferList_ies_specs_2 = {
+	sizeof(struct raBs_ContextFailedtoTransferList_ies),
+	offsetof(struct raBs_ContextFailedtoTransferList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_raBs_ContextFailedtoTransferList_ies_2 = {
+	"raBs-ContextFailedtoTransferList-ies",
+	"raBs-ContextFailedtoTransferList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2,
+	sizeof(asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2)
+		/sizeof(asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2)
+		/sizeof(asn_DEF_raBs_ContextFailedtoTransferList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raBs_ContextFailedtoTransferList_ies_constr_2,
+	asn_MBR_raBs_ContextFailedtoTransferList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_raBs_ContextFailedtoTransferList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RABs_ContextFailedtoTransferList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_ContextFailedtoTransferList, raBs_ContextFailedtoTransferList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_raBs_ContextFailedtoTransferList_ies_2,
+		memb_raBs_ContextFailedtoTransferList_ies_constraint_1,
+		&asn_PER_memb_raBs_ContextFailedtoTransferList_ies_constr_2,
+		0,
+		"raBs-ContextFailedtoTransferList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RABs_ContextFailedtoTransferList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raBs-ContextFailedtoTransferList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RABs_ContextFailedtoTransferList_specs_1 = {
+	sizeof(struct RANAP_RABs_ContextFailedtoTransferList),
+	offsetof(struct RANAP_RABs_ContextFailedtoTransferList, _asn_ctx),
+	asn_MAP_RANAP_RABs_ContextFailedtoTransferList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_ContextFailedtoTransferList = {
+	"RANAP_RABs-ContextFailedtoTransferList",
+	"RANAP_RABs-ContextFailedtoTransferList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1,
+	sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_ContextFailedtoTransferList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RABs_ContextFailedtoTransferList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RABs_ContextFailedtoTransferList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-ContextFailedtoTransferList.h b/src/ranap/RANAP_RABs-ContextFailedtoTransferList.h
similarity index 60%
rename from src/ranap/RANAP_RAB-ContextFailedtoTransferList.h
rename to src/ranap/RANAP_RABs-ContextFailedtoTransferList.h
index 85c07b3..fdd471c 100644
--- a/src/ranap/RANAP_RAB-ContextFailedtoTransferList.h
+++ b/src/ranap/RANAP_RABs-ContextFailedtoTransferList.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_ContextFailedtoTransferList_H_
-#define	_RANAP_RAB_ContextFailedtoTransferList_H_
+#ifndef	_RANAP_RABs_ContextFailedtoTransferList_H_
+#define	_RANAP_RABs_ContextFailedtoTransferList_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-ContextFailedtoTransferList */
-typedef struct RANAP_RAB_ContextFailedtoTransferList {
-	struct rabContextFailedtoTransferList_ies {
+/* RANAP_RABs-ContextFailedtoTransferList */
+typedef struct RANAP_RABs_ContextFailedtoTransferList {
+	struct raBs_ContextFailedtoTransferList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabContextFailedtoTransferList_ies;
+	} raBs_ContextFailedtoTransferList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_ContextFailedtoTransferList_t;
+} RANAP_RABs_ContextFailedtoTransferList_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_ContextFailedtoTransferList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_ContextFailedtoTransferList;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_ContextFailedtoTransferList_H_ */
+#endif	/* _RANAP_RABs_ContextFailedtoTransferList_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_RABs-failed-to-reportList.c b/src/ranap/RANAP_RABs-failed-to-reportList.c
new file mode 100644
index 0000000..fe6ae02
--- /dev/null
+++ b/src/ranap/RANAP_RABs-failed-to-reportList.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RABs-failed-to-reportList.h"
+
+static int
+memb_raBs_failed_to_reportList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_raBs_failed_to_reportList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_raBs_failed_to_reportList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_raBs_failed_to_reportList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_raBs_failed_to_reportList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_raBs_failed_to_reportList_ies_specs_2 = {
+	sizeof(struct raBs_failed_to_reportList_ies),
+	offsetof(struct raBs_failed_to_reportList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_raBs_failed_to_reportList_ies_2 = {
+	"raBs-failed-to-reportList-ies",
+	"raBs-failed-to-reportList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_raBs_failed_to_reportList_ies_tags_2,
+	sizeof(asn_DEF_raBs_failed_to_reportList_ies_tags_2)
+		/sizeof(asn_DEF_raBs_failed_to_reportList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_raBs_failed_to_reportList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_raBs_failed_to_reportList_ies_tags_2)
+		/sizeof(asn_DEF_raBs_failed_to_reportList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_raBs_failed_to_reportList_ies_constr_2,
+	asn_MBR_raBs_failed_to_reportList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_raBs_failed_to_reportList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RABs_failed_to_reportList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RABs_failed_to_reportList, raBs_failed_to_reportList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_raBs_failed_to_reportList_ies_2,
+		memb_raBs_failed_to_reportList_ies_constraint_1,
+		&asn_PER_memb_raBs_failed_to_reportList_ies_constr_2,
+		0,
+		"raBs-failed-to-reportList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RABs_failed_to_reportList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RABs_failed_to_reportList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* raBs-failed-to-reportList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RABs_failed_to_reportList_specs_1 = {
+	sizeof(struct RANAP_RABs_failed_to_reportList),
+	offsetof(struct RANAP_RABs_failed_to_reportList, _asn_ctx),
+	asn_MAP_RANAP_RABs_failed_to_reportList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_failed_to_reportList = {
+	"RANAP_RABs-failed-to-reportList",
+	"RANAP_RABs-failed-to-reportList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RABs_failed_to_reportList_tags_1,
+	sizeof(asn_DEF_RANAP_RABs_failed_to_reportList_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_failed_to_reportList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RABs_failed_to_reportList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RABs_failed_to_reportList_tags_1)
+		/sizeof(asn_DEF_RANAP_RABs_failed_to_reportList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RABs_failed_to_reportList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RABs_failed_to_reportList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.h b/src/ranap/RANAP_RABs-failed-to-reportList.h
similarity index 63%
copy from src/ranap/RANAP_RAB-FailedtoReportList.h
copy to src/ranap/RANAP_RABs-failed-to-reportList.h
index 71a2024..1e8fdeb 100644
--- a/src/ranap/RANAP_RAB-FailedtoReportList.h
+++ b/src/ranap/RANAP_RABs-failed-to-reportList.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_FailedtoReportList_H_
-#define	_RANAP_RAB_FailedtoReportList_H_
+#ifndef	_RANAP_RABs_failed_to_reportList_H_
+#define	_RANAP_RABs_failed_to_reportList_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-FailedtoReportList */
-typedef struct RANAP_RAB_FailedtoReportList {
-	struct rabFailedtoReportList_ies {
+/* RANAP_RABs-failed-to-reportList */
+typedef struct RANAP_RABs_failed_to_reportList {
+	struct raBs_failed_to_reportList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedtoReportList_ies;
+	} raBs_failed_to_reportList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_FailedtoReportList_t;
+} RANAP_RABs_failed_to_reportList_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RABs_failed_to_reportList;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_FailedtoReportList_H_ */
+#endif	/* _RANAP_RABs_failed_to_reportList_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.c b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.c
index a79bbda..5a22a08 100644
--- a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.c
+++ b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_RANAP-EnhancedRelocationInformationRequest.h"
 
 static int
-memb_rANAP_EnhancedRelocationInformationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_ranaP_EnhancedRelocationInformationRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rANAP_EnhancedRelocationInformationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ranaP_EnhancedRelocationInformationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rANAP_EnhancedRelocationInformationRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_ranaP_EnhancedRelocationInformationRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rANAP_EnhancedRelocationInformationRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_ranaP_EnhancedRelocationInformationRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rANAP_EnhancedRelocationInformationRequest_ies_specs_2 = {
-	sizeof(struct rANAP_EnhancedRelocationInformationRequest_ies),
-	offsetof(struct rANAP_EnhancedRelocationInformationRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_ranaP_EnhancedRelocationInformationRequest_ies_specs_2 = {
+	sizeof(struct ranaP_EnhancedRelocationInformationRequest_ies),
+	offsetof(struct ranaP_EnhancedRelocationInformationRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_2 = {
-	"rANAP-EnhancedRelocationInformationRequest-ies",
-	"rANAP-EnhancedRelocationInformationRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_2 = {
+	"ranaP-EnhancedRelocationInformationRequest-ies",
+	"ranaP-EnhancedRelocationInformationRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2,
-	sizeof(asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rANAP_EnhancedRelocationInformationRequest_ies_constr_2,
-	asn_MBR_rANAP_EnhancedRelocationInformationRequest_ies_2,
+	asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2,
+	sizeof(asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_ranaP_EnhancedRelocationInformationRequest_ies_constr_2,
+	asn_MBR_ranaP_EnhancedRelocationInformationRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rANAP_EnhancedRelocationInformationRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_ranaP_EnhancedRelocationInformationRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RANAP_EnhancedRelocationInformationRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_EnhancedRelocationInformationRequest, rANAP_EnhancedRelocationInformationRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_EnhancedRelocationInformationRequest, ranaP_EnhancedRelocationInformationRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rANAP_EnhancedRelocationInformationRequest_ies_2,
-		memb_rANAP_EnhancedRelocationInformationRequest_ies_constraint_1,
-		&asn_PER_memb_rANAP_EnhancedRelocationInformationRequest_ies_constr_2,
+		&asn_DEF_ranaP_EnhancedRelocationInformationRequest_ies_2,
+		memb_ranaP_EnhancedRelocationInformationRequest_ies_constraint_1,
+		&asn_PER_memb_ranaP_EnhancedRelocationInformationRequest_ies_constr_2,
 		0,
-		"rANAP-EnhancedRelocationInformationRequest-ies"
+		"ranaP-EnhancedRelocationInformationRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RANAP_EnhancedRelocationInformationRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RANAP_EnhancedRelocationInformationRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rANAP-EnhancedRelocationInformationRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranaP-EnhancedRelocationInformationRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RANAP_EnhancedRelocationInformationRequest_specs_1 = {
 	sizeof(struct RANAP_RANAP_EnhancedRelocationInformationRequest),
diff --git a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.h b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.h
index 6fdaead..2fd0758 100644
--- a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.h
+++ b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RANAP-EnhancedRelocationInformationRequest */
 typedef struct RANAP_RANAP_EnhancedRelocationInformationRequest {
-	struct rANAP_EnhancedRelocationInformationRequest_ies {
+	struct ranaP_EnhancedRelocationInformationRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rANAP_EnhancedRelocationInformationRequest_ies;
+	} ranaP_EnhancedRelocationInformationRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.c b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.c
index 6f29883..fbd0381 100644
--- a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.c
+++ b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_RANAP-EnhancedRelocationInformationResponse.h"
 
 static int
-memb_rANAP_EnhancedRelocationInformationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_ranaP_EnhancedRelocationInformationResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rANAP_EnhancedRelocationInformationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ranaP_EnhancedRelocationInformationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rANAP_EnhancedRelocationInformationResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_ranaP_EnhancedRelocationInformationResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rANAP_EnhancedRelocationInformationResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_ranaP_EnhancedRelocationInformationResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rANAP_EnhancedRelocationInformationResponse_ies_specs_2 = {
-	sizeof(struct rANAP_EnhancedRelocationInformationResponse_ies),
-	offsetof(struct rANAP_EnhancedRelocationInformationResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_ranaP_EnhancedRelocationInformationResponse_ies_specs_2 = {
+	sizeof(struct ranaP_EnhancedRelocationInformationResponse_ies),
+	offsetof(struct ranaP_EnhancedRelocationInformationResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_2 = {
-	"rANAP-EnhancedRelocationInformationResponse-ies",
-	"rANAP-EnhancedRelocationInformationResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_2 = {
+	"ranaP-EnhancedRelocationInformationResponse-ies",
+	"ranaP-EnhancedRelocationInformationResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2,
-	sizeof(asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rANAP_EnhancedRelocationInformationResponse_ies_constr_2,
-	asn_MBR_rANAP_EnhancedRelocationInformationResponse_ies_2,
+	asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2,
+	sizeof(asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_ranaP_EnhancedRelocationInformationResponse_ies_constr_2,
+	asn_MBR_ranaP_EnhancedRelocationInformationResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rANAP_EnhancedRelocationInformationResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_ranaP_EnhancedRelocationInformationResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RANAP_EnhancedRelocationInformationResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_EnhancedRelocationInformationResponse, rANAP_EnhancedRelocationInformationResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_EnhancedRelocationInformationResponse, ranaP_EnhancedRelocationInformationResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rANAP_EnhancedRelocationInformationResponse_ies_2,
-		memb_rANAP_EnhancedRelocationInformationResponse_ies_constraint_1,
-		&asn_PER_memb_rANAP_EnhancedRelocationInformationResponse_ies_constr_2,
+		&asn_DEF_ranaP_EnhancedRelocationInformationResponse_ies_2,
+		memb_ranaP_EnhancedRelocationInformationResponse_ies_constraint_1,
+		&asn_PER_memb_ranaP_EnhancedRelocationInformationResponse_ies_constr_2,
 		0,
-		"rANAP-EnhancedRelocationInformationResponse-ies"
+		"ranaP-EnhancedRelocationInformationResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RANAP_EnhancedRelocationInformationResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RANAP_EnhancedRelocationInformationResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rANAP-EnhancedRelocationInformationResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranaP-EnhancedRelocationInformationResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RANAP_EnhancedRelocationInformationResponse_specs_1 = {
 	sizeof(struct RANAP_RANAP_EnhancedRelocationInformationResponse),
diff --git a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.h b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.h
index f1ee9e8..947f284 100644
--- a/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.h
+++ b/src/ranap/RANAP_RANAP-EnhancedRelocationInformationResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RANAP-EnhancedRelocationInformationResponse */
 typedef struct RANAP_RANAP_EnhancedRelocationInformationResponse {
-	struct rANAP_EnhancedRelocationInformationResponse_ies {
+	struct ranaP_EnhancedRelocationInformationResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rANAP_EnhancedRelocationInformationResponse_ies;
+	} ranaP_EnhancedRelocationInformationResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RANAP-RelocationInformation.c b/src/ranap/RANAP_RANAP-RelocationInformation.c
index fd7ec95..6b5df8d 100644
--- a/src/ranap/RANAP_RANAP-RelocationInformation.c
+++ b/src/ranap/RANAP_RANAP-RelocationInformation.c
@@ -7,7 +7,7 @@
 #include "RANAP_RANAP-RelocationInformation.h"
 
 static int
-memb_rANAP_RelocationInformation_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_ranaP_RelocationInformation_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_rANAP_RelocationInformation_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ranaP_RelocationInformation_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_rANAP_RelocationInformation_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_ranaP_RelocationInformation_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_rANAP_RelocationInformation_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_ranaP_RelocationInformation_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_rANAP_RelocationInformation_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ranaP_RelocationInformation_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_rANAP_RelocationInformation_ies_specs_2 = {
-	sizeof(struct rANAP_RelocationInformation_ies),
-	offsetof(struct rANAP_RelocationInformation_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_ranaP_RelocationInformation_ies_specs_2 = {
+	sizeof(struct ranaP_RelocationInformation_ies),
+	offsetof(struct ranaP_RelocationInformation_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_rANAP_RelocationInformation_ies_2 = {
-	"rANAP-RelocationInformation-ies",
-	"rANAP-RelocationInformation-ies",
+asn_TYPE_descriptor_t asn_DEF_ranaP_RelocationInformation_ies_2 = {
+	"ranaP-RelocationInformation-ies",
+	"ranaP-RelocationInformation-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_rANAP_RelocationInformation_ies_tags_2,
-	sizeof(asn_DEF_rANAP_RelocationInformation_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_RelocationInformation_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_rANAP_RelocationInformation_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_rANAP_RelocationInformation_ies_tags_2)
-		/sizeof(asn_DEF_rANAP_RelocationInformation_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_rANAP_RelocationInformation_ies_constr_2,
-	asn_MBR_rANAP_RelocationInformation_ies_2,
+	asn_DEF_ranaP_RelocationInformation_ies_tags_2,
+	sizeof(asn_DEF_ranaP_RelocationInformation_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_RelocationInformation_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ranaP_RelocationInformation_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ranaP_RelocationInformation_ies_tags_2)
+		/sizeof(asn_DEF_ranaP_RelocationInformation_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_ranaP_RelocationInformation_ies_constr_2,
+	asn_MBR_ranaP_RelocationInformation_ies_2,
 	1,	/* Single element */
-	&asn_SPC_rANAP_RelocationInformation_ies_specs_2	/* Additional specs */
+	&asn_SPC_ranaP_RelocationInformation_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_RANAP_RelocationInformation_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_RelocationInformation, rANAP_RelocationInformation_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RANAP_RelocationInformation, ranaP_RelocationInformation_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_rANAP_RelocationInformation_ies_2,
-		memb_rANAP_RelocationInformation_ies_constraint_1,
-		&asn_PER_memb_rANAP_RelocationInformation_ies_constr_2,
+		&asn_DEF_ranaP_RelocationInformation_ies_2,
+		memb_ranaP_RelocationInformation_ies_constraint_1,
+		&asn_PER_memb_ranaP_RelocationInformation_ies_constr_2,
 		0,
-		"rANAP-RelocationInformation-ies"
+		"ranaP-RelocationInformation-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_RANAP_RelocationInformation_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_RANAP_RelocationInformation_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rANAP-RelocationInformation-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ranaP-RelocationInformation-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RANAP_RelocationInformation_specs_1 = {
 	sizeof(struct RANAP_RANAP_RelocationInformation),
diff --git a/src/ranap/RANAP_RANAP-RelocationInformation.h b/src/ranap/RANAP_RANAP-RelocationInformation.h
index 199d85c..1b2c10e 100644
--- a/src/ranap/RANAP_RANAP-RelocationInformation.h
+++ b/src/ranap/RANAP_RANAP-RelocationInformation.h
@@ -22,12 +22,12 @@
 
 /* RANAP_RANAP-RelocationInformation */
 typedef struct RANAP_RANAP_RelocationInformation {
-	struct rANAP_RelocationInformation_ies {
+	struct ranaP_RelocationInformation_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rANAP_RelocationInformation_ies;
+	} ranaP_RelocationInformation_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_RedirectionIndication.c b/src/ranap/RANAP_RedirectionIndication.c
new file mode 100644
index 0000000..a6c7242
--- /dev/null
+++ b/src/ranap/RANAP_RedirectionIndication.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+
+#include "RANAP_RedirectionIndication.h"
+
+static int
+memb_redirectionIndication_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_redirectionIndication_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_redirectionIndication_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_redirectionIndication_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_redirectionIndication_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_redirectionIndication_ies_specs_2 = {
+	sizeof(struct redirectionIndication_ies),
+	offsetof(struct redirectionIndication_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_redirectionIndication_ies_2 = {
+	"redirectionIndication-ies",
+	"redirectionIndication-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_redirectionIndication_ies_tags_2,
+	sizeof(asn_DEF_redirectionIndication_ies_tags_2)
+		/sizeof(asn_DEF_redirectionIndication_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_redirectionIndication_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_redirectionIndication_ies_tags_2)
+		/sizeof(asn_DEF_redirectionIndication_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_redirectionIndication_ies_constr_2,
+	asn_MBR_redirectionIndication_ies_2,
+	1,	/* Single element */
+	&asn_SPC_redirectionIndication_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_RedirectionIndication_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_RedirectionIndication, redirectionIndication_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_redirectionIndication_ies_2,
+		memb_redirectionIndication_ies_constraint_1,
+		&asn_PER_memb_redirectionIndication_ies_constr_2,
+		0,
+		"redirectionIndication-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_RedirectionIndication_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_RedirectionIndication_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* redirectionIndication-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_RedirectionIndication_specs_1 = {
+	sizeof(struct RANAP_RedirectionIndication),
+	offsetof(struct RANAP_RedirectionIndication, _asn_ctx),
+	asn_MAP_RANAP_RedirectionIndication_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_RedirectionIndication = {
+	"RANAP_RedirectionIndication",
+	"RANAP_RedirectionIndication",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_RedirectionIndication_tags_1,
+	sizeof(asn_DEF_RANAP_RedirectionIndication_tags_1)
+		/sizeof(asn_DEF_RANAP_RedirectionIndication_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_RedirectionIndication_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_RedirectionIndication_tags_1)
+		/sizeof(asn_DEF_RANAP_RedirectionIndication_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_RedirectionIndication_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_RedirectionIndication_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.h b/src/ranap/RANAP_RedirectionIndication.h
similarity index 65%
rename from src/ranap/RANAP_RAB-FailedtoReportList.h
rename to src/ranap/RANAP_RedirectionIndication.h
index 71a2024..082e16f 100644
--- a/src/ranap/RANAP_RAB-FailedtoReportList.h
+++ b/src/ranap/RANAP_RedirectionIndication.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_FailedtoReportList_H_
-#define	_RANAP_RAB_FailedtoReportList_H_
+#ifndef	_RANAP_RedirectionIndication_H_
+#define	_RANAP_RedirectionIndication_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-FailedtoReportList */
-typedef struct RANAP_RAB_FailedtoReportList {
-	struct rabFailedtoReportList_ies {
+/* RANAP_RedirectionIndication */
+typedef struct RANAP_RedirectionIndication {
+	struct redirectionIndication_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedtoReportList_ies;
+	} redirectionIndication_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_FailedtoReportList_t;
+} RANAP_RedirectionIndication_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_RedirectionIndication;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_FailedtoReportList_H_ */
+#endif	/* _RANAP_RedirectionIndication_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_ResetResourceAckList.c b/src/ranap/RANAP_ResetResourceAckList.c
new file mode 100644
index 0000000..84fbba8
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceAckList.c
@@ -0,0 +1,146 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+#include <constr_CHOICE.h>
+
+#include "RANAP_ResetResourceAckList.h"
+
+static int
+memb_resetResourceAckList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_resetResourceAckList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_resetResourceAckList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_resetResourceAckList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_resetResourceAckList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_resetResourceAckList_ies_specs_2 = {
+	sizeof(struct resetResourceAckList_ies),
+	offsetof(struct resetResourceAckList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_resetResourceAckList_ies_2 = {
+	"resetResourceAckList-ies",
+	"resetResourceAckList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_resetResourceAckList_ies_tags_2,
+	sizeof(asn_DEF_resetResourceAckList_ies_tags_2)
+		/sizeof(asn_DEF_resetResourceAckList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_resetResourceAckList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_resetResourceAckList_ies_tags_2)
+		/sizeof(asn_DEF_resetResourceAckList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_resetResourceAckList_ies_constr_2,
+	asn_MBR_resetResourceAckList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_resetResourceAckList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_ResetResourceAckList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ResetResourceAckList, resetResourceAckList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_resetResourceAckList_ies_2,
+		memb_resetResourceAckList_ies_constraint_1,
+		&asn_PER_memb_resetResourceAckList_ies_constr_2,
+		0,
+		"resetResourceAckList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ResetResourceAckList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ResetResourceAckList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* resetResourceAckList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ResetResourceAckList_specs_1 = {
+	sizeof(struct RANAP_ResetResourceAckList),
+	offsetof(struct RANAP_ResetResourceAckList, _asn_ctx),
+	asn_MAP_RANAP_ResetResourceAckList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceAckList = {
+	"RANAP_ResetResourceAckList",
+	"RANAP_ResetResourceAckList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ResetResourceAckList_tags_1,
+	sizeof(asn_DEF_RANAP_ResetResourceAckList_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceAckList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ResetResourceAckList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ResetResourceAckList_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceAckList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ResetResourceAckList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_ResetResourceAckList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.h b/src/ranap/RANAP_ResetResourceAckList.h
similarity index 65%
copy from src/ranap/RANAP_RAB-FailedtoReportList.h
copy to src/ranap/RANAP_ResetResourceAckList.h
index 71a2024..f01c2d8 100644
--- a/src/ranap/RANAP_RAB-FailedtoReportList.h
+++ b/src/ranap/RANAP_ResetResourceAckList.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_FailedtoReportList_H_
-#define	_RANAP_RAB_FailedtoReportList_H_
+#ifndef	_RANAP_ResetResourceAckList_H_
+#define	_RANAP_ResetResourceAckList_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-FailedtoReportList */
-typedef struct RANAP_RAB_FailedtoReportList {
-	struct rabFailedtoReportList_ies {
+/* RANAP_ResetResourceAckList */
+typedef struct RANAP_ResetResourceAckList {
+	struct resetResourceAckList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedtoReportList_ies;
+	} resetResourceAckList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_FailedtoReportList_t;
+} RANAP_ResetResourceAckList_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceAckList;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_FailedtoReportList_H_ */
+#endif	/* _RANAP_ResetResourceAckList_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_ResetResourceList.c b/src/ranap/RANAP_ResetResourceList.c
new file mode 100644
index 0000000..3ffb317
--- /dev/null
+++ b/src/ranap/RANAP_ResetResourceList.c
@@ -0,0 +1,146 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "RANAP-PDU"
+ * 	found in "../../asn1/ranap/RANAP-PDU.asn"
+ */
+#include <constr_CHOICE.h>
+
+#include "RANAP_ResetResourceList.h"
+
+static int
+memb_resetResourceList_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_resetResourceList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_resetResourceList_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_resetResourceList_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_RANAP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_resetResourceList_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_resetResourceList_ies_specs_2 = {
+	sizeof(struct resetResourceList_ies),
+	offsetof(struct resetResourceList_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_resetResourceList_ies_2 = {
+	"resetResourceList-ies",
+	"resetResourceList-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_resetResourceList_ies_tags_2,
+	sizeof(asn_DEF_resetResourceList_ies_tags_2)
+		/sizeof(asn_DEF_resetResourceList_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_resetResourceList_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_resetResourceList_ies_tags_2)
+		/sizeof(asn_DEF_resetResourceList_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_resetResourceList_ies_constr_2,
+	asn_MBR_resetResourceList_ies_2,
+	1,	/* Single element */
+	&asn_SPC_resetResourceList_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_RANAP_ResetResourceList_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_ResetResourceList, resetResourceList_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_resetResourceList_ies_2,
+		memb_resetResourceList_ies_constraint_1,
+		&asn_PER_memb_resetResourceList_ies_constr_2,
+		0,
+		"resetResourceList-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_RANAP_ResetResourceList_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_RANAP_ResetResourceList_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* resetResourceList-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_RANAP_ResetResourceList_specs_1 = {
+	sizeof(struct RANAP_ResetResourceList),
+	offsetof(struct RANAP_ResetResourceList, _asn_ctx),
+	asn_MAP_RANAP_ResetResourceList_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceList = {
+	"RANAP_ResetResourceList",
+	"RANAP_ResetResourceList",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_RANAP_ResetResourceList_tags_1,
+	sizeof(asn_DEF_RANAP_ResetResourceList_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceList_tags_1[0]), /* 1 */
+	asn_DEF_RANAP_ResetResourceList_tags_1,	/* Same as above */
+	sizeof(asn_DEF_RANAP_ResetResourceList_tags_1)
+		/sizeof(asn_DEF_RANAP_ResetResourceList_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_RANAP_ResetResourceList_1,
+	1,	/* Elements count */
+	&asn_SPC_RANAP_ResetResourceList_specs_1	/* Additional specs */
+};
+
diff --git a/src/ranap/RANAP_RAB-FailedtoReportList.h b/src/ranap/RANAP_ResetResourceList.h
similarity index 65%
copy from src/ranap/RANAP_RAB-FailedtoReportList.h
copy to src/ranap/RANAP_ResetResourceList.h
index 71a2024..60d76f8 100644
--- a/src/ranap/RANAP_RAB-FailedtoReportList.h
+++ b/src/ranap/RANAP_ResetResourceList.h
@@ -4,8 +4,8 @@
  * 	found in "../../asn1/ranap/RANAP-PDU.asn"
  */
 
-#ifndef	_RANAP_RAB_FailedtoReportList_H_
-#define	_RANAP_RAB_FailedtoReportList_H_
+#ifndef	_RANAP_ResetResourceList_H_
+#define	_RANAP_ResetResourceList_H_
 
 
 #include <asn_application.h>
@@ -20,14 +20,14 @@
 extern "C" {
 #endif
 
-/* RANAP_RAB-FailedtoReportList */
-typedef struct RANAP_RAB_FailedtoReportList {
-	struct rabFailedtoReportList_ies {
+/* RANAP_ResetResourceList */
+typedef struct RANAP_ResetResourceList {
+	struct resetResourceList_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} rabFailedtoReportList_ies;
+	} resetResourceList_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
@@ -35,14 +35,14 @@
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
-} RANAP_RAB_FailedtoReportList_t;
+} RANAP_ResetResourceList_t;
 
 /* Implementation */
-extern asn_TYPE_descriptor_t asn_DEF_RANAP_RAB_FailedtoReportList;
+extern asn_TYPE_descriptor_t asn_DEF_RANAP_ResetResourceList;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* _RANAP_RAB_FailedtoReportList_H_ */
+#endif	/* _RANAP_ResetResourceList_H_ */
 #include <asn_internal.h>
diff --git a/src/ranap/RANAP_SDU-FormatInformationParameters.c b/src/ranap/RANAP_SDU-FormatInformationParameters.c
index 181566a..61713f0 100644
--- a/src/ranap/RANAP_SDU-FormatInformationParameters.c
+++ b/src/ranap/RANAP_SDU-FormatInformationParameters.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 6,  6,  1l,  64l }	/* (SIZE(1..64)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_POINTER, 3, offsetof(struct Member, subflowSDU_Size),
+static asn_TYPE_member_t asn_MBR_MemberE_2[] = {
+	{ ATF_POINTER, 3, offsetof(struct MemberE, subflowSDU_Size),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_SubflowSDU_Size,
@@ -21,7 +21,7 @@
 		0,
 		"subflowSDU-Size"
 		},
-	{ ATF_POINTER, 2, offsetof(struct Member, rAB_SubflowCombinationBitRate),
+	{ ATF_POINTER, 2, offsetof(struct MemberE, rAB_SubflowCombinationBitRate),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_RAB_SubflowCombinationBitRate,
@@ -30,7 +30,7 @@
 		0,
 		"rAB-SubflowCombinationBitRate"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberE, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 0, 1, 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberE_oms_2[] = { 0, 1, 2 };
+static const ber_tlv_tag_t asn_DEF_MemberE_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberE_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subflowSDU-Size */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rAB-SubflowCombinationBitRate */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberE_specs_2 = {
+	sizeof(struct MemberE),
+	offsetof(struct MemberE, _asn_ctx),
+	asn_MAP_MemberE_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberE_oms_2,	/* Optional members */
 	3, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberE_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberE_tags_2,
+	sizeof(asn_DEF_MemberE_tags_2)
+		/sizeof(asn_DEF_MemberE_tags_2[0]), /* 1 */
+	asn_DEF_MemberE_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberE_tags_2)
+		/sizeof(asn_DEF_MemberE_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberE_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberE_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SDU_FormatInformationParameters_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberE_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_SDU-FormatInformationParameters.h b/src/ranap/RANAP_SDU-FormatInformationParameters.h
index fb49c40..e3bdd31 100644
--- a/src/ranap/RANAP_SDU-FormatInformationParameters.h
+++ b/src/ranap/RANAP_SDU-FormatInformationParameters.h
@@ -24,7 +24,7 @@
 
 /* RANAP_SDU-FormatInformationParameters */
 typedef struct RANAP_SDU_FormatInformationParameters {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberE {
 		RANAP_SubflowSDU_Size_t	*subflowSDU_Size	/* OPTIONAL */;
 		RANAP_RAB_SubflowCombinationBitRate_t	*rAB_SubflowCombinationBitRate	/* OPTIONAL */;
 		RANAP_IE_Extensions_t	*iE_Extensions	/* OPTIONAL */;
diff --git a/src/ranap/RANAP_SDU-Parameters.c b/src/ranap/RANAP_SDU-Parameters.c
index df97d4b..1808c88 100644
--- a/src/ranap/RANAP_SDU-Parameters.c
+++ b/src/ranap/RANAP_SDU-Parameters.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 3,  3,  1l,  7l }	/* (SIZE(1..7)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_MemberA_2[] = {
-	{ ATF_POINTER, 1, offsetof(struct MemberA, sDU_ErrorRatio),
+static asn_TYPE_member_t asn_MBR_MemberI_2[] = {
+	{ ATF_POINTER, 1, offsetof(struct MemberI, sDU_ErrorRatio),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_SDU_ErrorRatio,
@@ -21,7 +21,7 @@
 		0,
 		"sDU-ErrorRatio"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, residualBitErrorRatio),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberI, residualBitErrorRatio),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ResidualBitErrorRatio,
@@ -30,7 +30,7 @@
 		0,
 		"residualBitErrorRatio"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct MemberA, deliveryOfErroneousSDU),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberI, deliveryOfErroneousSDU),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_DeliveryOfErroneousSDU,
@@ -39,7 +39,7 @@
 		0,
 		"deliveryOfErroneousSDU"
 		},
-	{ ATF_POINTER, 2, offsetof(struct MemberA, sDU_FormatInformationParameters),
+	{ ATF_POINTER, 2, offsetof(struct MemberI, sDU_FormatInformationParameters),
 		(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_SDU_FormatInformationParameters,
@@ -48,7 +48,7 @@
 		0,
 		"sDU-FormatInformationParameters"
 		},
-	{ ATF_POINTER, 1, offsetof(struct MemberA, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberI, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (4 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_IE_Extensions,
@@ -58,29 +58,29 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_MemberA_oms_2[] = { 0, 3, 4 };
-static const ber_tlv_tag_t asn_DEF_MemberA_tags_2[] = {
+static const int asn_MAP_MemberI_oms_2[] = { 0, 3, 4 };
+static const ber_tlv_tag_t asn_DEF_MemberI_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_MemberA_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberI_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sDU-ErrorRatio */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* residualBitErrorRatio */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deliveryOfErroneousSDU */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sDU-FormatInformationParameters */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_MemberA_specs_2 = {
-	sizeof(struct MemberA),
-	offsetof(struct MemberA, _asn_ctx),
-	asn_MAP_MemberA_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberI_specs_2 = {
+	sizeof(struct MemberI),
+	offsetof(struct MemberI, _asn_ctx),
+	asn_MAP_MemberI_tag2el_2,
 	5,	/* Count of tags in the map */
-	asn_MAP_MemberA_oms_2,	/* Optional members */
+	asn_MAP_MemberI_oms_2,	/* Optional members */
 	3, 0,	/* Root/Additions */
 	4,	/* Start extensions */
 	6	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_MemberA_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberI_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -95,23 +95,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_MemberA_tags_2,
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
-	asn_DEF_MemberA_tags_2,	/* Same as above */
-	sizeof(asn_DEF_MemberA_tags_2)
-		/sizeof(asn_DEF_MemberA_tags_2[0]), /* 1 */
+	asn_DEF_MemberI_tags_2,
+	sizeof(asn_DEF_MemberI_tags_2)
+		/sizeof(asn_DEF_MemberI_tags_2[0]), /* 1 */
+	asn_DEF_MemberI_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberI_tags_2)
+		/sizeof(asn_DEF_MemberI_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_MemberA_2,
+	asn_MBR_MemberI_2,
 	5,	/* Elements count */
-	&asn_SPC_MemberA_specs_2	/* Additional specs */
+	&asn_SPC_MemberI_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SDU_Parameters_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_MemberA_2,
+		&asn_DEF_MemberI_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_SDU-Parameters.h b/src/ranap/RANAP_SDU-Parameters.h
index 0e6d158..818cb2e 100644
--- a/src/ranap/RANAP_SDU-Parameters.h
+++ b/src/ranap/RANAP_SDU-Parameters.h
@@ -26,7 +26,7 @@
 
 /* RANAP_SDU-Parameters */
 typedef struct RANAP_SDU_Parameters {
-	A_SEQUENCE_OF(struct MemberA {
+	A_SEQUENCE_OF(struct MemberI {
 		RANAP_SDU_ErrorRatio_t	*sDU_ErrorRatio	/* OPTIONAL */;
 		RANAP_ResidualBitErrorRatio_t	 residualBitErrorRatio;
 		RANAP_DeliveryOfErroneousSDU_t	 deliveryOfErroneousSDU;
diff --git a/src/ranap/RANAP_SRNS-ContextRequest.c b/src/ranap/RANAP_SRNS-ContextRequest.c
index 9531323..4a8acad 100644
--- a/src/ranap/RANAP_SRNS-ContextRequest.c
+++ b/src/ranap/RANAP_SRNS-ContextRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_SRNS-ContextRequest.h"
 
 static int
-memb_sRNS_ContextRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_srnS_ContextRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_sRNS_ContextRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_srnS_ContextRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_sRNS_ContextRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_srnS_ContextRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_sRNS_ContextRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_srnS_ContextRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_sRNS_ContextRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_srnS_ContextRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_sRNS_ContextRequest_ies_specs_2 = {
-	sizeof(struct sRNS_ContextRequest_ies),
-	offsetof(struct sRNS_ContextRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_srnS_ContextRequest_ies_specs_2 = {
+	sizeof(struct srnS_ContextRequest_ies),
+	offsetof(struct srnS_ContextRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sRNS_ContextRequest_ies_2 = {
-	"sRNS-ContextRequest-ies",
-	"sRNS-ContextRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_srnS_ContextRequest_ies_2 = {
+	"srnS-ContextRequest-ies",
+	"srnS-ContextRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_sRNS_ContextRequest_ies_tags_2,
-	sizeof(asn_DEF_sRNS_ContextRequest_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_ContextRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sRNS_ContextRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sRNS_ContextRequest_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_ContextRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_sRNS_ContextRequest_ies_constr_2,
-	asn_MBR_sRNS_ContextRequest_ies_2,
+	asn_DEF_srnS_ContextRequest_ies_tags_2,
+	sizeof(asn_DEF_srnS_ContextRequest_ies_tags_2)
+		/sizeof(asn_DEF_srnS_ContextRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_srnS_ContextRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_srnS_ContextRequest_ies_tags_2)
+		/sizeof(asn_DEF_srnS_ContextRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_srnS_ContextRequest_ies_constr_2,
+	asn_MBR_srnS_ContextRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_sRNS_ContextRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_srnS_ContextRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SRNS_ContextRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_ContextRequest, sRNS_ContextRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_ContextRequest, srnS_ContextRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_sRNS_ContextRequest_ies_2,
-		memb_sRNS_ContextRequest_ies_constraint_1,
-		&asn_PER_memb_sRNS_ContextRequest_ies_constr_2,
+		&asn_DEF_srnS_ContextRequest_ies_2,
+		memb_srnS_ContextRequest_ies_constraint_1,
+		&asn_PER_memb_srnS_ContextRequest_ies_constr_2,
 		0,
-		"sRNS-ContextRequest-ies"
+		"srnS-ContextRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_SRNS_ContextRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_SRNS_ContextRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sRNS-ContextRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srnS-ContextRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SRNS_ContextRequest_specs_1 = {
 	sizeof(struct RANAP_SRNS_ContextRequest),
diff --git a/src/ranap/RANAP_SRNS-ContextRequest.h b/src/ranap/RANAP_SRNS-ContextRequest.h
index a9e57ca..726f951 100644
--- a/src/ranap/RANAP_SRNS-ContextRequest.h
+++ b/src/ranap/RANAP_SRNS-ContextRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_SRNS-ContextRequest */
 typedef struct RANAP_SRNS_ContextRequest {
-	struct sRNS_ContextRequest_ies {
+	struct srnS_ContextRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} sRNS_ContextRequest_ies;
+	} srnS_ContextRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_SRNS-ContextResponse.c b/src/ranap/RANAP_SRNS-ContextResponse.c
index 601b5ad..c576ccd 100644
--- a/src/ranap/RANAP_SRNS-ContextResponse.c
+++ b/src/ranap/RANAP_SRNS-ContextResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_SRNS-ContextResponse.h"
 
 static int
-memb_sRNS_ContextResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_srnS_ContextResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_sRNS_ContextResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_srnS_ContextResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_sRNS_ContextResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_srnS_ContextResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_sRNS_ContextResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_srnS_ContextResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_sRNS_ContextResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_srnS_ContextResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_sRNS_ContextResponse_ies_specs_2 = {
-	sizeof(struct sRNS_ContextResponse_ies),
-	offsetof(struct sRNS_ContextResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_srnS_ContextResponse_ies_specs_2 = {
+	sizeof(struct srnS_ContextResponse_ies),
+	offsetof(struct srnS_ContextResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sRNS_ContextResponse_ies_2 = {
-	"sRNS-ContextResponse-ies",
-	"sRNS-ContextResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_srnS_ContextResponse_ies_2 = {
+	"srnS-ContextResponse-ies",
+	"srnS-ContextResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_sRNS_ContextResponse_ies_tags_2,
-	sizeof(asn_DEF_sRNS_ContextResponse_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_ContextResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sRNS_ContextResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sRNS_ContextResponse_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_ContextResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_sRNS_ContextResponse_ies_constr_2,
-	asn_MBR_sRNS_ContextResponse_ies_2,
+	asn_DEF_srnS_ContextResponse_ies_tags_2,
+	sizeof(asn_DEF_srnS_ContextResponse_ies_tags_2)
+		/sizeof(asn_DEF_srnS_ContextResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_srnS_ContextResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_srnS_ContextResponse_ies_tags_2)
+		/sizeof(asn_DEF_srnS_ContextResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_srnS_ContextResponse_ies_constr_2,
+	asn_MBR_srnS_ContextResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_sRNS_ContextResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_srnS_ContextResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SRNS_ContextResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_ContextResponse, sRNS_ContextResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_ContextResponse, srnS_ContextResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_sRNS_ContextResponse_ies_2,
-		memb_sRNS_ContextResponse_ies_constraint_1,
-		&asn_PER_memb_sRNS_ContextResponse_ies_constr_2,
+		&asn_DEF_srnS_ContextResponse_ies_2,
+		memb_srnS_ContextResponse_ies_constraint_1,
+		&asn_PER_memb_srnS_ContextResponse_ies_constr_2,
 		0,
-		"sRNS-ContextResponse-ies"
+		"srnS-ContextResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_SRNS_ContextResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_SRNS_ContextResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sRNS-ContextResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srnS-ContextResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SRNS_ContextResponse_specs_1 = {
 	sizeof(struct RANAP_SRNS_ContextResponse),
diff --git a/src/ranap/RANAP_SRNS-ContextResponse.h b/src/ranap/RANAP_SRNS-ContextResponse.h
index 53e210a..9793969 100644
--- a/src/ranap/RANAP_SRNS-ContextResponse.h
+++ b/src/ranap/RANAP_SRNS-ContextResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_SRNS-ContextResponse */
 typedef struct RANAP_SRNS_ContextResponse {
-	struct sRNS_ContextResponse_ies {
+	struct srnS_ContextResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} sRNS_ContextResponse_ies;
+	} srnS_ContextResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_SRNS-DataForwardCommand.c b/src/ranap/RANAP_SRNS-DataForwardCommand.c
index 4b3800d..e87f93e 100644
--- a/src/ranap/RANAP_SRNS-DataForwardCommand.c
+++ b/src/ranap/RANAP_SRNS-DataForwardCommand.c
@@ -7,7 +7,7 @@
 #include "RANAP_SRNS-DataForwardCommand.h"
 
 static int
-memb_sRNS_DataForwardCommand_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_srnS_DataForwardCommand_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_sRNS_DataForwardCommand_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_srnS_DataForwardCommand_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_sRNS_DataForwardCommand_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_srnS_DataForwardCommand_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_sRNS_DataForwardCommand_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_srnS_DataForwardCommand_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_sRNS_DataForwardCommand_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_srnS_DataForwardCommand_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_sRNS_DataForwardCommand_ies_specs_2 = {
-	sizeof(struct sRNS_DataForwardCommand_ies),
-	offsetof(struct sRNS_DataForwardCommand_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_srnS_DataForwardCommand_ies_specs_2 = {
+	sizeof(struct srnS_DataForwardCommand_ies),
+	offsetof(struct srnS_DataForwardCommand_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sRNS_DataForwardCommand_ies_2 = {
-	"sRNS-DataForwardCommand-ies",
-	"sRNS-DataForwardCommand-ies",
+asn_TYPE_descriptor_t asn_DEF_srnS_DataForwardCommand_ies_2 = {
+	"srnS-DataForwardCommand-ies",
+	"srnS-DataForwardCommand-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_sRNS_DataForwardCommand_ies_tags_2,
-	sizeof(asn_DEF_sRNS_DataForwardCommand_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_DataForwardCommand_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sRNS_DataForwardCommand_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sRNS_DataForwardCommand_ies_tags_2)
-		/sizeof(asn_DEF_sRNS_DataForwardCommand_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_sRNS_DataForwardCommand_ies_constr_2,
-	asn_MBR_sRNS_DataForwardCommand_ies_2,
+	asn_DEF_srnS_DataForwardCommand_ies_tags_2,
+	sizeof(asn_DEF_srnS_DataForwardCommand_ies_tags_2)
+		/sizeof(asn_DEF_srnS_DataForwardCommand_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_srnS_DataForwardCommand_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_srnS_DataForwardCommand_ies_tags_2)
+		/sizeof(asn_DEF_srnS_DataForwardCommand_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_srnS_DataForwardCommand_ies_constr_2,
+	asn_MBR_srnS_DataForwardCommand_ies_2,
 	1,	/* Single element */
-	&asn_SPC_sRNS_DataForwardCommand_ies_specs_2	/* Additional specs */
+	&asn_SPC_srnS_DataForwardCommand_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SRNS_DataForwardCommand_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_DataForwardCommand, sRNS_DataForwardCommand_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRNS_DataForwardCommand, srnS_DataForwardCommand_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_sRNS_DataForwardCommand_ies_2,
-		memb_sRNS_DataForwardCommand_ies_constraint_1,
-		&asn_PER_memb_sRNS_DataForwardCommand_ies_constr_2,
+		&asn_DEF_srnS_DataForwardCommand_ies_2,
+		memb_srnS_DataForwardCommand_ies_constraint_1,
+		&asn_PER_memb_srnS_DataForwardCommand_ies_constr_2,
 		0,
-		"sRNS-DataForwardCommand-ies"
+		"srnS-DataForwardCommand-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_SRNS_DataForwardCommand_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_SRNS_DataForwardCommand_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sRNS-DataForwardCommand-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srnS-DataForwardCommand-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SRNS_DataForwardCommand_specs_1 = {
 	sizeof(struct RANAP_SRNS_DataForwardCommand),
diff --git a/src/ranap/RANAP_SRNS-DataForwardCommand.h b/src/ranap/RANAP_SRNS-DataForwardCommand.h
index 14a9f49..ea5743d 100644
--- a/src/ranap/RANAP_SRNS-DataForwardCommand.h
+++ b/src/ranap/RANAP_SRNS-DataForwardCommand.h
@@ -22,12 +22,12 @@
 
 /* RANAP_SRNS-DataForwardCommand */
 typedef struct RANAP_SRNS_DataForwardCommand {
-	struct sRNS_DataForwardCommand_ies {
+	struct srnS_DataForwardCommand_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} sRNS_DataForwardCommand_ies;
+	} srnS_DataForwardCommand_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_SRVCC-CSKeysRequest.c b/src/ranap/RANAP_SRVCC-CSKeysRequest.c
index 28361bb..926cd49 100644
--- a/src/ranap/RANAP_SRVCC-CSKeysRequest.c
+++ b/src/ranap/RANAP_SRVCC-CSKeysRequest.c
@@ -7,7 +7,7 @@
 #include "RANAP_SRVCC-CSKeysRequest.h"
 
 static int
-memb_sRVCC_CSKeysRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_srvcC_CSKeysRequest_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_sRVCC_CSKeysRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_srvcC_CSKeysRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_sRVCC_CSKeysRequest_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_srvcC_CSKeysRequest_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_sRVCC_CSKeysRequest_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_srvcC_CSKeysRequest_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_sRVCC_CSKeysRequest_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_srvcC_CSKeysRequest_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_sRVCC_CSKeysRequest_ies_specs_2 = {
-	sizeof(struct sRVCC_CSKeysRequest_ies),
-	offsetof(struct sRVCC_CSKeysRequest_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_srvcC_CSKeysRequest_ies_specs_2 = {
+	sizeof(struct srvcC_CSKeysRequest_ies),
+	offsetof(struct srvcC_CSKeysRequest_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sRVCC_CSKeysRequest_ies_2 = {
-	"sRVCC-CSKeysRequest-ies",
-	"sRVCC-CSKeysRequest-ies",
+asn_TYPE_descriptor_t asn_DEF_srvcC_CSKeysRequest_ies_2 = {
+	"srvcC-CSKeysRequest-ies",
+	"srvcC-CSKeysRequest-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_sRVCC_CSKeysRequest_ies_tags_2,
-	sizeof(asn_DEF_sRVCC_CSKeysRequest_ies_tags_2)
-		/sizeof(asn_DEF_sRVCC_CSKeysRequest_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sRVCC_CSKeysRequest_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sRVCC_CSKeysRequest_ies_tags_2)
-		/sizeof(asn_DEF_sRVCC_CSKeysRequest_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_sRVCC_CSKeysRequest_ies_constr_2,
-	asn_MBR_sRVCC_CSKeysRequest_ies_2,
+	asn_DEF_srvcC_CSKeysRequest_ies_tags_2,
+	sizeof(asn_DEF_srvcC_CSKeysRequest_ies_tags_2)
+		/sizeof(asn_DEF_srvcC_CSKeysRequest_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_srvcC_CSKeysRequest_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_srvcC_CSKeysRequest_ies_tags_2)
+		/sizeof(asn_DEF_srvcC_CSKeysRequest_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_srvcC_CSKeysRequest_ies_constr_2,
+	asn_MBR_srvcC_CSKeysRequest_ies_2,
 	1,	/* Single element */
-	&asn_SPC_sRVCC_CSKeysRequest_ies_specs_2	/* Additional specs */
+	&asn_SPC_srvcC_CSKeysRequest_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SRVCC_CSKeysRequest_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRVCC_CSKeysRequest, sRVCC_CSKeysRequest_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRVCC_CSKeysRequest, srvcC_CSKeysRequest_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_sRVCC_CSKeysRequest_ies_2,
-		memb_sRVCC_CSKeysRequest_ies_constraint_1,
-		&asn_PER_memb_sRVCC_CSKeysRequest_ies_constr_2,
+		&asn_DEF_srvcC_CSKeysRequest_ies_2,
+		memb_srvcC_CSKeysRequest_ies_constraint_1,
+		&asn_PER_memb_srvcC_CSKeysRequest_ies_constr_2,
 		0,
-		"sRVCC-CSKeysRequest-ies"
+		"srvcC-CSKeysRequest-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_SRVCC_CSKeysRequest_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_SRVCC_CSKeysRequest_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sRVCC-CSKeysRequest-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srvcC-CSKeysRequest-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SRVCC_CSKeysRequest_specs_1 = {
 	sizeof(struct RANAP_SRVCC_CSKeysRequest),
diff --git a/src/ranap/RANAP_SRVCC-CSKeysRequest.h b/src/ranap/RANAP_SRVCC-CSKeysRequest.h
index aa64d72..762e9a9 100644
--- a/src/ranap/RANAP_SRVCC-CSKeysRequest.h
+++ b/src/ranap/RANAP_SRVCC-CSKeysRequest.h
@@ -22,12 +22,12 @@
 
 /* RANAP_SRVCC-CSKeysRequest */
 typedef struct RANAP_SRVCC_CSKeysRequest {
-	struct sRVCC_CSKeysRequest_ies {
+	struct srvcC_CSKeysRequest_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} sRVCC_CSKeysRequest_ies;
+	} srvcC_CSKeysRequest_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_SRVCC-CSKeysResponse.c b/src/ranap/RANAP_SRVCC-CSKeysResponse.c
index 89ec1b3..98d7e1e 100644
--- a/src/ranap/RANAP_SRVCC-CSKeysResponse.c
+++ b/src/ranap/RANAP_SRVCC-CSKeysResponse.c
@@ -7,7 +7,7 @@
 #include "RANAP_SRVCC-CSKeysResponse.h"
 
 static int
-memb_sRVCC_CSKeysResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_srvcC_CSKeysResponse_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_sRVCC_CSKeysResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_srvcC_CSKeysResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_sRVCC_CSKeysResponse_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_srvcC_CSKeysResponse_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_sRVCC_CSKeysResponse_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_srvcC_CSKeysResponse_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_sRVCC_CSKeysResponse_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_srvcC_CSKeysResponse_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_sRVCC_CSKeysResponse_ies_specs_2 = {
-	sizeof(struct sRVCC_CSKeysResponse_ies),
-	offsetof(struct sRVCC_CSKeysResponse_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_srvcC_CSKeysResponse_ies_specs_2 = {
+	sizeof(struct srvcC_CSKeysResponse_ies),
+	offsetof(struct srvcC_CSKeysResponse_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_sRVCC_CSKeysResponse_ies_2 = {
-	"sRVCC-CSKeysResponse-ies",
-	"sRVCC-CSKeysResponse-ies",
+asn_TYPE_descriptor_t asn_DEF_srvcC_CSKeysResponse_ies_2 = {
+	"srvcC-CSKeysResponse-ies",
+	"srvcC-CSKeysResponse-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_sRVCC_CSKeysResponse_ies_tags_2,
-	sizeof(asn_DEF_sRVCC_CSKeysResponse_ies_tags_2)
-		/sizeof(asn_DEF_sRVCC_CSKeysResponse_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_sRVCC_CSKeysResponse_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_sRVCC_CSKeysResponse_ies_tags_2)
-		/sizeof(asn_DEF_sRVCC_CSKeysResponse_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_sRVCC_CSKeysResponse_ies_constr_2,
-	asn_MBR_sRVCC_CSKeysResponse_ies_2,
+	asn_DEF_srvcC_CSKeysResponse_ies_tags_2,
+	sizeof(asn_DEF_srvcC_CSKeysResponse_ies_tags_2)
+		/sizeof(asn_DEF_srvcC_CSKeysResponse_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_srvcC_CSKeysResponse_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_srvcC_CSKeysResponse_ies_tags_2)
+		/sizeof(asn_DEF_srvcC_CSKeysResponse_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_srvcC_CSKeysResponse_ies_constr_2,
+	asn_MBR_srvcC_CSKeysResponse_ies_2,
 	1,	/* Single element */
-	&asn_SPC_sRVCC_CSKeysResponse_ies_specs_2	/* Additional specs */
+	&asn_SPC_srvcC_CSKeysResponse_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_SRVCC_CSKeysResponse_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRVCC_CSKeysResponse, sRVCC_CSKeysResponse_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_SRVCC_CSKeysResponse, srvcC_CSKeysResponse_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_sRVCC_CSKeysResponse_ies_2,
-		memb_sRVCC_CSKeysResponse_ies_constraint_1,
-		&asn_PER_memb_sRVCC_CSKeysResponse_ies_constr_2,
+		&asn_DEF_srvcC_CSKeysResponse_ies_2,
+		memb_srvcC_CSKeysResponse_ies_constraint_1,
+		&asn_PER_memb_srvcC_CSKeysResponse_ies_constr_2,
 		0,
-		"sRVCC-CSKeysResponse-ies"
+		"srvcC-CSKeysResponse-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_SRVCC_CSKeysResponse_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_SRVCC_CSKeysResponse_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sRVCC-CSKeysResponse-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srvcC-CSKeysResponse-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_SRVCC_CSKeysResponse_specs_1 = {
 	sizeof(struct RANAP_SRVCC_CSKeysResponse),
diff --git a/src/ranap/RANAP_SRVCC-CSKeysResponse.h b/src/ranap/RANAP_SRVCC-CSKeysResponse.h
index b782866..dfed210 100644
--- a/src/ranap/RANAP_SRVCC-CSKeysResponse.h
+++ b/src/ranap/RANAP_SRVCC-CSKeysResponse.h
@@ -22,12 +22,12 @@
 
 /* RANAP_SRVCC-CSKeysResponse */
 typedef struct RANAP_SRVCC_CSKeysResponse {
-	struct sRVCC_CSKeysResponse_ies {
+	struct srvcC_CSKeysResponse_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} sRVCC_CSKeysResponse_ies;
+	} srvcC_CSKeysResponse_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_UESpecificInformationIndication.c b/src/ranap/RANAP_UESpecificInformationIndication.c
index 89d1e16..bebc30d 100644
--- a/src/ranap/RANAP_UESpecificInformationIndication.c
+++ b/src/ranap/RANAP_UESpecificInformationIndication.c
@@ -7,7 +7,7 @@
 #include "RANAP_UESpecificInformationIndication.h"
 
 static int
-memb_uESpecificInformationIndication_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+memb_ueSpecificInformationIndication_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
 	size_t size;
 	
@@ -32,17 +32,17 @@
 	}
 }
 
-static asn_per_constraints_t asn_PER_type_uESpecificInformationIndication_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_type_ueSpecificInformationIndication_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_per_constraints_t asn_PER_memb_uESpecificInformationIndication_ies_constr_2 GCC_NOTUSED = {
+static asn_per_constraints_t asn_PER_memb_ueSpecificInformationIndication_ies_constr_2 GCC_NOTUSED = {
 	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
 	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_uESpecificInformationIndication_ies_2[] = {
+static asn_TYPE_member_t asn_MBR_ueSpecificInformationIndication_ies_2[] = {
 	{ ATF_POINTER, 0, 0,
 		-1 /* Ambiguous tag (CHOICE?) */,
 		0,
@@ -53,19 +53,19 @@
 		""
 		},
 };
-static const ber_tlv_tag_t asn_DEF_uESpecificInformationIndication_ies_tags_2[] = {
+static const ber_tlv_tag_t asn_DEF_ueSpecificInformationIndication_ies_tags_2[] = {
 	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_uESpecificInformationIndication_ies_specs_2 = {
-	sizeof(struct uESpecificInformationIndication_ies),
-	offsetof(struct uESpecificInformationIndication_ies, _asn_ctx),
+static asn_SET_OF_specifics_t asn_SPC_ueSpecificInformationIndication_ies_specs_2 = {
+	sizeof(struct ueSpecificInformationIndication_ies),
+	offsetof(struct ueSpecificInformationIndication_ies, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_uESpecificInformationIndication_ies_2 = {
-	"uESpecificInformationIndication-ies",
-	"uESpecificInformationIndication-ies",
+asn_TYPE_descriptor_t asn_DEF_ueSpecificInformationIndication_ies_2 = {
+	"ueSpecificInformationIndication-ies",
+	"ueSpecificInformationIndication-ies",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
 	SEQUENCE_OF_constraint,
@@ -78,34 +78,34 @@
 	SEQUENCE_OF_decode_aper,
 	SEQUENCE_OF_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_uESpecificInformationIndication_ies_tags_2,
-	sizeof(asn_DEF_uESpecificInformationIndication_ies_tags_2)
-		/sizeof(asn_DEF_uESpecificInformationIndication_ies_tags_2[0]) - 1, /* 1 */
-	asn_DEF_uESpecificInformationIndication_ies_tags_2,	/* Same as above */
-	sizeof(asn_DEF_uESpecificInformationIndication_ies_tags_2)
-		/sizeof(asn_DEF_uESpecificInformationIndication_ies_tags_2[0]), /* 2 */
-	&asn_PER_type_uESpecificInformationIndication_ies_constr_2,
-	asn_MBR_uESpecificInformationIndication_ies_2,
+	asn_DEF_ueSpecificInformationIndication_ies_tags_2,
+	sizeof(asn_DEF_ueSpecificInformationIndication_ies_tags_2)
+		/sizeof(asn_DEF_ueSpecificInformationIndication_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_ueSpecificInformationIndication_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_ueSpecificInformationIndication_ies_tags_2)
+		/sizeof(asn_DEF_ueSpecificInformationIndication_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_ueSpecificInformationIndication_ies_constr_2,
+	asn_MBR_ueSpecificInformationIndication_ies_2,
 	1,	/* Single element */
-	&asn_SPC_uESpecificInformationIndication_ies_specs_2	/* Additional specs */
+	&asn_SPC_ueSpecificInformationIndication_ies_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_UESpecificInformationIndication_1[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_UESpecificInformationIndication, uESpecificInformationIndication_ies),
+	{ ATF_NOFLAGS, 0, offsetof(struct RANAP_UESpecificInformationIndication, ueSpecificInformationIndication_ies),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		0,
-		&asn_DEF_uESpecificInformationIndication_ies_2,
-		memb_uESpecificInformationIndication_ies_constraint_1,
-		&asn_PER_memb_uESpecificInformationIndication_ies_constr_2,
+		&asn_DEF_ueSpecificInformationIndication_ies_2,
+		memb_ueSpecificInformationIndication_ies_constraint_1,
+		&asn_PER_memb_ueSpecificInformationIndication_ies_constr_2,
 		0,
-		"uESpecificInformationIndication-ies"
+		"ueSpecificInformationIndication-ies"
 		},
 };
 static const ber_tlv_tag_t asn_DEF_RANAP_UESpecificInformationIndication_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static const asn_TYPE_tag2member_t asn_MAP_RANAP_UESpecificInformationIndication_tag2el_1[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* uESpecificInformationIndication-ies */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ueSpecificInformationIndication-ies */
 };
 static asn_SEQUENCE_specifics_t asn_SPC_RANAP_UESpecificInformationIndication_specs_1 = {
 	sizeof(struct RANAP_UESpecificInformationIndication),
diff --git a/src/ranap/RANAP_UESpecificInformationIndication.h b/src/ranap/RANAP_UESpecificInformationIndication.h
index b2a4782..7cda5c3 100644
--- a/src/ranap/RANAP_UESpecificInformationIndication.h
+++ b/src/ranap/RANAP_UESpecificInformationIndication.h
@@ -22,12 +22,12 @@
 
 /* RANAP_UESpecificInformationIndication */
 typedef struct RANAP_UESpecificInformationIndication {
-	struct uESpecificInformationIndication_ies {
+	struct ueSpecificInformationIndication_ies {
 		A_SEQUENCE_OF(RANAP_IE_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
-	} uESpecificInformationIndication_ies;
+	} ueSpecificInformationIndication_ies;
 	/*
 	 * This type is extensible,
 	 * possible extensions are below.
diff --git a/src/ranap/RANAP_UnsuccessfulLinking-IEs.c b/src/ranap/RANAP_UnsuccessfulLinking-IEs.c
index 673b33c..f0a5e54 100644
--- a/src/ranap/RANAP_UnsuccessfulLinking-IEs.c
+++ b/src/ranap/RANAP_UnsuccessfulLinking-IEs.c
@@ -11,8 +11,8 @@
 	{ APC_CONSTRAINED,	 7,  7,  1l,  128l }	/* (SIZE(1..128)) */,
 	0, 0	/* No PER value map */
 };
-static asn_TYPE_member_t asn_MBR_Member_2[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, tMGI),
+static asn_TYPE_member_t asn_MBR_MemberD_2[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberD, tMGI),
 		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_TMGI,
@@ -21,7 +21,7 @@
 		0,
 		"tMGI"
 		},
-	{ ATF_NOFLAGS, 0, offsetof(struct Member, cause),
+	{ ATF_NOFLAGS, 0, offsetof(struct MemberD, cause),
 		(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		+1,	/* EXPLICIT tag at current level */
 		&asn_DEF_RANAP_Cause,
@@ -30,7 +30,7 @@
 		0,
 		"cause"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Member, iE_Extensions),
+	{ ATF_POINTER, 1, offsetof(struct MemberD, iE_Extensions),
 		(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		-1,	/* IMPLICIT tag at current level */
 		&asn_DEF_RANAP_ProtocolExtensionContainer,
@@ -40,27 +40,27 @@
 		"iE-Extensions"
 		},
 };
-static const int asn_MAP_Member_oms_2[] = { 2 };
-static const ber_tlv_tag_t asn_DEF_Member_tags_2[] = {
+static const int asn_MAP_MemberD_oms_2[] = { 2 };
+static const ber_tlv_tag_t asn_DEF_MemberD_tags_2[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = {
+static const asn_TYPE_tag2member_t asn_MAP_MemberD_tag2el_2[] = {
     { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tMGI */
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cause */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* iE-Extensions */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Member_specs_2 = {
-	sizeof(struct Member),
-	offsetof(struct Member, _asn_ctx),
-	asn_MAP_Member_tag2el_2,
+static asn_SEQUENCE_specifics_t asn_SPC_MemberD_specs_2 = {
+	sizeof(struct MemberD),
+	offsetof(struct MemberD, _asn_ctx),
+	asn_MAP_MemberD_tag2el_2,
 	3,	/* Count of tags in the map */
-	asn_MAP_Member_oms_2,	/* Optional members */
+	asn_MAP_MemberD_oms_2,	/* Optional members */
 	1, 0,	/* Root/Additions */
 	2,	/* Start extensions */
 	4	/* Stop extensions */
 };
 static /* Use -fall-defs-global to expose */
-asn_TYPE_descriptor_t asn_DEF_Member_2 = {
+asn_TYPE_descriptor_t asn_DEF_MemberD_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
 	SEQUENCE_free,
@@ -75,23 +75,23 @@
 	SEQUENCE_decode_aper,
 	SEQUENCE_encode_aper,
 	0,	/* Use generic outmost tag fetcher */
-	asn_DEF_Member_tags_2,
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
-	asn_DEF_Member_tags_2,	/* Same as above */
-	sizeof(asn_DEF_Member_tags_2)
-		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
+	asn_DEF_MemberD_tags_2,
+	sizeof(asn_DEF_MemberD_tags_2)
+		/sizeof(asn_DEF_MemberD_tags_2[0]), /* 1 */
+	asn_DEF_MemberD_tags_2,	/* Same as above */
+	sizeof(asn_DEF_MemberD_tags_2)
+		/sizeof(asn_DEF_MemberD_tags_2[0]), /* 1 */
 	0,	/* No PER visible constraints */
-	asn_MBR_Member_2,
+	asn_MBR_MemberD_2,
 	3,	/* Elements count */
-	&asn_SPC_Member_specs_2	/* Additional specs */
+	&asn_SPC_MemberD_specs_2	/* Additional specs */
 };
 
 static asn_TYPE_member_t asn_MBR_RANAP_UnsuccessfulLinking_IEs_1[] = {
 	{ ATF_POINTER, 0, 0,
 		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		0,
-		&asn_DEF_Member_2,
+		&asn_DEF_MemberD_2,
 		0,	/* Defer constraints checking to the member type */
 		0,	/* No PER visible constraints */
 		0,
diff --git a/src/ranap/RANAP_UnsuccessfulLinking-IEs.h b/src/ranap/RANAP_UnsuccessfulLinking-IEs.h
index cd54d67..94a298e 100644
--- a/src/ranap/RANAP_UnsuccessfulLinking-IEs.h
+++ b/src/ranap/RANAP_UnsuccessfulLinking-IEs.h
@@ -24,7 +24,7 @@
 
 /* RANAP_UnsuccessfulLinking-IEs */
 typedef struct RANAP_UnsuccessfulLinking_IEs {
-	A_SEQUENCE_OF(struct Member {
+	A_SEQUENCE_OF(struct MemberD {
 		RANAP_TMGI_t	 tMGI;
 		RANAP_Cause_t	 cause;
 		RANAP_ProtocolExtensionContainer_t	*iE_Extensions	/* OPTIONAL */;
