diff --git a/tests/31-set-of-OK.asn1 b/tests/31-set-of-OK.asn1
index cd108ba..6f36c01 100644
--- a/tests/31-set-of-OK.asn1
+++ b/tests/31-set-of-OK.asn1
@@ -18,4 +18,17 @@
 		width	INTEGER
 	}
 
+	-- The following clause tests OPTIONAL.
+	Stuff ::= SET {
+			trees    [0] SET OF Forest OPTIONAL,
+			anything [1] SET OF
+				SEQUENCE {
+					cup-of-coffee	BIT STRING,
+					...
+				} OPTIONAL
+			-- The above OPTIONAL applies to the "anything"
+			-- member of the outer CHOICE,
+			-- not to the SET OF's embedded SEQUENCE!
+		}
+
 END
diff --git a/tests/31-set-of-OK.asn1.-EF b/tests/31-set-of-OK.asn1.-EF
new file mode 100644
index 0000000..34d3401
--- /dev/null
+++ b/tests/31-set-of-OK.asn1.-EF
@@ -0,0 +1,23 @@
+
+ModuleTestSetOfSimple {iso(-1) org(3) dod(6) internet(1) private(4)
+	enterprise(1) spelio(9363) software(1) asn1c(5) test(1)
+	31 }
+DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+Forest ::= SET OF Tree
+
+Tree ::= SEQUENCE {
+    height	 INTEGER,
+    width	 INTEGER
+}
+
+Stuff ::= SET {
+    trees	 [0] IMPLICIT SET OF Forest OPTIONAL,
+    anything	 [1] IMPLICIT SET OF SEQUENCE {
+            cup-of-coffee	 BIT STRING,        
+            ...
+        } OPTIONAL
+}
+
+END
diff --git a/tests/31-set-of-OK.asn1.-P b/tests/31-set-of-OK.asn1.-P
new file mode 100644
index 0000000..0178f29
--- /dev/null
+++ b/tests/31-set-of-OK.asn1.-P
@@ -0,0 +1,349 @@
+
+/*** <<< INCLUDES [Forest] >>> ***/
+
+#include <Tree.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< DEPS [Forest] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_Forest;
+
+/*** <<< TYPE-DECLS [Forest] >>> ***/
+
+
+typedef struct Forest {
+	A_SET_OF(struct Tree) list;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} Forest_t;
+
+/*** <<< STAT-DEFS [Forest] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_Forest[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_Tree,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_Forest_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_Forest_specs = {
+	sizeof(struct Forest),
+	offsetof(struct Forest, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_Forest = {
+	"Forest",
+	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_Forest_tags,
+	sizeof(asn1_DEF_Forest_tags)
+		/sizeof(asn1_DEF_Forest_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_Forest,
+	1,	/* Single element */
+	&asn1_DEF_Forest_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Tree] >>> ***/
+
+#include <INTEGER.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [Tree] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_Tree;
+
+/*** <<< TYPE-DECLS [Tree] >>> ***/
+
+
+typedef struct Tree {
+	INTEGER_t	 height;
+	INTEGER_t	 width;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} Tree_t;
+
+/*** <<< STAT-DEFS [Tree] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_Tree[] = {
+	{ 0, offsetof(struct Tree, height),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "height"
+		},
+	{ 0, offsetof(struct Tree, width),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "width"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_Tree_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_Tree_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 1 }, /* height at 17 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 1, -1, 0 }, /* width at 19 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_Tree_specs = {
+	sizeof(struct Tree),
+	offsetof(struct Tree, _ber_dec_ctx),
+	asn1_DEF_Tree_tag2el,
+	2,	/* Count of tags in the map */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_Tree = {
+	"Tree",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_Tree_tags,
+	sizeof(asn1_DEF_Tree_tags)
+		/sizeof(asn1_DEF_Tree_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_Tree,
+	2,	/* Elements count */
+	&asn1_DEF_Tree_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [Stuff] >>> ***/
+
+#include <Forest.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+#include <BIT_STRING.h>
+#include <constr_SEQUENCE.h>
+#include <constr_SET.h>
+
+/*** <<< DEPS [Stuff] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum Stuff_PR {
+	Stuff_PR_trees,	/* Member trees is present */
+	Stuff_PR_anything,	/* Member anything is present */
+} Stuff_PR;
+extern asn1_TYPE_descriptor_t asn1_DEF_Stuff;
+
+/*** <<< TYPE-DECLS [Stuff] >>> ***/
+
+
+typedef struct Stuff {
+	struct trees {
+		A_SET_OF(struct Forest) list;
+		
+		/* Context for parsing across buffer boundaries */
+		ber_dec_ctx_t _ber_dec_ctx;
+	} *trees;
+	struct anything {
+		A_SET_OF(struct anything_member {
+			BIT_STRING_t	 cup_of_coffee;
+			/*
+			 * This type is extensible,
+			 * possible extensions are below.
+			 */
+			
+			/* Context for parsing across buffer boundaries */
+			ber_dec_ctx_t _ber_dec_ctx;
+		} ) list;
+		
+		/* Context for parsing across buffer boundaries */
+		ber_dec_ctx_t _ber_dec_ctx;
+	} *anything;
+	
+	/* Presence bitmask: ASN_SET_ISPRESENT(pStuff, Stuff_PR_x) */
+	unsigned int _presence_map
+		[((2+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} Stuff_t;
+
+/*** <<< STAT-DEFS [Stuff] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_trees[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_Forest,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_trees_tags[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_trees_specs = {
+	sizeof(struct trees),
+	offsetof(struct trees, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_trees = {
+	"trees",
+	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_trees_tags,
+	sizeof(asn1_DEF_trees_tags)
+		/sizeof(asn1_DEF_trees_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_trees,
+	1,	/* Single element */
+	&asn1_DEF_trees_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_anything_member[] = {
+	{ 0, offsetof(struct anything_member, cup_of_coffee),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_BIT_STRING,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "cup-of-coffee"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_anything_member_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_DEF_anything_member_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), 0, 0, 0 }, /* cup-of-coffee at 26 */
+};
+static asn1_SEQUENCE_specifics_t asn1_DEF_anything_member_specs = {
+	sizeof(struct anything_member),
+	offsetof(struct anything_member, _ber_dec_ctx),
+	asn1_DEF_anything_member_tag2el,
+	1,	/* Count of tags in the map */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn1_TYPE_descriptor_t asn1_DEF_anything_member = {
+	"",
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_print,
+	SEQUENCE_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_anything_member_tags,
+	sizeof(asn1_DEF_anything_member_tags)
+		/sizeof(asn1_DEF_anything_member_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_anything_member,
+	1,	/* Elements count */
+	&asn1_DEF_anything_member_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_anything[] = {
+	{ 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_anything_member,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_anything_tags[] = {
+	(ASN_TAG_CLASS_CONTEXT | (1 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_anything_specs = {
+	sizeof(struct anything),
+	offsetof(struct anything, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_anything = {
+	"anything",
+	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_anything_tags,
+	sizeof(asn1_DEF_anything_tags)
+		/sizeof(asn1_DEF_anything_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_anything,
+	1,	/* Single element */
+	&asn1_DEF_anything_specs	/* Additional specs */
+};
+
+static asn1_TYPE_member_t asn1_MBR_Stuff[] = {
+	{ 2, offsetof(struct Stuff, trees),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_trees,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "trees"
+		},
+	{ 1, offsetof(struct Stuff, anything),
+		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
+		.tag_mode = -1,	/* IMPLICIT tag at current level */
+		.type = (void *)&asn1_DEF_anything,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = "anything"
+		},
+};
+static ber_tlv_tag_t asn1_DEF_Stuff_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_TYPE_tag2member_t asn1_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 */
+};
+static uint8_t asn1_DEF_Stuff_mmap[(2 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	(0 << 7) | (0 << 6)
+};
+static asn1_SET_specifics_t asn1_DEF_Stuff_specs = {
+	sizeof(struct Stuff),
+	offsetof(struct Stuff, _ber_dec_ctx),
+	offsetof(struct Stuff, _presence_map),
+	asn1_DEF_Stuff_tag2el,
+	2,	/* Count of tags in the map */
+	0,	/* Whether extensible */
+	(unsigned int *)asn1_DEF_Stuff_mmap	/* Mandatory elements map */
+};
+asn1_TYPE_descriptor_t asn1_DEF_Stuff = {
+	"Stuff",
+	SET_constraint,
+	SET_decode_ber,
+	SET_encode_der,
+	SET_print,
+	SET_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_Stuff_tags,
+	sizeof(asn1_DEF_Stuff_tags)
+		/sizeof(asn1_DEF_Stuff_tags[0]), /* 1 */
+	1,	/* Tags to skip */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_Stuff,
+	2,	/* Elements count */
+	&asn1_DEF_Stuff_specs	/* Additional specs */
+};
+
