diff --git a/tests/30-set-OK.asn1 b/tests/30-set-OK.asn1
index 2cd6a5a..41ad52d 100644
--- a/tests/30-set-OK.asn1
+++ b/tests/30-set-OK.asn1
@@ -12,10 +12,10 @@
 BEGIN
 
 	T ::= SET {
-		a [APPLICATION 3] INTEGER,
-		b IA5String,
+		i [APPLICATION 3] INTEGER,
+		s IA5String,
 		...,
-		c [2] BOOLEAN
+		b [2] BOOLEAN
 	}
 
 END
diff --git a/tests/30-set-OK.asn1.-P b/tests/30-set-OK.asn1.-P
new file mode 100644
index 0000000..1ffd9b4
--- /dev/null
+++ b/tests/30-set-OK.asn1.-P
@@ -0,0 +1,109 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <IA5String.h>
+#include <BOOLEAN.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum T_PR {
+	T_PR_i,	/* Member i is present */
+	T_PR_s,	/* Member s is present */
+	T_PR_b,	/* Member b is present */
+} T_PR;
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+
+typedef struct T {
+	INTEGER_t	 i;
+	IA5String_t	 s;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	BOOLEAN_t	*b;
+	
+	/* Presence bitmask: ASN_SET_ISPRESENT(pT, T_PR_x) */
+	unsigned int _presence_map
+		[((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_T[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct T, i),
+		.tag = (ASN_TAG_CLASS_APPLICATION | (3 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "i"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct T, s),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_IA5String,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "s"
+		},
+	{ ATF_POINTER, 0, offsetof(struct T, b),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn_DEF_BOOLEAN,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "b"
+		},
+};
+static ber_tlv_tag_t asn_DEF_T_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_T_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 }, /* s at 16 */
+    { (ASN_TAG_CLASS_APPLICATION | (3 << 2)), 0, 0, 0 }, /* i at 15 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* b at 18 */
+};
+static uint8_t asn_DEF_T_mmap[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	(1 << 7) | (1 << 6) | (0 << 5)
+};
+static asn_SET_specifics_t asn_DEF_T_specs = {
+	sizeof(struct T),
+	offsetof(struct T, _asn_ctx),
+	offsetof(struct T, _presence_map),
+	asn_DEF_T_tag2el,
+	3,	/* Count of tags in the map */
+	asn_DEF_T_tag2el,	/* Same as above */
+	3,	/* Count of tags in the CANONICAL-XER map */
+	1,	/* Whether extensible */
+	(unsigned int *)asn_DEF_T_mmap	/* Mandatory elements map */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+	"T",
+	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_T_tags,
+	sizeof(asn_DEF_T_tags)
+		/sizeof(asn_DEF_T_tags[0]), /* 1 */
+	asn_DEF_T_tags,	/* Same as above */
+	sizeof(asn_DEF_T_tags)
+		/sizeof(asn_DEF_T_tags[0]), /* 1 */
+	asn_MBR_T,
+	3,	/* Elements count */
+	&asn_DEF_T_specs	/* Additional specs */
+};
+
diff --git a/tests/31-set-of-OK.asn1 b/tests/31-set-of-OK.asn1
index 6f36c01..c8fa51e 100644
--- a/tests/31-set-of-OK.asn1
+++ b/tests/31-set-of-OK.asn1
@@ -20,8 +20,14 @@
 
 	-- The following clause tests OPTIONAL.
 	Stuff ::= SET {
-			trees    [0] SET OF Forest OPTIONAL,
-			anything [1] SET OF
+			trees    [1] SET OF Forest OPTIONAL,
+			...,
+			other    CHOICE {
+				a [0] INTEGER,
+				b [3] INTEGER
+			},
+			...,
+			anything [2] SET OF
 				SEQUENCE {
 					cup-of-coffee	BIT STRING,
 					...
diff --git a/tests/31-set-of-OK.asn1.-EF b/tests/31-set-of-OK.asn1.-EF
index 692450b..2efaccc 100644
--- a/tests/31-set-of-OK.asn1.-EF
+++ b/tests/31-set-of-OK.asn1.-EF
@@ -12,11 +12,16 @@
 }
 
 Stuff ::= SET {
-    trees	 [0] IMPLICIT SET OF Forest OPTIONAL,
-    anything	 [1] IMPLICIT SET OF SEQUENCE {
+    trees	 [1] IMPLICIT SET OF Forest OPTIONAL,
+    anything	 [2] IMPLICIT SET OF SEQUENCE {
             cup-of-coffee	 BIT STRING,        
             ...
-        } OPTIONAL
+        } OPTIONAL,
+    ...,
+    other	 CHOICE {
+        a	 [0] IMPLICIT INTEGER,    
+        b	 [3] IMPLICIT INTEGER
+    }
 }
 
 END
diff --git a/tests/31-set-of-OK.asn1.-P b/tests/31-set-of-OK.asn1.-P
index 37533f0..143ab8c 100644
--- a/tests/31-set-of-OK.asn1.-P
+++ b/tests/31-set-of-OK.asn1.-P
@@ -142,6 +142,8 @@
 #include <constr_SET_OF.h>
 #include <BIT_STRING.h>
 #include <constr_SEQUENCE.h>
+#include <INTEGER.h>
+#include <constr_CHOICE.h>
 #include <constr_SET.h>
 
 /*** <<< DEPS [Stuff] >>> ***/
@@ -153,7 +155,13 @@
 typedef enum Stuff_PR {
 	Stuff_PR_trees,	/* Member trees is present */
 	Stuff_PR_anything,	/* Member anything is present */
+	Stuff_PR_other,	/* Member other is present */
 } Stuff_PR;
+typedef enum other_PR {
+	other_PR_NOTHING,	/* No components present */
+	other_PR_a,
+	other_PR_b,
+} other_PR;
 extern asn_TYPE_descriptor_t asn_DEF_Stuff;
 
 /*** <<< TYPE-DECLS [Stuff] >>> ***/
@@ -181,10 +189,24 @@
 		/* Context for parsing across buffer boundaries */
 		asn_struct_ctx_t _asn_ctx;
 	} *anything;
+	/*
+	 * This type is extensible,
+	 * possible extensions are below.
+	 */
+	struct other {
+		other_PR present;
+		union {
+			INTEGER_t	 a;
+			INTEGER_t	 b;
+		} choice;
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} *other;
 	
 	/* Presence bitmask: ASN_SET_ISPRESENT(pStuff, Stuff_PR_x) */
 	unsigned int _presence_map
-		[((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+		[((3+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
 	
 	/* Context for parsing across buffer boundaries */
 	asn_struct_ctx_t _asn_ctx;
@@ -202,7 +224,7 @@
 		},
 };
 static ber_tlv_tag_t asn_DEF_trees_tags[] = {
-	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
 static asn_SET_OF_specifics_t asn_DEF_trees_specs = {
@@ -245,7 +267,7 @@
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
 static asn_TYPE_tag2member_t asn_DEF_anything_member_tag2el[] = {
-    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 }, /* cup-of-coffee at 26 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 }, /* cup-of-coffee at 32 */
 };
 static asn_SEQUENCE_specifics_t asn_DEF_anything_member_specs = {
 	sizeof(struct anything_member),
@@ -287,7 +309,7 @@
 		},
 };
 static ber_tlv_tag_t asn_DEF_anything_tags[] = {
-	(ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	(ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
 static asn_SET_OF_specifics_t asn_DEF_anything_specs = {
@@ -317,39 +339,104 @@
 	&asn_DEF_anything_specs	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_Stuff[] = {
-	{ ATF_POINTER, 2, offsetof(struct Stuff, trees),
+static asn_TYPE_member_t asn_MBR_other[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct other, choice.a),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
 		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "a"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct other, choice.b),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "b"
+		},
+};
+static asn_TYPE_tag2member_t asn_DEF_other_tag2el[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a at 26 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 1, 0, 0 }, /* b at 28 */
+};
+static asn_CHOICE_specifics_t asn_DEF_other_specs = {
+	sizeof(struct other),
+	offsetof(struct other, _asn_ctx),
+	offsetof(struct other, present),
+	sizeof(((struct other *)0)->present),
+	asn_DEF_other_tag2el,
+	2,	/* Count of tags in the map */
+	0	/* Whether extensible */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_other = {
+	"other",
+	CHOICE_free,
+	CHOICE_print,
+	CHOICE_constraint,
+	CHOICE_decode_ber,
+	CHOICE_encode_der,
+	0,				/* Not implemented yet */
+	CHOICE_encode_xer,
+	CHOICE_outmost_tag,
+	0,	/* No effective tags (pointer) */
+	0,	/* No effective tags (count) */
+	0,	/* No tags (pointer) */
+	0,	/* No tags (count) */
+	asn_MBR_other,
+	2,	/* Elements count */
+	&asn_DEF_other_specs	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_Stuff[] = {
+	{ ATF_POINTER, 3, offsetof(struct Stuff, trees),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
 		.type = (void *)&asn_DEF_trees,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "trees"
 		},
-	{ ATF_POINTER, 1, offsetof(struct Stuff, anything),
-		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+	{ ATF_POINTER, 2, offsetof(struct Stuff, anything),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)),
 		.tag_mode = -1,	/* IMPLICIT tag at current level */
 		.type = (void *)&asn_DEF_anything,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "anything"
 		},
+	{ ATF_POINTER, 0, offsetof(struct Stuff, other),
+		.tag = -1 /* Ambiguous tag (CHOICE?) */,
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_other,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "other"
+		},
 };
 static ber_tlv_tag_t asn_DEF_Stuff_tags[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
 static asn_TYPE_tag2member_t asn_DEF_Stuff_tag2el[] = {
-    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* trees at 23 */
-    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* anything at 28 */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a at 26 */
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees at 23 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything at 34 */
+    { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* b at 28 */
 };
-static uint8_t asn_DEF_Stuff_mmap[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
-	(0 << 7) | (0 << 6)
+static asn_TYPE_tag2member_t asn_DEF_Stuff_tag2el_cxer[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* trees at 23 */
+    { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* anything at 34 */
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 2, 0, 0 }, /* a at 26 */
+};
+static uint8_t asn_DEF_Stuff_mmap[(3 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	(0 << 7) | (0 << 6) | (0 << 5)
 };
 static asn_SET_specifics_t asn_DEF_Stuff_specs = {
 	sizeof(struct Stuff),
 	offsetof(struct Stuff, _asn_ctx),
 	offsetof(struct Stuff, _presence_map),
 	asn_DEF_Stuff_tag2el,
-	2,	/* Count of tags in the map */
-	0,	/* Whether extensible */
+	4,	/* Count of tags in the map */
+	asn_DEF_Stuff_tag2el_cxer,
+	3,	/* Count of tags in the CANONICAL-XER map */
+	1,	/* Whether extensible */
 	(unsigned int *)asn_DEF_Stuff_mmap	/* Mandatory elements map */
 };
 asn_TYPE_descriptor_t asn_DEF_Stuff = {
@@ -369,7 +456,7 @@
 	sizeof(asn_DEF_Stuff_tags)
 		/sizeof(asn_DEF_Stuff_tags[0]), /* 1 */
 	asn_MBR_Stuff,
-	2,	/* Elements count */
+	3,	/* Elements count */
 	&asn_DEF_Stuff_specs	/* Additional specs */
 };
 
diff --git a/tests/43-recursion-OK.asn1.-P b/tests/43-recursion-OK.asn1.-P
index 885e635..7f03aad 100644
--- a/tests/43-recursion-OK.asn1.-P
+++ b/tests/43-recursion-OK.asn1.-P
@@ -396,6 +396,8 @@
 	offsetof(struct Test_structure_2, _presence_map),
 	asn_DEF_Test_structure_2_tag2el,
 	1,	/* Count of tags in the map */
+	asn_DEF_Test_structure_2_tag2el,	/* Same as above */
+	1,	/* Count of tags in the CANONICAL-XER map */
 	0,	/* Whether extensible */
 	(unsigned int *)asn_DEF_Test_structure_2_mmap	/* Mandatory elements map */
 };
@@ -479,6 +481,8 @@
 	offsetof(struct Test_structure_3, _presence_map),
 	asn_DEF_Test_structure_3_tag2el,
 	1,	/* Count of tags in the map */
+	asn_DEF_Test_structure_3_tag2el,	/* Same as above */
+	1,	/* Count of tags in the CANONICAL-XER map */
 	0,	/* Whether extensible */
 	(unsigned int *)asn_DEF_Test_structure_3_mmap	/* Mandatory elements map */
 };
diff --git a/tests/47-set-ext-OK.asn1.-P b/tests/47-set-ext-OK.asn1.-P
index 568caad..5aa2ce2 100644
--- a/tests/47-set-ext-OK.asn1.-P
+++ b/tests/47-set-ext-OK.asn1.-P
@@ -59,6 +59,8 @@
 	offsetof(struct T1, _presence_map),
 	asn_DEF_T1_tag2el,
 	1,	/* Count of tags in the map */
+	asn_DEF_T1_tag2el,	/* Same as above */
+	1,	/* Count of tags in the CANONICAL-XER map */
 	1,	/* Whether extensible */
 	(unsigned int *)asn_DEF_T1_mmap	/* Mandatory elements map */
 };
@@ -144,6 +146,8 @@
 	offsetof(struct T2, _presence_map),
 	asn_DEF_T2_tag2el,
 	1,	/* Count of tags in the map */
+	asn_DEF_T2_tag2el,	/* Same as above */
+	1,	/* Count of tags in the CANONICAL-XER map */
 	1,	/* Whether extensible */
 	(unsigned int *)asn_DEF_T2_mmap	/* Mandatory elements map */
 };
