diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P
index 5b0a517..f447c67 100644
--- a/tests/39-sequence-of-OK.asn1.-P
+++ b/tests/39-sequence-of-OK.asn1.-P
@@ -15,7 +15,7 @@
 
 
 typedef struct T {
-	INTEGER_t	 int;
+	INTEGER_t	 Int;
 	struct collection {
 		A_SEQUENCE_OF(T2_t) list;
 		
@@ -70,7 +70,7 @@
 };
 
 static asn_TYPE_member_t asn_MBR_T[] = {
-	{ ATF_NOFLAGS, 0, offsetof(struct T, int),
+	{ ATF_NOFLAGS, 0, offsetof(struct T, Int),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
 		.tag_mode = 0,
 		.type = (void *)&asn_DEF_INTEGER,
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index 83be42f..716928f 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -47,7 +47,7 @@
 	
 	{ /* Determine the number of elements */
 		const A_SEQUENCE_OF(void) *list;
-		list = (const A_SEQUENCE_OF(void) *)sptr;
+		(const void *)list = sptr;
 		size = list->count;
 	}
 	
@@ -376,7 +376,7 @@
 	
 	{ /* Determine the number of elements */
 		const A_SET_OF(void) *list;
-		list = (const A_SET_OF(void) *)sptr;
+		(const void *)list = sptr;
 		size = list->count;
 	}
 	
diff --git a/tests/69-reserved-words-OK.asn1 b/tests/69-reserved-words-OK.asn1
new file mode 100644
index 0000000..29014ee
--- /dev/null
+++ b/tests/69-reserved-words-OK.asn1
@@ -0,0 +1,21 @@
+
+-- OK: Everything is Fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .69
+
+ModuleTestReservedWords
+	{ iso org(3) dod(6) internet(1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 69 }
+	DEFINITIONS ::=
+BEGIN
+
+	T ::= SEQUENCE {
+		int	INTEGER,
+		char	OCTET STRING (SIZE(1)),
+		class	SET { ... },
+		double	REAL
+	}
+
+END
diff --git a/tests/69-reserved-words-OK.asn1.-P b/tests/69-reserved-words-OK.asn1.-P
new file mode 100644
index 0000000..f826aff
--- /dev/null
+++ b/tests/69-reserved-words-OK.asn1.-P
@@ -0,0 +1,185 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <INTEGER.h>
+#include <OCTET_STRING.h>
+#include <REAL.h>
+#include <constr_SET.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+
+/*
+ * Method of determining the components presence
+ */
+typedef enum class_PR {
+} class_PR;
+extern asn_TYPE_descriptor_t asn_DEF_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+
+typedef struct T {
+	INTEGER_t	 Int;
+	OCTET_STRING_t	 Char;
+	struct Class {
+		/*
+		 * This type is extensible,
+		 * possible extensions are below.
+		 */
+		
+		/* Presence bitmask: ASN_SET_ISPRESENT(pclass, class_PR_x) */
+		unsigned int _presence_map
+			[((0+(8*sizeof(unsigned int))-1)/(8*sizeof(unsigned int)))];
+		
+		/* Context for parsing across buffer boundaries */
+		asn_struct_ctx_t _asn_ctx;
+	} Class;
+	REAL_t	 Double;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} T_t;
+
+/*** <<< CODE [T] >>> ***/
+
+static int
+memb_char_1_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_consume_bytes_f *app_errlog, void *app_key) {
+	const OCTET_STRING_t *st = sptr;
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	size = st->size;
+	
+	if((size == 1)) {
+		/* Constraint check succeeded */
+		return 0;
+	} else {
+		_ASN_ERRLOG(app_errlog, app_key,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static ber_tlv_tag_t asn_DEF_class_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_class_tag2el[] = {
+};
+static uint8_t asn_DEF_class_mmap[(0 + (8 * sizeof(unsigned int)) - 1) / 8] = {
+	0
+};
+static asn_SET_specifics_t asn_DEF_class_specs = {
+	sizeof(struct Class),
+	offsetof(struct Class, _asn_ctx),
+	offsetof(struct Class, _presence_map),
+	asn_DEF_class_tag2el,
+	0,	/* Count of tags in the map */
+	asn_DEF_class_tag2el,	/* Same as above */
+	0,	/* Count of tags in the CANONICAL-XER map */
+	1,	/* Whether extensible */
+	(unsigned int *)asn_DEF_class_mmap	/* Mandatory elements map */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_class = {
+	"class",
+	"class",
+	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_class_tags,
+	sizeof(asn_DEF_class_tags)
+		/sizeof(asn_DEF_class_tags[0]), /* 1 */
+	asn_DEF_class_tags,	/* Same as above */
+	sizeof(asn_DEF_class_tags)
+		/sizeof(asn_DEF_class_tags[0]), /* 1 */
+	0, 0,	/* No members */
+	&asn_DEF_class_specs	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_T[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct T, Int),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_INTEGER,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.name = "int"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct T, Char),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_OCTET_STRING,
+		.memb_constraints = memb_char_1_constraint,
+		.name = "char"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct T, Class),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_class,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.name = "class"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct T, Double),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn_DEF_REAL,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.name = "double"
+		},
+};
+static ber_tlv_tag_t asn_DEF_T_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_TYPE_tag2member_t asn_DEF_T_tag2el[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* int at 15 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 1, 0, 0 }, /* char at 16 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (9 << 2)), 3, 0, 0 }, /* double at 18 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 2, 0, 0 }, /* class at 17 */
+};
+static asn_SEQUENCE_specifics_t asn_DEF_T_specs = {
+	sizeof(struct T),
+	offsetof(struct T, _asn_ctx),
+	asn_DEF_T_tag2el,
+	4,	/* Count of tags in the map */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_T = {
+	"T",
+	"T",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_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,
+	4,	/* Elements count */
+	&asn_DEF_T_specs	/* Additional specs */
+};
+
