diff --git a/tests/97-type-identifier-SW.asn1 b/tests/97-type-identifier-SW.asn1
new file mode 100644
index 0000000..eaa2e29
--- /dev/null
+++ b/tests/97-type-identifier-SW.asn1
@@ -0,0 +1,43 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .97
+
+ModuleTypeIdentifier1
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 97 1 }
+	DEFINITIONS ::=
+BEGIN
+
+	/*
+	 * TYPE-IDENTIFIER is resolved to a clause below.
+	 */
+	T1 ::= SEQUENCE {
+		id	TYPE-IDENTIFIER.&id2,
+		type	TYPE-IDENTIFIER.&Type
+	}
+
+	TYPE-IDENTIFIER ::= CLASS {
+		&id2	OBJECT IDENTIFIER UNIQUE,
+		&Type
+	}
+
+END
+
+ModuleTypeIdentifier2
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 97 2 }
+	DEFINITIONS ::=
+BEGIN
+
+	/*
+	 * TYPE-IDENTIFIER is resolved to a default TYPE-IDENTIFIER class.
+	 */
+	T2 ::= SEQUENCE {
+		id	TYPE-IDENTIFIER.&id,
+		type	TYPE-IDENTIFIER.&Type
+	}
+
+END
diff --git a/tests/98-attribute-class-OK.asn1 b/tests/98-attribute-class-OK.asn1
new file mode 100644
index 0000000..0884427
--- /dev/null
+++ b/tests/98-attribute-class-OK.asn1
@@ -0,0 +1,33 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .98
+
+ModuleAttributeClass
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 98 }
+	DEFINITIONS ::=
+BEGIN
+
+	ATTRIBUTE ::= CLASS { 
+		&id RELATIVE-OID UNIQUE
+	} WITH SYNTAX { ID &id }
+
+	Attribute ::= SEQUENCE {
+		identifier ATTRIBUTE.&id ({Attributes}),
+		siAttributeValue IA5String
+	}
+
+	Attributes ATTRIBUTE ::= { Names }
+
+	Names ATTRIBUTE ::= { rafService | rcfService }
+
+	rafService ATTRIBUTE ::= { ID raf }
+	rcfService ATTRIBUTE ::= { ID rcf }
+
+	raf RELATIVE-OID ::= {3 2 1}
+	rcf RELATIVE-OID ::= {3 2 2}
+
+END
diff --git a/tests/98-attribute-class-OK.asn1.-P b/tests/98-attribute-class-OK.asn1.-P
new file mode 100644
index 0000000..c018f87
--- /dev/null
+++ b/tests/98-attribute-class-OK.asn1.-P
@@ -0,0 +1,105 @@
+
+/*** <<< INCLUDES [Attribute] >>> ***/
+
+#include <RELATIVE-OID.h>
+#include <IA5String.h>
+#include <constr_SEQUENCE.h>
+
+/*** <<< TYPE-DECLS [Attribute] >>> ***/
+
+typedef struct Attribute {
+	RELATIVE_OID_t	 identifier;
+	IA5String_t	 siAttributeValue;
+	
+	/* Context for parsing across buffer boundaries */
+	asn_struct_ctx_t _asn_ctx;
+} Attribute_t;
+
+/*** <<< FUNC-DECLS [Attribute] >>> ***/
+
+extern asn_TYPE_descriptor_t asn_DEF_Attribute;
+
+/*** <<< CODE [Attribute] >>> ***/
+
+static int
+memb_identifier_constraint_1(asn_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 (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		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 [Attribute] >>> ***/
+
+static asn_TYPE_member_t asn_MBR_Attribute_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct Attribute, identifier),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)),
+		.tag_mode = 0,
+		.type = &asn_DEF_RELATIVE_OID,
+		.memb_constraints = memb_identifier_constraint_1,
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = 0,
+		.name = "identifier"
+		},
+	{ ATF_NOFLAGS, 0, offsetof(struct Attribute, siAttributeValue),
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
+		.tag_mode = 0,
+		.type = &asn_DEF_IA5String,
+		.memb_constraints = 0,	/* Defer constraints checking to the member type */
+		.per_constraints = 0,	/* PER is not compiled, use -gen-PER */
+		.default_value = 0,
+		.name = "siAttributeValue"
+		},
+};
+static ber_tlv_tag_t asn_DEF_Attribute_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_TYPE_tag2member_t asn_MAP_Attribute_tag2el_1[] = {
+    { (ASN_TAG_CLASS_UNIVERSAL | (13 << 2)), 0, 0, 0 }, /* identifier at 19 */
+    { (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)), 1, 0, 0 } /* siAttributeValue at 20 */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_Attribute_specs_1 = {
+	sizeof(struct Attribute),
+	offsetof(struct Attribute, _asn_ctx),
+	asn_MAP_Attribute_tag2el_1,
+	2,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	-1,	/* Start extensions */
+	-1	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_Attribute = {
+	"Attribute",
+	"Attribute",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	0,	/* No PER decoder, -gen-PER to enable */
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_Attribute_tags_1,
+	sizeof(asn_DEF_Attribute_tags_1)
+		/sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */
+	asn_DEF_Attribute_tags_1,	/* Same as above */
+	sizeof(asn_DEF_Attribute_tags_1)
+		/sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_Attribute_1,
+	2,	/* Elements count */
+	&asn_SPC_Attribute_specs_1	/* Additional specs */
+};
+
