diff --git a/tests/19-param-OK.asn1 b/tests/19-param-OK.asn1
index 37d7c44..cd132d2 100644
--- a/tests/19-param-OK.asn1
+++ b/tests/19-param-OK.asn1
@@ -25,6 +25,7 @@
 
 	Name ::= SEQUENCE OF RelativeDistinguishedName
 
-	RelativeDistinguishedName ::= SET SIZE (1..MAX) OF IA5String
+	RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
+		IA5String (FROM("A".."Z"|"a".."z"|"0-9"|",-."))
 
 END
diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P
index 383cafc..6a8553b 100644
--- a/tests/39-sequence-of-OK.asn1.-P
+++ b/tests/39-sequence-of-OK.asn1.-P
@@ -29,46 +29,54 @@
 
 /*** <<< STAT-DEFS [T] >>> ***/
 
-	static asn1_SET_OF_element_t asn1_DEF_collection_elements[] = {
-		{ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-			(void *)&asn1_DEF_T2 },
-	};
-	static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-	};
-	static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
-		sizeof(struct collection),
-		offsetof(struct collection, _ber_dec_ctx),
-		asn1_DEF_collection_elements
-	};
-	asn1_TYPE_descriptor_t asn1_DEF_collection = {
-		"collection",
-		SEQUENCE_OF_constraint,
-		SEQUENCE_OF_decode_ber,
-		SEQUENCE_OF_encode_der,
-		SEQUENCE_OF_print,
-		SEQUENCE_OF_free,
-		0,	/* Use generic outmost tag fetcher */
-		asn1_DEF_collection_tags,
-		sizeof(asn1_DEF_collection_tags)
-			/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
-		1,	/* Tags to skip */
-		1,	/* Whether CONSTRUCTED */
-		&asn1_DEF_collection_specs	/* Additional specs */
-	};
-	
-static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
-	{ offsetof(struct T, int), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		(void *)&asn1_DEF_INTEGER,
-		"int"
+static asn1_TYPE_member_t asn1_MBR_collection[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_T2,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
 		},
-	{ offsetof(struct T, collection), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_collection,
-		"collection"
+};
+static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
+	sizeof(struct collection),
+	offsetof(struct collection, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_collection = {
+	"collection",
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_collection_tags,
+	sizeof(asn1_DEF_collection_tags)
+		/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_collection,
+	1,	/* Single element */
+	&asn1_DEF_collection_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_T[] = {
+	{ 0, offsetof(struct T, int),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "int"
+		},
+	{ 0, offsetof(struct T, collection),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_collection,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "collection"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -81,8 +89,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
 	sizeof(struct T),
 	offsetof(struct T, _ber_dec_ctx),
-	asn1_DEF_T_elements,
-	2,	/* Elements count */
 	asn1_DEF_T_tag2el,
 	2,	/* Count of tags in the map */
 	-1,	/* Start extensions */
@@ -101,6 +107,8 @@
 		/sizeof(asn1_DEF_T_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T,
+	2,	/* Elements count */
 	&asn1_DEF_T_specs	/* Additional specs */
 };
 
@@ -128,18 +136,20 @@
 
 /*** <<< STAT-DEFS [T2] >>> ***/
 
-static asn1_SEQUENCE_element_t asn1_DEF_T2_elements[] = {
-	{ offsetof(struct T2, flag), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
-		0,
-		(void *)&asn1_DEF_BOOLEAN,
-		"flag"
+static asn1_TYPE_member_t asn1_MBR_T2[] = {
+	{ 0, offsetof(struct T2, flag),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_BOOLEAN,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "flag"
 		},
-	{ offsetof(struct T2, str), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
-		0,
-		(void *)&asn1_DEF_UTF8String,
-		"str"
+	{ 0, offsetof(struct T2, str),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_UTF8String,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "str"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@@ -152,8 +162,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_T2_specs = {
 	sizeof(struct T2),
 	offsetof(struct T2, _ber_dec_ctx),
-	asn1_DEF_T2_elements,
-	2,	/* Elements count */
 	asn1_DEF_T2_tag2el,
 	2,	/* Count of tags in the map */
 	-1,	/* Start extensions */
@@ -172,6 +180,8 @@
 		/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T2,
+	2,	/* Elements count */
 	&asn1_DEF_T2_specs	/* Additional specs */
 };
 
diff --git a/tests/42-real-life-OK.asn1 b/tests/42-real-life-OK.asn1
index 33802c2..8c1d59e 100644
--- a/tests/42-real-life-OK.asn1
+++ b/tests/42-real-life-OK.asn1
@@ -21,7 +21,7 @@
 	 */
 	LogLine ::= SEQUENCE {
 		line-digest	IA5String,	-- Log line normal form
-		varsets		SEQUENCE (1..MAX) OF VariablePartSet
+		varsets		SEQUENCE SIZE(1..MAX) OF VariablePartSet
 	}
 
 	/*
@@ -30,7 +30,7 @@
 	 * or a range between two samples.
 	 */
 	VariablePartSet ::= SEQUENCE {
-		vparts		SEQUENCE (0..MAX) OF VariablePart, -- {123,321}
+		vparts		SEQUENCE SIZE(0..MAX) OF VariablePart, -- {123,321}
 		resolution	ActionItem
 	}
 
@@ -39,7 +39,7 @@
 	 */
 	VariablePart ::= CHOICE {
 		-- A set of acceptable values
-		vset	SET (1..MAX) OF VisibleString,
+		vset	SET SIZE(1..MAX) OF VisibleString,
 		-- A range of acceptable values
 		vrange	SEQUENCE {
 			from	VisibleString,
diff --git a/tests/42-real-life-OK.asn1.-EF b/tests/42-real-life-OK.asn1.-EF
index 7b3a89d..14492fa 100644
--- a/tests/42-real-life-OK.asn1.-EF
+++ b/tests/42-real-life-OK.asn1.-EF
@@ -7,18 +7,18 @@
 
 LogLine ::= SEQUENCE {
     line-digest	 IA5String,
-    varsets	 SEQUENCE OF VariablePartSet,
+    varsets	 SEQUENCE SIZE(1..MAX) OF VariablePartSet,
     ...
 }
 
 VariablePartSet ::= SEQUENCE {
-    vparts	 SEQUENCE OF VariablePart,
+    vparts	 SEQUENCE SIZE(0..MAX) OF VariablePart,
     resolution	 ActionItem,
     ...
 }
 
 VariablePart ::= CHOICE {
-    vset	 SET OF VisibleString,
+    vset	 SET SIZE(1..MAX) OF VisibleString,
     vrange	 SEQUENCE {
         from	 VisibleString,    
         to	 VisibleString,    
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index ece1127..2bd4579 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -31,48 +31,86 @@
 	ber_dec_ctx_t _ber_dec_ctx;
 } LogLine_t;
 
+/*** <<< CODE [LogLine] >>> ***/
+
+static int
+memb_varsets_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given", td->name);
+		return -1;
+	}
+	
+	{ /* Determine the number of elements */
+		const A_SEQUENCE_OF(void) *list;
+		(const void *)list = sptr;
+		size = list->count;
+	}
+	
+	if((size >= 1)) {
+		/* Constraint check succeeded */
+		return 1;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed", td->name);
+		return -1;
+	}
+}
+
+
 /*** <<< STAT-DEFS [LogLine] >>> ***/
 
-	static asn1_SET_OF_element_t asn1_DEF_varsets_elements[] = {
-		{ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-			(void *)&asn1_DEF_VariablePartSet },
-	};
-	static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-	};
-	static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
-		sizeof(struct varsets),
-		offsetof(struct varsets, _ber_dec_ctx),
-		asn1_DEF_varsets_elements
-	};
-	asn1_TYPE_descriptor_t asn1_DEF_varsets = {
-		"varsets",
-		SEQUENCE_OF_constraint,
-		SEQUENCE_OF_decode_ber,
-		SEQUENCE_OF_encode_der,
-		SEQUENCE_OF_print,
-		SEQUENCE_OF_free,
-		0,	/* Use generic outmost tag fetcher */
-		asn1_DEF_varsets_tags,
-		sizeof(asn1_DEF_varsets_tags)
-			/sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
-		1,	/* Tags to skip */
-		1,	/* Whether CONSTRUCTED */
-		&asn1_DEF_varsets_specs	/* Additional specs */
-	};
-	
-static asn1_SEQUENCE_element_t asn1_DEF_LogLine_elements[] = {
-	{ offsetof(struct LogLine, line_digest), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
-		0,
-		(void *)&asn1_DEF_IA5String,
-		"line-digest"
+static asn1_TYPE_member_t asn1_MBR_varsets[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VariablePartSet,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
 		},
-	{ offsetof(struct LogLine, varsets), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_varsets,
-		"varsets"
+};
+static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
+	sizeof(struct varsets),
+	offsetof(struct varsets, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_varsets = {
+	"varsets",
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_varsets_tags,
+	sizeof(asn1_DEF_varsets_tags)
+		/sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_varsets,
+	1,	/* Single element */
+	&asn1_DEF_varsets_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_LogLine[] = {
+	{ 0, offsetof(struct LogLine, line_digest),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_IA5String,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "line-digest"
+		},
+	{ 0, offsetof(struct LogLine, varsets),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_varsets,
+		.memb_constraints = memb_varsets_constraint,
+		.name = "varsets"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_LogLine_tags[] = {
@@ -85,8 +123,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_LogLine_specs = {
 	sizeof(struct LogLine),
 	offsetof(struct LogLine, _ber_dec_ctx),
-	asn1_DEF_LogLine_elements,
-	2,	/* Elements count */
 	asn1_DEF_LogLine_tag2el,
 	2,	/* Count of tags in the map */
 	1,	/* Start extensions */
@@ -105,6 +141,8 @@
 		/sizeof(asn1_DEF_LogLine_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_LogLine,
+	2,	/* Elements count */
 	&asn1_DEF_LogLine_specs	/* Additional specs */
 };
 
@@ -141,48 +179,78 @@
 	ber_dec_ctx_t _ber_dec_ctx;
 } VariablePartSet_t;
 
+/*** <<< CODE [VariablePartSet] >>> ***/
+
+static int
+memb_vparts_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given", td->name);
+		return -1;
+	}
+	
+	
+	if(1 /* No applicable constraints whatsoever */) {
+		/* Nothing is here. See below */
+	}
+	
+	return td->check_constraints
+		(td, sptr, app_errlog, app_key);
+}
+
+
 /*** <<< STAT-DEFS [VariablePartSet] >>> ***/
 
-	static asn1_SET_OF_element_t asn1_DEF_vparts_elements[] = {
-		{ -1 /* Ambiguous tag (CHOICE?) */,
-			(void *)&asn1_DEF_VariablePart },
-	};
-	static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-	};
-	static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
-		sizeof(struct vparts),
-		offsetof(struct vparts, _ber_dec_ctx),
-		asn1_DEF_vparts_elements
-	};
-	asn1_TYPE_descriptor_t asn1_DEF_vparts = {
-		"vparts",
-		SEQUENCE_OF_constraint,
-		SEQUENCE_OF_decode_ber,
-		SEQUENCE_OF_encode_der,
-		SEQUENCE_OF_print,
-		SEQUENCE_OF_free,
-		0,	/* Use generic outmost tag fetcher */
-		asn1_DEF_vparts_tags,
-		sizeof(asn1_DEF_vparts_tags)
-			/sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
-		1,	/* Tags to skip */
-		1,	/* Whether CONSTRUCTED */
-		&asn1_DEF_vparts_specs	/* Additional specs */
-	};
-	
-static asn1_SEQUENCE_element_t asn1_DEF_VariablePartSet_elements[] = {
-	{ offsetof(struct VariablePartSet, vparts), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_vparts,
-		"vparts"
+static asn1_TYPE_member_t asn1_MBR_vparts[] = {
+	{ 0, 0,
+		.tag = -1 /* Ambiguous tag (CHOICE?) */,
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VariablePart,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
 		},
-	{ offsetof(struct VariablePartSet, resolution), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_ActionItem,
-		"resolution"
+};
+static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
+	sizeof(struct vparts),
+	offsetof(struct vparts, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_vparts = {
+	"vparts",
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_vparts_tags,
+	sizeof(asn1_DEF_vparts_tags)
+		/sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_vparts,
+	1,	/* Single element */
+	&asn1_DEF_vparts_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_VariablePartSet[] = {
+	{ 0, offsetof(struct VariablePartSet, vparts),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_vparts,
+		.memb_constraints = memb_vparts_constraint,
+		.name = "vparts"
+		},
+	{ 0, offsetof(struct VariablePartSet, resolution),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_ActionItem,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "resolution"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_VariablePartSet_tags[] = {
@@ -195,8 +263,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_VariablePartSet_specs = {
 	sizeof(struct VariablePartSet),
 	offsetof(struct VariablePartSet, _ber_dec_ctx),
-	asn1_DEF_VariablePartSet_elements,
-	2,	/* Elements count */
 	asn1_DEF_VariablePartSet_tag2el,
 	2,	/* Count of tags in the map */
 	1,	/* Start extensions */
@@ -215,6 +281,8 @@
 		/sizeof(asn1_DEF_VariablePartSet_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_VariablePartSet,
+	2,	/* Elements count */
 	&asn1_DEF_VariablePartSet_specs	/* Additional specs */
 };
 
@@ -270,95 +338,135 @@
 	ber_dec_ctx_t _ber_dec_ctx;
 } VariablePart_t;
 
+/*** <<< CODE [VariablePart] >>> ***/
+
+static int
+memb_vset_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given", td->name);
+		return -1;
+	}
+	
+	{ /* Determine the number of elements */
+		const A_SET_OF(void) *list;
+		(const void *)list = sptr;
+		size = list->count;
+	}
+	
+	if((size >= 1)) {
+		/* Constraint check succeeded */
+		return 1;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed", td->name);
+		return -1;
+	}
+}
+
+
 /*** <<< STAT-DEFS [VariablePart] >>> ***/
 
-		static asn1_SET_OF_element_t asn1_DEF_vset_elements[] = {
-			{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
-				(void *)&asn1_DEF_VisibleString },
-		};
-		static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
-			(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
-		};
-		static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
-			sizeof(struct vset),
-			offsetof(struct vset, _ber_dec_ctx),
-			asn1_DEF_vset_elements
-		};
-		asn1_TYPE_descriptor_t asn1_DEF_vset = {
-			"vset",
-			SET_OF_constraint,
-			SET_OF_decode_ber,
-			SET_OF_encode_der,
-			SET_OF_print,
-			SET_OF_free,
-			0,	/* Use generic outmost tag fetcher */
-			asn1_DEF_vset_tags,
-			sizeof(asn1_DEF_vset_tags)
-				/sizeof(asn1_DEF_vset_tags[0]), /* 1 */
-			1,	/* Tags to skip */
-			1,	/* Whether CONSTRUCTED */
-			&asn1_DEF_vset_specs	/* Additional specs */
-		};
-		
-		static asn1_SEQUENCE_element_t asn1_DEF_vrange_elements[] = {
-			{ offsetof(struct vrange, from), 0,
-				(ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
-				0,
-				(void *)&asn1_DEF_VisibleString,
-				"from"
-				},
-			{ offsetof(struct vrange, to), 0,
-				(ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
-				0,
-				(void *)&asn1_DEF_VisibleString,
-				"to"
-				},
-		};
-		static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
-			(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-		};
-		static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
-		    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
-		    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
-		};
-		static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
-			sizeof(struct vrange),
-			offsetof(struct vrange, _ber_dec_ctx),
-			asn1_DEF_vrange_elements,
-			2,	/* Elements count */
-			asn1_DEF_vrange_tag2el,
-			2,	/* Count of tags in the map */
-			1,	/* Start extensions */
-			3	/* Stop extensions */
-		};
-		asn1_TYPE_descriptor_t asn1_DEF_vrange = {
-			"vrange",
-			SEQUENCE_constraint,
-			SEQUENCE_decode_ber,
-			SEQUENCE_encode_der,
-			SEQUENCE_print,
-			SEQUENCE_free,
-			0,	/* Use generic outmost tag fetcher */
-			asn1_DEF_vrange_tags,
-			sizeof(asn1_DEF_vrange_tags)
-				/sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
-			1,	/* Tags to skip */
-			1,	/* Whether CONSTRUCTED */
-			&asn1_DEF_vrange_specs	/* Additional specs */
-		};
-		
-static asn1_CHOICE_element_t asn1_DEF_VariablePart_elements[] = {
-	{ offsetof(struct VariablePart, choice.vset), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
-		0,
-		(void *)&asn1_DEF_vset,
-		"vset"
+static asn1_TYPE_member_t asn1_MBR_vset[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VisibleString,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
 		},
-	{ offsetof(struct VariablePart, choice.vrange), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_vrange,
-		"vrange"
+};
+static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
+	sizeof(struct vset),
+	offsetof(struct vset, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_vset = {
+	"vset",
+	SET_OF_constraint,
+	SET_OF_decode_ber,
+	SET_OF_encode_der,
+	SET_OF_print,
+	SET_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_vset_tags,
+	sizeof(asn1_DEF_vset_tags)
+		/sizeof(asn1_DEF_vset_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_vset,
+	1,	/* Single element */
+	&asn1_DEF_vset_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_vrange[] = {
+	{ 0, offsetof(struct vrange, from),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VisibleString,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "from"
+		},
+	{ 0, offsetof(struct vrange, to),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VisibleString,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "to"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
+	sizeof(struct vrange),
+	offsetof(struct vrange, _ber_dec_ctx),
+	asn1_DEF_vrange_tag2el,
+	2,	/* Count of tags in the map */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_vrange = {
+	"vrange",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_vrange_tags,
+	sizeof(asn1_DEF_vrange_tags)
+		/sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_vrange,
+	2,	/* Elements count */
+	&asn1_DEF_vrange_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_VariablePart[] = {
+	{ 0, offsetof(struct VariablePart, choice.vset),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_vset,
+		.memb_constraints = memb_vset_constraint,
+		.name = "vset"
+		},
+	{ 0, offsetof(struct VariablePart, choice.vrange),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_vrange,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "vrange"
 		},
 };
 static asn1_TYPE_tag2member_t asn1_DEF_VariablePart_tag2el[] = {
@@ -370,8 +478,6 @@
 	offsetof(struct VariablePart, _ber_dec_ctx),
 	offsetof(struct VariablePart, present),
 	sizeof(((struct VariablePart *)0)->present),
-	asn1_DEF_VariablePart_elements,
-	2,	/* Elements count */
 	asn1_DEF_VariablePart_tag2el,
 	2,	/* Count of tags in the map */
 	1	/* Whether extensible */
@@ -388,6 +494,8 @@
 	0,	/* No explicit tags (count) */
 	0,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_VariablePart,
+	2,	/* Elements count */
 	&asn1_DEF_VariablePart_specs	/* Additional specs */
 };
 
@@ -403,14 +511,14 @@
 
 /*** <<< DEPS [ActionItem] >>> ***/
 
-	typedef enum accept_as {
-		accept_as_unknown	= 0,
-		accept_as_safe	= 1,
-		accept_as_unsafe	= 2,
-		/*
-		 * Enumeration is extensible
-		 */
-	} accept_as_e;
+typedef enum accept_as {
+	accept_as_unknown	= 0,
+	accept_as_safe	= 1,
+	accept_as_unsafe	= 2,
+	/*
+	 * Enumeration is extensible
+	 */
+} accept_as_e;
 extern asn1_TYPE_descriptor_t asn1_DEF_ActionItem;
 
 /*** <<< TYPE-DECLS [ActionItem] >>> ***/
@@ -445,93 +553,103 @@
 
 /*** <<< STAT-DEFS [ActionItem] >>> ***/
 
-		static asn1_SET_OF_element_t asn1_DEF_email_elements[] = {
-			{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
-				(void *)&asn1_DEF_VisibleString },
-		};
-		static ber_tlv_tag_t asn1_DEF_email_tags[] = {
-			(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
-		};
-		static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
-			sizeof(struct email),
-			offsetof(struct email, _ber_dec_ctx),
-			asn1_DEF_email_elements
-		};
-		asn1_TYPE_descriptor_t asn1_DEF_email = {
-			"email",
-			SET_OF_constraint,
-			SET_OF_decode_ber,
-			SET_OF_encode_der,
-			SET_OF_print,
-			SET_OF_free,
-			0,	/* Use generic outmost tag fetcher */
-			asn1_DEF_email_tags,
-			sizeof(asn1_DEF_email_tags)
-				/sizeof(asn1_DEF_email_tags[0]), /* 1 */
-			1,	/* Tags to skip */
-			1,	/* Whether CONSTRUCTED */
-			&asn1_DEF_email_specs	/* Additional specs */
-		};
-		
-	static asn1_SEQUENCE_element_t asn1_DEF_notify_elements[] = {
-		{ offsetof(struct notify, critical), 0,
-			(ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
-			0,
-			(void *)&asn1_DEF_BOOLEAN,
-			"critical"
-			},
-		{ offsetof(struct notify, email), 0,
-			(ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
-			0,
-			(void *)&asn1_DEF_email,
-			"email"
-			},
-	};
-	static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
-	};
-	static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
-	    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
-	    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
-	};
-	static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
-		sizeof(struct notify),
-		offsetof(struct notify, _ber_dec_ctx),
-		asn1_DEF_notify_elements,
-		2,	/* Elements count */
-		asn1_DEF_notify_tag2el,
-		2,	/* Count of tags in the map */
-		1,	/* Start extensions */
-		3	/* Stop extensions */
-	};
-	asn1_TYPE_descriptor_t asn1_DEF_notify = {
-		"notify",
-		SEQUENCE_constraint,
-		SEQUENCE_decode_ber,
-		SEQUENCE_encode_der,
-		SEQUENCE_print,
-		SEQUENCE_free,
-		0,	/* Use generic outmost tag fetcher */
-		asn1_DEF_notify_tags,
-		sizeof(asn1_DEF_notify_tags)
-			/sizeof(asn1_DEF_notify_tags[0]), /* 1 */
-		1,	/* Tags to skip */
-		1,	/* Whether CONSTRUCTED */
-		&asn1_DEF_notify_specs	/* Additional specs */
-	};
-	
-static asn1_SEQUENCE_element_t asn1_DEF_ActionItem_elements[] = {
-	{ offsetof(struct ActionItem, accept_as), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
-		0,
-		(void *)&asn1_DEF_ENUMERATED,
-		"accept-as"
+static asn1_TYPE_member_t asn1_MBR_email[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_VisibleString,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
 		},
-	{ offsetof(struct ActionItem, notify), 1,
-		(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
-		0,
-		(void *)&asn1_DEF_notify,
-		"notify"
+};
+static ber_tlv_tag_t asn1_DEF_email_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
+	sizeof(struct email),
+	offsetof(struct email, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_email = {
+	"email",
+	SET_OF_constraint,
+	SET_OF_decode_ber,
+	SET_OF_encode_der,
+	SET_OF_print,
+	SET_OF_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_email_tags,
+	sizeof(asn1_DEF_email_tags)
+		/sizeof(asn1_DEF_email_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_email,
+	1,	/* Single element */
+	&asn1_DEF_email_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_notify[] = {
+	{ 0, offsetof(struct notify, critical),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_BOOLEAN,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "critical"
+		},
+	{ 0, offsetof(struct notify, email),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_email,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "email"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
+	sizeof(struct notify),
+	offsetof(struct notify, _ber_dec_ctx),
+	asn1_DEF_notify_tag2el,
+	2,	/* Count of tags in the map */
+	1,	/* Start extensions */
+	3	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_notify = {
+	"notify",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_notify_tags,
+	sizeof(asn1_DEF_notify_tags)
+		/sizeof(asn1_DEF_notify_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_notify,
+	2,	/* Elements count */
+	&asn1_DEF_notify_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_ActionItem[] = {
+	{ 0, offsetof(struct ActionItem, accept_as),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_ENUMERATED,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "accept-as"
+		},
+	{ 1, offsetof(struct ActionItem, notify),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_notify,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "notify"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_ActionItem_tags[] = {
@@ -544,8 +662,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_ActionItem_specs = {
 	sizeof(struct ActionItem),
 	offsetof(struct ActionItem, _ber_dec_ctx),
-	asn1_DEF_ActionItem_elements,
-	2,	/* Elements count */
 	asn1_DEF_ActionItem_tag2el,
 	2,	/* Count of tags in the map */
 	1,	/* Start extensions */
@@ -564,6 +680,8 @@
 		/sizeof(asn1_DEF_ActionItem_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_ActionItem,
+	2,	/* Elements count */
 	&asn1_DEF_ActionItem_specs	/* Additional specs */
 };
 
diff --git a/tests/44-choice-in-sequence-OK.asn1.-P b/tests/44-choice-in-sequence-OK.asn1.-P
index 0c65871..3a12ecf 100644
--- a/tests/44-choice-in-sequence-OK.asn1.-P
+++ b/tests/44-choice-in-sequence-OK.asn1.-P
@@ -7,23 +7,23 @@
 
 /*** <<< DEPS [T] >>> ***/
 
-	typedef enum b_PR {
-		b_PR_NOTHING,	/* No components present */
-		b_PR_c,
-		b_PR_d,
-		b_PR_e,
-		b_PR_h,
-	} b_PR;
-			typedef enum e_PR {
-				e_PR_NOTHING,	/* No components present */
-				e_PR_f,
-				e_PR_g,
-			} e_PR;
-			typedef enum h_PR {
-				h_PR_NOTHING,	/* No components present */
-				h_PR_i,
-				h_PR_j,
-			} h_PR;
+typedef enum b_PR {
+	b_PR_NOTHING,	/* No components present */
+	b_PR_c,
+	b_PR_d,
+	b_PR_e,
+	b_PR_h,
+} b_PR;
+typedef enum e_PR {
+	e_PR_NOTHING,	/* No components present */
+	e_PR_f,
+	e_PR_g,
+} e_PR;
+typedef enum h_PR {
+	h_PR_NOTHING,	/* No components present */
+	h_PR_i,
+	h_PR_j,
+} h_PR;
 extern asn1_TYPE_descriptor_t asn1_DEF_T;
 
 /*** <<< TYPE-DECLS [T] >>> ***/
@@ -68,165 +68,175 @@
 
 /*** <<< STAT-DEFS [T] >>> ***/
 
-			static asn1_CHOICE_element_t asn1_DEF_e_elements[] = {
-				{ offsetof(struct e, choice.f), 0,
-					(ASN_TAG_CLASS_PRIVATE | (7 << 2)),
-					-1,	/* IMPLICIT tag at current level */
-					(void *)&asn1_DEF_NULL,
-					"f"
-					},
-				{ offsetof(struct e, choice.g), 0,
-					(ASN_TAG_CLASS_PRIVATE | (8 << 2)),
-					-1,	/* IMPLICIT tag at current level */
-					(void *)&asn1_DEF_NULL,
-					"g"
-					},
-			};
-			static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
-			    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
-			    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
-			};
-			static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
-				sizeof(struct e),
-				offsetof(struct e, _ber_dec_ctx),
-				offsetof(struct e, present),
-				sizeof(((struct e *)0)->present),
-				asn1_DEF_e_elements,
-				2,	/* Elements count */
-				asn1_DEF_e_tag2el,
-				2,	/* Count of tags in the map */
-				0	/* Whether extensible */
-			};
-			asn1_TYPE_descriptor_t asn1_DEF_e = {
-				"e",
-				CHOICE_constraint,
-				CHOICE_decode_ber,
-				CHOICE_encode_der,
-				CHOICE_print,
-				CHOICE_free,
-				CHOICE_outmost_tag,
-				0,	/* No explicit tags (pointer) */
-				0,	/* No explicit tags (count) */
-				0,	/* Tags to skip */
-				1,	/* Whether CONSTRUCTED */
-				&asn1_DEF_e_specs	/* Additional specs */
-			};
-			
-			static asn1_CHOICE_element_t asn1_DEF_h_elements[] = {
-				{ offsetof(struct h, choice.i), 0,
-					(ASN_TAG_CLASS_PRIVATE | (1 << 2)),
-					-1,	/* IMPLICIT tag at current level */
-					(void *)&asn1_DEF_NULL,
-					"i"
-					},
-				{ offsetof(struct h, choice.j), 0,
-					(ASN_TAG_CLASS_PRIVATE | (2 << 2)),
-					-1,	/* IMPLICIT tag at current level */
-					(void *)&asn1_DEF_NULL,
-					"j"
-					},
-			};
-			static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
-			    { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
-			    { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
-			};
-			static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
-				sizeof(struct h),
-				offsetof(struct h, _ber_dec_ctx),
-				offsetof(struct h, present),
-				sizeof(((struct h *)0)->present),
-				asn1_DEF_h_elements,
-				2,	/* Elements count */
-				asn1_DEF_h_tag2el,
-				2,	/* Count of tags in the map */
-				0	/* Whether extensible */
-			};
-			asn1_TYPE_descriptor_t asn1_DEF_h = {
-				"h",
-				CHOICE_constraint,
-				CHOICE_decode_ber,
-				CHOICE_encode_der,
-				CHOICE_print,
-				CHOICE_free,
-				CHOICE_outmost_tag,
-				0,	/* No explicit tags (pointer) */
-				0,	/* No explicit tags (count) */
-				0,	/* Tags to skip */
-				1,	/* Whether CONSTRUCTED */
-				&asn1_DEF_h_specs	/* Additional specs */
-			};
-			
-	static asn1_CHOICE_element_t asn1_DEF_b_elements[] = {
-		{ offsetof(struct b, choice.c), 0,
-			(ASN_TAG_CLASS_PRIVATE | (5 << 2)),
-			-1,	/* IMPLICIT tag at current level */
-			(void *)&asn1_DEF_NULL,
-			"c"
-			},
-		{ offsetof(struct b, choice.d), 0,
-			(ASN_TAG_CLASS_PRIVATE | (6 << 2)),
-			-1,	/* IMPLICIT tag at current level */
-			(void *)&asn1_DEF_NULL,
-			"d"
-			},
-		{ offsetof(struct b, choice.e), 0,
-			-1 /* Ambiguous tag (CHOICE?) */,
-			0,
-			(void *)&asn1_DEF_e,
-			"e"
-			},
-		{ offsetof(struct b, choice.h), 0,
-			(ASN_TAG_CLASS_PRIVATE | (9 << 2)),
-			+1,	/* EXPLICIT tag at current level */
-			(void *)&asn1_DEF_h,
-			"h"
-			},
-	};
-	static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
-	    { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
-	    { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
-	    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
-	    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
-	    { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
-	};
-	static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
-		sizeof(struct b),
-		offsetof(struct b, _ber_dec_ctx),
-		offsetof(struct b, present),
-		sizeof(((struct b *)0)->present),
-		asn1_DEF_b_elements,
-		4,	/* Elements count */
-		asn1_DEF_b_tag2el,
-		5,	/* Count of tags in the map */
-		0	/* Whether extensible */
-	};
-	asn1_TYPE_descriptor_t asn1_DEF_b = {
-		"b",
-		CHOICE_constraint,
-		CHOICE_decode_ber,
-		CHOICE_encode_der,
-		CHOICE_print,
-		CHOICE_free,
-		CHOICE_outmost_tag,
-		0,	/* No explicit tags (pointer) */
-		0,	/* No explicit tags (count) */
-		0,	/* Tags to skip */
-		1,	/* Whether CONSTRUCTED */
-		&asn1_DEF_b_specs	/* Additional specs */
-	};
-	
-static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
-	{ offsetof(struct T, a), 0,
-		(ASN_TAG_CLASS_PRIVATE | (2 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		(void *)&asn1_DEF_NULL,
-		"a"
+static asn1_TYPE_member_t asn1_MBR_e[] = {
+	{ 0, offsetof(struct e, choice.f),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "f"
 		},
-	{ offsetof(struct T, b), 0,
-		-1 /* Ambiguous tag (CHOICE?) */,
-		0,
-		(void *)&asn1_DEF_b,
-		"b"
+	{ 0, offsetof(struct e, choice.g),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "g"
+		},
+};
+static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
+    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
+	sizeof(struct e),
+	offsetof(struct e, _ber_dec_ctx),
+	offsetof(struct e, present),
+	sizeof(((struct e *)0)->present),
+	asn1_DEF_e_tag2el,
+	2,	/* Count of tags in the map */
+	0	/* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_e = {
+	"e",
+	CHOICE_constraint,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	CHOICE_print,
+	CHOICE_free,
+	CHOICE_outmost_tag,
+	0,	/* No explicit tags (pointer) */
+	0,	/* No explicit tags (count) */
+	0,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_e,
+	2,	/* Elements count */
+	&asn1_DEF_e_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_h[] = {
+	{ 0, offsetof(struct h, choice.i),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
+		},
+	{ 0, offsetof(struct h, choice.j),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "j"
+		},
+};
+static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
+    { (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
+	sizeof(struct h),
+	offsetof(struct h, _ber_dec_ctx),
+	offsetof(struct h, present),
+	sizeof(((struct h *)0)->present),
+	asn1_DEF_h_tag2el,
+	2,	/* Count of tags in the map */
+	0	/* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_h = {
+	"h",
+	CHOICE_constraint,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	CHOICE_print,
+	CHOICE_free,
+	CHOICE_outmost_tag,
+	0,	/* No explicit tags (pointer) */
+	0,	/* No explicit tags (count) */
+	0,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_h,
+	2,	/* Elements count */
+	&asn1_DEF_h_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_b[] = {
+	{ 0, offsetof(struct b, choice.c),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "c"
+		},
+	{ 0, offsetof(struct b, choice.d),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "d"
+		},
+	{ 0, offsetof(struct b, choice.e),
+		.tag = -1 /* Ambiguous tag (CHOICE?) */,
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_e,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "e"
+		},
+	{ 0, offsetof(struct b, choice.h),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
+		.tag_mode = +1,	/* EXPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_h,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "h"
+		},
+};
+static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
+    { (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
+    { (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
+    { (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
+    { (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
+    { (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
+};
+static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
+	sizeof(struct b),
+	offsetof(struct b, _ber_dec_ctx),
+	offsetof(struct b, present),
+	sizeof(((struct b *)0)->present),
+	asn1_DEF_b_tag2el,
+	5,	/* Count of tags in the map */
+	0	/* Whether extensible */
+};
+asn1_TYPE_descriptor_t asn1_DEF_b = {
+	"b",
+	CHOICE_constraint,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	CHOICE_print,
+	CHOICE_free,
+	CHOICE_outmost_tag,
+	0,	/* No explicit tags (pointer) */
+	0,	/* No explicit tags (count) */
+	0,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_b,
+	4,	/* Elements count */
+	&asn1_DEF_b_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_T[] = {
+	{ 0, offsetof(struct T, a),
+		.tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_NULL,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "a"
+		},
+	{ 0, offsetof(struct T, b),
+		.tag = -1 /* Ambiguous tag (CHOICE?) */,
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_b,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "b"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -243,8 +253,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
 	sizeof(struct T),
 	offsetof(struct T, _ber_dec_ctx),
-	asn1_DEF_T_elements,
-	2,	/* Elements count */
 	asn1_DEF_T_tag2el,
 	6,	/* Count of tags in the map */
 	-1,	/* Start extensions */
@@ -263,6 +271,8 @@
 		/sizeof(asn1_DEF_T_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T,
+	2,	/* Elements count */
 	&asn1_DEF_T_specs	/* Additional specs */
 };
 
diff --git a/tests/46-redefine-OK.asn1.-PR b/tests/46-redefine-OK.asn1.-PR
index 639ded0..ee7aceb 100644
--- a/tests/46-redefine-OK.asn1.-PR
+++ b/tests/46-redefine-OK.asn1.-PR
@@ -18,6 +18,65 @@
 asn_struct_print_f PrimitiveType_print;
 asn_struct_free_f PrimitiveType_free;
 
+/*** <<< CODE [PrimitiveType] >>> ***/
+
+int
+PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	
+	/* Make the underlying type checker permanent */
+	td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
+	return td->check_constraints
+		(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using OCTET_STRING,
+ * so adjust the DEF appropriately.
+ */
+static void
+PrimitiveType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
+	td->ber_decoder    = asn1_DEF_OCTET_STRING.ber_decoder;
+	td->der_encoder    = asn1_DEF_OCTET_STRING.der_encoder;
+	td->free_struct    = asn1_DEF_OCTET_STRING.free_struct;
+	td->print_struct   = asn1_DEF_OCTET_STRING.print_struct;
+	td->last_tag_form  = asn1_DEF_OCTET_STRING.last_tag_form;
+	td->elements       = asn1_DEF_OCTET_STRING.elements;
+	td->elements_count = asn1_DEF_OCTET_STRING.elements_count;
+	td->specifics      = asn1_DEF_OCTET_STRING.specifics;
+}
+
+ber_dec_rval_t
+PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
+		void **structure, void *bufptr, size_t size, int tag_mode) {
+	PrimitiveType_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(td, structure,
+		bufptr, size, tag_mode);
+}
+
+der_enc_rval_t
+PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	PrimitiveType_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+int
+PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	PrimitiveType_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+void
+PrimitiveType_free(asn1_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	PrimitiveType_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+
 /*** <<< STAT-DEFS [PrimitiveType] >>> ***/
 
 static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
@@ -36,63 +95,10 @@
 		/sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	-0,	/* Unknown yet */
+	0, 0,	/* No members */
 	0	/* No specifics */
 };
 
-int
-PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_consume_bytes_f *app_errlog, void *app_key) {
-	
-	/* Make the underlying type checker permanent */
-	td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
-	return td->check_constraints
-		(td, sptr, app_errlog, app_key);
-}
-
-/*
- * This type is implemented using OCTET_STRING,
- * so adjust the DEF appropriately.
- */
-static void
-inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
-	td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
-	td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
-	td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
-	td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
-	td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
-	td->specifics = asn1_DEF_OCTET_STRING.specifics;
-}
-
-ber_dec_rval_t
-PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
-		void **structure, void *bufptr, size_t size, int tag_mode) {
-	inherit_TYPE_descriptor(td);
-	return td->ber_decoder(td, structure,
-		bufptr, size, tag_mode);
-}
-
-der_enc_rval_t
-PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
-		void *structure, int tag_mode, ber_tlv_tag_t tag,
-		asn_app_consume_bytes_f *cb, void *app_key) {
-	inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-int
-PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-void
-PrimitiveType_free(asn1_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
 
 /*** <<< INCLUDES [ConstructedType] >>> ***/
 
@@ -115,12 +121,13 @@
 
 /*** <<< STAT-DEFS [ConstructedType] >>> ***/
 
-static asn1_SEQUENCE_element_t asn1_DEF_ConstructedType_elements[] = {
-	{ offsetof(struct ConstructedType, field), 0,
-		(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
-		-1,	/* IMPLICIT tag at current level */
-		(void *)&asn1_DEF_PrimitiveType,
-		"field"
+static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
+	{ 0, offsetof(struct ConstructedType, field),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_PrimitiveType,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "field"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
@@ -132,8 +139,6 @@
 static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
 	sizeof(struct ConstructedType),
 	offsetof(struct ConstructedType, _ber_dec_ctx),
-	asn1_DEF_ConstructedType_elements,
-	1,	/* Elements count */
 	asn1_DEF_ConstructedType_tag2el,
 	1,	/* Count of tags in the map */
 	-1,	/* Start extensions */
@@ -152,6 +157,8 @@
 		/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_ConstructedType,
+	1,	/* Elements count */
 	&asn1_DEF_ConstructedType_specs	/* Additional specs */
 };
 
@@ -175,6 +182,65 @@
 asn_struct_print_f T_print;
 asn_struct_free_f T_free;
 
+/*** <<< CODE [T] >>> ***/
+
+int
+T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	
+	/* Make the underlying type checker permanent */
+	td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
+	return td->check_constraints
+		(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using ConstructedType,
+ * so adjust the DEF appropriately.
+ */
+static void
+T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
+	td->ber_decoder    = asn1_DEF_ConstructedType.ber_decoder;
+	td->der_encoder    = asn1_DEF_ConstructedType.der_encoder;
+	td->free_struct    = asn1_DEF_ConstructedType.free_struct;
+	td->print_struct   = asn1_DEF_ConstructedType.print_struct;
+	td->last_tag_form  = asn1_DEF_ConstructedType.last_tag_form;
+	td->elements       = asn1_DEF_ConstructedType.elements;
+	td->elements_count = asn1_DEF_ConstructedType.elements_count;
+	td->specifics      = asn1_DEF_ConstructedType.specifics;
+}
+
+ber_dec_rval_t
+T_decode_ber(asn1_TYPE_descriptor_t *td,
+		void **structure, void *bufptr, size_t size, int tag_mode) {
+	T_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(td, structure,
+		bufptr, size, tag_mode);
+}
+
+der_enc_rval_t
+T_encode_der(asn1_TYPE_descriptor_t *td,
+		void *structure, int tag_mode, ber_tlv_tag_t tag,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	T_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+int
+T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	T_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+void
+T_free(asn1_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	T_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+
 /*** <<< STAT-DEFS [T] >>> ***/
 
 static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@@ -193,60 +259,7 @@
 		/sizeof(asn1_DEF_T_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	-0,	/* Unknown yet */
+	0, 0,	/* Defined elsewhere */
 	0	/* No specifics */
 };
 
-int
-T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_consume_bytes_f *app_errlog, void *app_key) {
-	
-	/* Make the underlying type checker permanent */
-	td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
-	return td->check_constraints
-		(td, sptr, app_errlog, app_key);
-}
-
-/*
- * This type is implemented using ConstructedType,
- * so adjust the DEF appropriately.
- */
-static void
-inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
-	td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
-	td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
-	td->free_struct = asn1_DEF_ConstructedType.free_struct;
-	td->print_struct = asn1_DEF_ConstructedType.print_struct;
-	td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
-	td->specifics = asn1_DEF_ConstructedType.specifics;
-}
-
-ber_dec_rval_t
-T_decode_ber(asn1_TYPE_descriptor_t *td,
-		void **structure, void *bufptr, size_t size, int tag_mode) {
-	inherit_TYPE_descriptor(td);
-	return td->ber_decoder(td, structure,
-		bufptr, size, tag_mode);
-}
-
-der_enc_rval_t
-T_encode_der(asn1_TYPE_descriptor_t *td,
-		void *structure, int tag_mode, ber_tlv_tag_t tag,
-		asn_app_consume_bytes_f *cb, void *app_key) {
-	inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-int
-T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-void
-T_free(asn1_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index e945ccf..9991cf5 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -35,12 +35,13 @@
 
 /*** <<< STAT-DEFS [T1] >>> ***/
 
-static asn1_SET_element_t asn1_DEF_T1_elements[] = {
-	{ offsetof(struct T1, i), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		(void *)&asn1_DEF_INTEGER,
-		"i"
+static asn1_TYPE_member_t asn1_MBR_T1[] = {
+	{ 0, offsetof(struct T1, i),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_T1_tags[] = {
@@ -56,8 +57,6 @@
 	sizeof(struct T1),
 	offsetof(struct T1, _ber_dec_ctx),
 	offsetof(struct T1, _presence_map),
-	asn1_DEF_T1_elements,
-	1,	/* Elements count */
 	asn1_DEF_T1_tag2el,
 	1,	/* Count of tags in the map */
 	1,	/* Whether extensible */
@@ -76,6 +75,8 @@
 		/sizeof(asn1_DEF_T1_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T1,
+	1,	/* Elements count */
 	&asn1_DEF_T1_specs	/* Additional specs */
 };
 
@@ -116,12 +117,13 @@
 
 /*** <<< STAT-DEFS [T2] >>> ***/
 
-static asn1_SET_element_t asn1_DEF_T2_elements[] = {
-	{ offsetof(struct T2, i), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		(void *)&asn1_DEF_INTEGER,
-		"i"
+static asn1_TYPE_member_t asn1_MBR_T2[] = {
+	{ 0, offsetof(struct T2, i),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
 		},
 };
 static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@@ -137,8 +139,6 @@
 	sizeof(struct T2),
 	offsetof(struct T2, _ber_dec_ctx),
 	offsetof(struct T2, _presence_map),
-	asn1_DEF_T2_elements,
-	1,	/* Elements count */
 	asn1_DEF_T2_tag2el,
 	1,	/* Count of tags in the map */
 	1,	/* Whether extensible */
@@ -157,6 +157,8 @@
 		/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
 	1,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T2,
+	1,	/* Elements count */
 	&asn1_DEF_T2_specs	/* Additional specs */
 };
 
@@ -194,12 +196,13 @@
 
 /*** <<< STAT-DEFS [T3] >>> ***/
 
-static asn1_CHOICE_element_t asn1_DEF_T3_elements[] = {
-	{ offsetof(struct T3, choice.i), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		(void *)&asn1_DEF_INTEGER,
-		"i"
+static asn1_TYPE_member_t asn1_MBR_T3[] = {
+	{ 0, offsetof(struct T3, choice.i),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
 		},
 };
 static asn1_TYPE_tag2member_t asn1_DEF_T3_tag2el[] = {
@@ -210,8 +213,6 @@
 	offsetof(struct T3, _ber_dec_ctx),
 	offsetof(struct T3, present),
 	sizeof(((struct T3 *)0)->present),
-	asn1_DEF_T3_elements,
-	1,	/* Elements count */
 	asn1_DEF_T3_tag2el,
 	1,	/* Count of tags in the map */
 	1	/* Whether extensible */
@@ -228,6 +229,8 @@
 	0,	/* No explicit tags (count) */
 	0,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T3,
+	1,	/* Elements count */
 	&asn1_DEF_T3_specs	/* Additional specs */
 };
 
@@ -265,12 +268,13 @@
 
 /*** <<< STAT-DEFS [T4] >>> ***/
 
-static asn1_CHOICE_element_t asn1_DEF_T4_elements[] = {
-	{ offsetof(struct T4, choice.i), 0,
-		(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
-		0,
-		(void *)&asn1_DEF_INTEGER,
-		"i"
+static asn1_TYPE_member_t asn1_MBR_T4[] = {
+	{ 0, offsetof(struct T4, choice.i),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
 		},
 };
 static asn1_TYPE_tag2member_t asn1_DEF_T4_tag2el[] = {
@@ -281,8 +285,6 @@
 	offsetof(struct T4, _ber_dec_ctx),
 	offsetof(struct T4, present),
 	sizeof(((struct T4 *)0)->present),
-	asn1_DEF_T4_elements,
-	1,	/* Elements count */
 	asn1_DEF_T4_tag2el,
 	1,	/* Count of tags in the map */
 	1	/* Whether extensible */
@@ -299,6 +301,8 @@
 	0,	/* No explicit tags (count) */
 	0,	/* Tags to skip */
 	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T4,
+	1,	/* Elements count */
 	&asn1_DEF_T4_specs	/* Additional specs */
 };
 
diff --git a/tests/50-constraint-OK.asn1 b/tests/50-constraint-OK.asn1
index 27af95d..0ae7689 100644
--- a/tests/50-constraint-OK.asn1
+++ b/tests/50-constraint-OK.asn1
@@ -39,4 +39,8 @@
 	SIZE-and-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD"))
 	Neither-SIZE-nor-FROM ::= PER-Visible (SIZE(1..4) | FROM("ABCD",...))
 
+	Utf8-3 ::= Utf8-2 (FROM("A".."Z"|"a".."z"))
+	Utf8-2 ::= Utf8-1 (SIZE(1..2))
+	Utf8-1 ::= UTF8String
+
 END
diff --git a/tests/50-constraint-OK.asn1.-EFprint-constraints b/tests/50-constraint-OK.asn1.-EFprint-constraints
index 694f776..11e8d3d 100644
--- a/tests/50-constraint-OK.asn1.-EFprint-constraints
+++ b/tests/50-constraint-OK.asn1.-EFprint-constraints
Binary files differ
