diff --git a/tests/43-recursion-OK.asn1.-P b/tests/43-recursion-OK.asn1.-P
index 58fd39a..885e635 100644
--- a/tests/43-recursion-OK.asn1.-P
+++ b/tests/43-recursion-OK.asn1.-P
@@ -11,7 +11,9 @@
 
 /*** <<< DEPS [Test-structure-1] >>> ***/
 
-extern asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1;
+
+struct Test_structure_1;	/* Forward declaration */
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_1;
 
 /*** <<< TYPE-DECLS [Test-structure-1] >>> ***/
 
@@ -21,42 +23,42 @@
 		A_SET_OF(struct Test_structure_1) list;
 		
 		/* Context for parsing across buffer boundaries */
-		ber_dec_ctx_t _ber_dec_ctx;
+		asn_struct_ctx_t _asn_ctx;
 	} t_member1;
 	struct t_member2 {
 		A_SEQUENCE_OF(struct Test_structure_1) list;
 		
 		/* Context for parsing across buffer boundaries */
-		ber_dec_ctx_t _ber_dec_ctx;
+		asn_struct_ctx_t _asn_ctx;
 	} t_member2;
 	struct Test_structure_1	*t_member3	/* OPTIONAL */;
 	INTEGER_t	 t_member4;
 	
 	/* Context for parsing across buffer boundaries */
-	ber_dec_ctx_t _ber_dec_ctx;
+	asn_struct_ctx_t _asn_ctx;
 } Test_structure_1_t;
 
 /*** <<< STAT-DEFS [Test-structure-1] >>> ***/
 
-static asn1_TYPE_member_t asn1_MBR_t_member1[] = {
+static asn_TYPE_member_t asn_MBR_t_member1[] = {
 	{ ATF_NOFLAGS, 0, 0,
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_Test_structure_1,
+		.type = (void *)&asn_DEF_Test_structure_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = ""
 		},
 };
-static ber_tlv_tag_t asn1_DEF_t_member1_tags[] = {
+static ber_tlv_tag_t asn_DEF_t_member1_tags[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
-static asn1_SET_OF_specifics_t asn1_DEF_t_member1_specs = {
+static asn_SET_OF_specifics_t asn_DEF_t_member1_specs = {
 	sizeof(struct t_member1),
-	offsetof(struct t_member1, _ber_dec_ctx),
+	offsetof(struct t_member1, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn1_TYPE_descriptor_t asn1_DEF_t_member1 = {
+asn_TYPE_descriptor_t asn_DEF_t_member1 = {
 	"t-member1",
 	SET_OF_free,
 	SET_OF_print,
@@ -66,36 +68,36 @@
 	0,				/* Not implemented yet */
 	SET_OF_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_t_member1_tags,
-	sizeof(asn1_DEF_t_member1_tags)
-		/sizeof(asn1_DEF_t_member1_tags[0]), /* 1 */
-	asn1_DEF_t_member1_tags,	/* Same as above */
-	sizeof(asn1_DEF_t_member1_tags)
-		/sizeof(asn1_DEF_t_member1_tags[0]), /* 1 */
-	asn1_MBR_t_member1,
+	asn_DEF_t_member1_tags,
+	sizeof(asn_DEF_t_member1_tags)
+		/sizeof(asn_DEF_t_member1_tags[0]), /* 1 */
+	asn_DEF_t_member1_tags,	/* Same as above */
+	sizeof(asn_DEF_t_member1_tags)
+		/sizeof(asn_DEF_t_member1_tags[0]), /* 1 */
+	asn_MBR_t_member1,
 	1,	/* Single element */
-	&asn1_DEF_t_member1_specs	/* Additional specs */
+	&asn_DEF_t_member1_specs	/* Additional specs */
 };
 
-static asn1_TYPE_member_t asn1_MBR_t_member2[] = {
+static asn_TYPE_member_t asn_MBR_t_member2[] = {
 	{ ATF_NOFLAGS, 0, 0,
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_Test_structure_1,
+		.type = (void *)&asn_DEF_Test_structure_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = ""
 		},
 };
-static ber_tlv_tag_t asn1_DEF_t_member2_tags[] = {
+static ber_tlv_tag_t asn_DEF_t_member2_tags[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn1_SET_OF_specifics_t asn1_DEF_t_member2_specs = {
+static asn_SET_OF_specifics_t asn_DEF_t_member2_specs = {
 	sizeof(struct t_member2),
-	offsetof(struct t_member2, _ber_dec_ctx),
+	offsetof(struct t_member2, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
 };
 static /* Use -fall-defs-global to expose */
-asn1_TYPE_descriptor_t asn1_DEF_t_member2 = {
+asn_TYPE_descriptor_t asn_DEF_t_member2 = {
 	"t-member2",
 	SEQUENCE_OF_free,
 	SEQUENCE_OF_print,
@@ -105,65 +107,65 @@
 	0,				/* Not implemented yet */
 	SEQUENCE_OF_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_t_member2_tags,
-	sizeof(asn1_DEF_t_member2_tags)
-		/sizeof(asn1_DEF_t_member2_tags[0]), /* 1 */
-	asn1_DEF_t_member2_tags,	/* Same as above */
-	sizeof(asn1_DEF_t_member2_tags)
-		/sizeof(asn1_DEF_t_member2_tags[0]), /* 1 */
-	asn1_MBR_t_member2,
+	asn_DEF_t_member2_tags,
+	sizeof(asn_DEF_t_member2_tags)
+		/sizeof(asn_DEF_t_member2_tags[0]), /* 1 */
+	asn_DEF_t_member2_tags,	/* Same as above */
+	sizeof(asn_DEF_t_member2_tags)
+		/sizeof(asn_DEF_t_member2_tags[0]), /* 1 */
+	asn_MBR_t_member2,
 	1,	/* Single element */
-	&asn1_DEF_t_member2_specs	/* Additional specs */
+	&asn_DEF_t_member2_specs	/* Additional specs */
 };
 
-static asn1_TYPE_member_t asn1_MBR_Test_structure_1[] = {
+static asn_TYPE_member_t asn_MBR_Test_structure_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member1),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_t_member1,
+		.type = (void *)&asn_DEF_t_member1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "t-member1"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member2),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_t_member2,
+		.type = (void *)&asn_DEF_t_member2,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "t-member2"
 		},
 	{ ATF_POINTER, 1, offsetof(struct Test_structure_1, t_member3),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_Test_structure_1,
+		.type = (void *)&asn_DEF_Test_structure_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "t-member3"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Test_structure_1, t_member4),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_INTEGER,
+		.type = (void *)&asn_DEF_INTEGER,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "t-member4"
 		},
 };
-static ber_tlv_tag_t asn1_DEF_Test_structure_1_tags[] = {
+static ber_tlv_tag_t asn_DEF_Test_structure_1_tags[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn1_TYPE_tag2member_t asn1_DEF_Test_structure_1_tag2el[] = {
+static asn_TYPE_tag2member_t asn_DEF_Test_structure_1_tag2el[] = {
     { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, 0, 0 }, /* t-member4 at 19 */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* t-member2 at 16 */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 }, /* t-member3 at 17 */
     { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 }, /* t-member1 at 15 */
 };
-static asn1_SEQUENCE_specifics_t asn1_DEF_Test_structure_1_specs = {
+static asn_SEQUENCE_specifics_t asn_DEF_Test_structure_1_specs = {
 	sizeof(struct Test_structure_1),
-	offsetof(struct Test_structure_1, _ber_dec_ctx),
-	asn1_DEF_Test_structure_1_tag2el,
+	offsetof(struct Test_structure_1, _asn_ctx),
+	asn_DEF_Test_structure_1_tag2el,
 	4,	/* Count of tags in the map */
 	-1,	/* Start extensions */
 	-1	/* Stop extensions */
 };
-asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1 = {
+asn_TYPE_descriptor_t asn_DEF_Test_structure_1 = {
 	"Test-structure-1",
 	SEQUENCE_free,
 	SEQUENCE_print,
@@ -173,15 +175,15 @@
 	0,				/* Not implemented yet */
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_Test_structure_1_tags,
-	sizeof(asn1_DEF_Test_structure_1_tags)
-		/sizeof(asn1_DEF_Test_structure_1_tags[0]), /* 1 */
-	asn1_DEF_Test_structure_1_tags,	/* Same as above */
-	sizeof(asn1_DEF_Test_structure_1_tags)
-		/sizeof(asn1_DEF_Test_structure_1_tags[0]), /* 1 */
-	asn1_MBR_Test_structure_1,
+	asn_DEF_Test_structure_1_tags,
+	sizeof(asn_DEF_Test_structure_1_tags)
+		/sizeof(asn_DEF_Test_structure_1_tags[0]), /* 1 */
+	asn_DEF_Test_structure_1_tags,	/* Same as above */
+	sizeof(asn_DEF_Test_structure_1_tags)
+		/sizeof(asn_DEF_Test_structure_1_tags[0]), /* 1 */
+	asn_MBR_Test_structure_1,
 	4,	/* Elements count */
-	&asn1_DEF_Test_structure_1_specs	/* Additional specs */
+	&asn_DEF_Test_structure_1_specs	/* Additional specs */
 };
 
 
@@ -202,7 +204,11 @@
 	Choice_1_PR_not,
 	Choice_1_PR_other,
 } Choice_1_PR;
-extern asn1_TYPE_descriptor_t asn1_DEF_Choice_1;
+
+struct Choice_1;	/* Forward declaration */
+
+struct Choice_1;	/* Forward declaration */
+extern asn_TYPE_descriptor_t asn_DEF_Choice_1;
 
 /*** <<< TYPE-DECLS [Choice-1] >>> ***/
 
@@ -215,38 +221,38 @@
 			A_SET_OF(struct Choice_1) list;
 			
 			/* Context for parsing across buffer boundaries */
-			ber_dec_ctx_t _ber_dec_ctx;
+			asn_struct_ctx_t _asn_ctx;
 		} or;
 		struct Choice_1	*not;
 		INTEGER_t	 other;
 	} choice;
 	
 	/* Context for parsing across buffer boundaries */
-	ber_dec_ctx_t _ber_dec_ctx;
+	asn_struct_ctx_t _asn_ctx;
 } Choice_1_t;
 
 /*** <<< STAT-DEFS [Choice-1] >>> ***/
 
-static asn1_TYPE_member_t asn1_MBR_or[] = {
+static asn_TYPE_member_t asn_MBR_or[] = {
 	{ ATF_NOFLAGS, 0, 0,
 		.tag = -1 /* Ambiguous tag (CHOICE?) */,
 		.tag_mode = 0,
-		.type = (void *)&asn1_DEF_Choice_1,
+		.type = (void *)&asn_DEF_Choice_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = ""
 		},
 };
-static ber_tlv_tag_t asn1_DEF_or_tags[] = {
+static ber_tlv_tag_t asn_DEF_or_tags[] = {
 	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
-static asn1_SET_OF_specifics_t asn1_DEF_or_specs = {
+static asn_SET_OF_specifics_t asn_DEF_or_specs = {
 	sizeof(struct or),
-	offsetof(struct or, _ber_dec_ctx),
+	offsetof(struct or, _asn_ctx),
 	1,	/* XER encoding is XMLValueList */
 };
 static /* Use -fall-defs-global to expose */
-asn1_TYPE_descriptor_t asn1_DEF_or = {
+asn_TYPE_descriptor_t asn_DEF_or = {
 	"or",
 	SET_OF_free,
 	SET_OF_print,
@@ -256,63 +262,63 @@
 	0,				/* Not implemented yet */
 	SET_OF_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_or_tags,
-	sizeof(asn1_DEF_or_tags)
-		/sizeof(asn1_DEF_or_tags[0]) - 1, /* 1 */
-	asn1_DEF_or_tags,	/* Same as above */
-	sizeof(asn1_DEF_or_tags)
-		/sizeof(asn1_DEF_or_tags[0]), /* 2 */
-	asn1_MBR_or,
+	asn_DEF_or_tags,
+	sizeof(asn_DEF_or_tags)
+		/sizeof(asn_DEF_or_tags[0]) - 1, /* 1 */
+	asn_DEF_or_tags,	/* Same as above */
+	sizeof(asn_DEF_or_tags)
+		/sizeof(asn_DEF_or_tags[0]), /* 2 */
+	asn_MBR_or,
 	1,	/* Single element */
-	&asn1_DEF_or_specs	/* Additional specs */
+	&asn_DEF_or_specs	/* Additional specs */
 };
 
-static asn1_TYPE_member_t asn1_MBR_Choice_1[] = {
+static asn_TYPE_member_t asn_MBR_Choice_1[] = {
 	{ ATF_POINTER, 0, offsetof(struct Choice_1, choice.and),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		.tag_mode = +1,	/* EXPLICIT tag at current level */
-		.type = (void *)&asn1_DEF_Choice_1,
+		.type = (void *)&asn_DEF_Choice_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "and"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.or),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		.tag_mode = -1,	/* IMPLICIT tag at current level */
-		.type = (void *)&asn1_DEF_or,
+		.type = (void *)&asn_DEF_or,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "or"
 		},
 	{ ATF_POINTER, 0, offsetof(struct Choice_1, choice.not),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 		.tag_mode = +1,	/* EXPLICIT tag at current level */
-		.type = (void *)&asn1_DEF_Choice_1,
+		.type = (void *)&asn_DEF_Choice_1,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "not"
 		},
 	{ ATF_NOFLAGS, 0, offsetof(struct Choice_1, choice.other),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)),
 		.tag_mode = +1,	/* EXPLICIT tag at current level */
-		.type = (void *)&asn1_DEF_INTEGER,
+		.type = (void *)&asn_DEF_INTEGER,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "other"
 		},
 };
-static asn1_TYPE_tag2member_t asn1_DEF_Choice_1_tag2el[] = {
+static asn_TYPE_tag2member_t asn_DEF_Choice_1_tag2el[] = {
     { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* and at 22 */
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* or at 23 */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* not at 24 */
     { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 }, /* other at 26 */
 };
-static asn1_CHOICE_specifics_t asn1_DEF_Choice_1_specs = {
+static asn_CHOICE_specifics_t asn_DEF_Choice_1_specs = {
 	sizeof(struct Choice_1),
-	offsetof(struct Choice_1, _ber_dec_ctx),
+	offsetof(struct Choice_1, _asn_ctx),
 	offsetof(struct Choice_1, present),
 	sizeof(((struct Choice_1 *)0)->present),
-	asn1_DEF_Choice_1_tag2el,
+	asn_DEF_Choice_1_tag2el,
 	4,	/* Count of tags in the map */
 	0	/* Whether extensible */
 };
-asn1_TYPE_descriptor_t asn1_DEF_Choice_1 = {
+asn_TYPE_descriptor_t asn_DEF_Choice_1 = {
 	"Choice-1",
 	CHOICE_free,
 	CHOICE_print,
@@ -326,8 +332,174 @@
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
 	0,	/* No tags (count) */
-	asn1_MBR_Choice_1,
+	asn_MBR_Choice_1,
 	4,	/* Elements count */
-	&asn1_DEF_Choice_1_specs	/* Additional specs */
+	&asn_DEF_Choice_1_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Test-structure-2] >>> ***/
+
+#include <Test-structure-3.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Test-structure-2] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Test_structure_2_PR {
+	Test_structure_2_PR_m1,	/* Member m1 is present */
+} Test_structure_2_PR;
+
+struct Test_structure_3;	/* Forward declaration */
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_2;
+
+/*** <<< TYPE-DECLS [Test-structure-2] >>> ***/
+
+
+typedef struct Test_structure_2 {
+	struct Test_structure_3	*m1	/* OPTIONAL */;
+	
+	/* Presence bitmask: ASN_SET_ISPRESENT(pTest_structure_2, Test_structure_2_PR_x) */
+	unsigned int _presence_map
+		[((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Test_structure_2_t;
+
+/*** <<< STAT-DEFS [Test-structure-2] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Test_structure_2[] = {
+	{ ATF_POINTER, 1, offsetof(struct Test_structure_2, m1),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_Test_structure_3,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "m1"
+		},
+};
+static ber_tlv_tag_t asn_DEF_Test_structure_2_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_Test_structure_2_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 }, /* m1 at 28 */
+};
+static uint8_t asn_DEF_Test_structure_2_mmap[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	(0 << 7)
+};
+static asn_SET_specifics_t asn_DEF_Test_structure_2_specs = {
+	sizeof(struct Test_structure_2),
+	offsetof(struct Test_structure_2, _asn_ctx),
+	offsetof(struct Test_structure_2, _presence_map),
+	asn_DEF_Test_structure_2_tag2el,
+	1,	/* Count of tags in the map */
+	0,	/* Whether extensible */
+	(unsigned int *)asn_DEF_Test_structure_2_mmap	/* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Test_structure_2 = {
+	"Test-structure-2",
+	SET_free,
+	SET_print,
+	SET_constraint,
+	SET_decode_ber,
+	SET_encode_der,
+	0,				/* Not implemented yet */
+	SET_encode_xer,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Test_structure_2_tags,
+	sizeof(asn_DEF_Test_structure_2_tags)
+		/sizeof(asn_DEF_Test_structure_2_tags[0]), /* 1 */
+	asn_DEF_Test_structure_2_tags,	/* Same as above */
+	sizeof(asn_DEF_Test_structure_2_tags)
+		/sizeof(asn_DEF_Test_structure_2_tags[0]), /* 1 */
+	asn_MBR_Test_structure_2,
+	1,	/* Elements count */
+	&asn_DEF_Test_structure_2_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Test-structure-3] >>> ***/
+
+#include <Test-structure-2.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Test-structure-3] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Test_structure_3_PR {
+	Test_structure_3_PR_m1,	/* Member m1 is present */
+} Test_structure_3_PR;
+
+struct Test_structure_2;	/* Forward declaration */
+extern asn_TYPE_descriptor_t asn_DEF_Test_structure_3;
+
+/*** <<< TYPE-DECLS [Test-structure-3] >>> ***/
+
+
+typedef struct Test_structure_3 {
+	struct Test_structure_2	*m1	/* OPTIONAL */;
+	
+	/* Presence bitmask: ASN_SET_ISPRESENT(pTest_structure_3, Test_structure_3_PR_x) */
+	unsigned int _presence_map
+		[((1+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Test_structure_3_t;
+
+/*** <<< STAT-DEFS [Test-structure-3] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Test_structure_3[] = {
+	{ ATF_POINTER, 1, offsetof(struct Test_structure_3, m1),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_Test_structure_2,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "m1"
+		},
+};
+static ber_tlv_tag_t asn_DEF_Test_structure_3_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_Test_structure_3_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 }, /* m1 at 29 */
+};
+static uint8_t asn_DEF_Test_structure_3_mmap[(1 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	(0 << 7)
+};
+static asn_SET_specifics_t asn_DEF_Test_structure_3_specs = {
+	sizeof(struct Test_structure_3),
+	offsetof(struct Test_structure_3, _asn_ctx),
+	offsetof(struct Test_structure_3, _presence_map),
+	asn_DEF_Test_structure_3_tag2el,
+	1,	/* Count of tags in the map */
+	0,	/* Whether extensible */
+	(unsigned int *)asn_DEF_Test_structure_3_mmap	/* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_Test_structure_3 = {
+	"Test-structure-3",
+	SET_free,
+	SET_print,
+	SET_constraint,
+	SET_decode_ber,
+	SET_encode_der,
+	0,				/* Not implemented yet */
+	SET_encode_xer,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Test_structure_3_tags,
+	sizeof(asn_DEF_Test_structure_3_tags)
+		/sizeof(asn_DEF_Test_structure_3_tags[0]), /* 1 */
+	asn_DEF_Test_structure_3_tags,	/* Same as above */
+	sizeof(asn_DEF_Test_structure_3_tags)
+		/sizeof(asn_DEF_Test_structure_3_tags[0]), /* 1 */
+	asn_MBR_Test_structure_3,
+	1,	/* Elements count */
+	&asn_DEF_Test_structure_3_specs	/* Additional specs */
 };
 
