diff --git a/tests/19-param-OK.asn1.-P b/tests/19-param-OK.asn1.-P
index 83be07d..e980f1c 100644
--- a/tests/19-param-OK.asn1.-P
+++ b/tests/19-param-OK.asn1.-P
@@ -200,7 +200,7 @@
 
 
 typedef struct Name {
-	A_SEQUENCE_OF(struct RelativeDistinguishedName) list;
+	A_SEQUENCE_OF(RelativeDistinguishedName_t) list;
 	
 	/* Context for parsing across buffer boundaries */
 	ber_dec_ctx_t _ber_dec_ctx;
diff --git a/tests/31-set-of-OK.asn1.-P b/tests/31-set-of-OK.asn1.-P
index 7728121..d167512 100644
--- a/tests/31-set-of-OK.asn1.-P
+++ b/tests/31-set-of-OK.asn1.-P
@@ -13,7 +13,7 @@
 
 
 typedef struct Forest {
-	A_SET_OF(struct Tree) list;
+	A_SET_OF(Tree_t) list;
 	
 	/* Context for parsing across buffer boundaries */
 	ber_dec_ctx_t _ber_dec_ctx;
@@ -158,7 +158,7 @@
 
 typedef struct Stuff {
 	struct trees {
-		A_SET_OF(struct Forest) list;
+		A_SET_OF(Forest_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		ber_dec_ctx_t _ber_dec_ctx;
diff --git a/tests/39-sequence-of-OK.asn1.-P b/tests/39-sequence-of-OK.asn1.-P
index 81ac16d..04b9948 100644
--- a/tests/39-sequence-of-OK.asn1.-P
+++ b/tests/39-sequence-of-OK.asn1.-P
@@ -17,7 +17,7 @@
 typedef struct T {
 	INTEGER_t	 int;
 	struct collection {
-		A_SEQUENCE_OF(struct T2) list;
+		A_SEQUENCE_OF(T2_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		ber_dec_ctx_t _ber_dec_ctx;
diff --git a/tests/42-real-life-OK.asn1.-PR b/tests/42-real-life-OK.asn1.-PR
index 262bacc..72044d3 100644
--- a/tests/42-real-life-OK.asn1.-PR
+++ b/tests/42-real-life-OK.asn1.-PR
@@ -17,7 +17,7 @@
 typedef struct LogLine {
 	IA5String_t	 line_digest;
 	struct varsets {
-		A_SEQUENCE_OF(struct VariablePartSet) list;
+		A_SEQUENCE_OF(VariablePartSet_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		ber_dec_ctx_t _ber_dec_ctx;
@@ -171,7 +171,7 @@
 
 typedef struct VariablePartSet {
 	struct vparts {
-		A_SEQUENCE_OF(struct VariablePart) list;
+		A_SEQUENCE_OF(VariablePart_t) list;
 		
 		/* Context for parsing across buffer boundaries */
 		ber_dec_ctx_t _ber_dec_ctx;
diff --git a/tests/66-ref-simple-OK.asn1 b/tests/66-ref-simple-OK.asn1
new file mode 100644
index 0000000..7b19c70
--- /dev/null
+++ b/tests/66-ref-simple-OK.asn1
@@ -0,0 +1,18 @@
+
+-- OK: Everything is fine
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .66
+
+ModuleTestReferenceToSimpleType
+	{ iso org(3) dod(6) internet(1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 66 }
+	DEFINITIONS IMPLICIT TAGS ::=
+BEGIN
+
+   T ::= SET OF SimpleType
+
+   SimpleType ::= ENUMERATED { one, two, three }
+
+END
diff --git a/tests/66-ref-simple-OK.asn1.-P b/tests/66-ref-simple-OK.asn1.-P
new file mode 100644
index 0000000..8a3466d
--- /dev/null
+++ b/tests/66-ref-simple-OK.asn1.-P
@@ -0,0 +1,168 @@
+
+/*** <<< INCLUDES [T] >>> ***/
+
+#include <SimpleType.h>
+#include <asn_SET_OF.h>
+#include <constr_SET_OF.h>
+
+/*** <<< DEPS [T] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_T;
+
+/*** <<< TYPE-DECLS [T] >>> ***/
+
+
+typedef struct T {
+	A_SET_OF(SimpleType_t) list;
+	
+	/* Context for parsing across buffer boundaries */
+	ber_dec_ctx_t _ber_dec_ctx;
+} T_t;
+
+/*** <<< STAT-DEFS [T] >>> ***/
+
+static asn1_TYPE_member_t asn1_MBR_T[] = {
+	{ ATF_NOFLAGS, 0, 0,
+		.tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
+		.tag_mode = 0,
+		.type = (void *)&asn1_DEF_SimpleType,
+		.memb_constraints = 0,	/* Defer to actual type */
+		.name = ""
+		},
+};
+static ber_tlv_tag_t asn1_DEF_T_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
+};
+static asn1_SET_OF_specifics_t asn1_DEF_T_specs = {
+	sizeof(struct T),
+	offsetof(struct T, _ber_dec_ctx),
+};
+asn1_TYPE_descriptor_t asn1_DEF_T = {
+	"T",
+	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_T_tags,
+	sizeof(asn1_DEF_T_tags)
+		/sizeof(asn1_DEF_T_tags[0]), /* 1 */
+	asn1_DEF_T_tags,	/* Same as above */
+	sizeof(asn1_DEF_T_tags)
+		/sizeof(asn1_DEF_T_tags[0]), /* 1 */
+	1,	/* Whether CONSTRUCTED */
+	asn1_MBR_T,
+	1,	/* Single element */
+	&asn1_DEF_T_specs	/* Additional specs */
+};
+
+
+/*** <<< INCLUDES [SimpleType] >>> ***/
+
+#include <ENUMERATED.h>
+
+/*** <<< DEPS [SimpleType] >>> ***/
+
+typedef enum SimpleType {
+	SimpleType_one	= 0,
+	SimpleType_two	= 1,
+	SimpleType_three	= 2,
+} SimpleType_e;
+
+/*** <<< TYPE-DECLS [SimpleType] >>> ***/
+
+
+typedef ENUMERATED_t	 SimpleType_t;
+
+/*** <<< FUNC-DECLS [SimpleType] >>> ***/
+
+extern asn1_TYPE_descriptor_t asn1_DEF_SimpleType;
+asn_constr_check_f SimpleType_constraint;
+ber_type_decoder_f SimpleType_decode_ber;
+der_type_encoder_f SimpleType_encode_der;
+asn_struct_print_f SimpleType_print;
+asn_struct_free_f SimpleType_free;
+
+/*** <<< CODE [SimpleType] >>> ***/
+
+int
+SimpleType_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_ENUMERATED.check_constraints;
+	return td->check_constraints
+		(td, sptr, app_errlog, app_key);
+}
+
+/*
+ * This type is implemented using ENUMERATED,
+ * so adjust the DEF appropriately.
+ */
+static void
+SimpleType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
+	td->ber_decoder    = asn1_DEF_ENUMERATED.ber_decoder;
+	td->der_encoder    = asn1_DEF_ENUMERATED.der_encoder;
+	td->free_struct    = asn1_DEF_ENUMERATED.free_struct;
+	td->print_struct   = asn1_DEF_ENUMERATED.print_struct;
+	td->last_tag_form  = asn1_DEF_ENUMERATED.last_tag_form;
+	td->elements       = asn1_DEF_ENUMERATED.elements;
+	td->elements_count = asn1_DEF_ENUMERATED.elements_count;
+	td->specifics      = asn1_DEF_ENUMERATED.specifics;
+}
+
+ber_dec_rval_t
+SimpleType_decode_ber(asn1_TYPE_descriptor_t *td,
+		void **structure, void *bufptr, size_t size, int tag_mode) {
+	SimpleType_inherit_TYPE_descriptor(td);
+	return td->ber_decoder(td, structure, bufptr, size, tag_mode);
+}
+
+der_enc_rval_t
+SimpleType_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) {
+	SimpleType_inherit_TYPE_descriptor(td);
+	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
+}
+
+int
+SimpleType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
+	SimpleType_inherit_TYPE_descriptor(td);
+	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
+}
+
+void
+SimpleType_free(asn1_TYPE_descriptor_t *td,
+		void *struct_ptr, int contents_only) {
+	SimpleType_inherit_TYPE_descriptor(td);
+	td->free_struct(td, struct_ptr, contents_only);
+}
+
+
+/*** <<< STAT-DEFS [SimpleType] >>> ***/
+
+static ber_tlv_tag_t asn1_DEF_SimpleType_tags[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (10 << 2))
+};
+asn1_TYPE_descriptor_t asn1_DEF_SimpleType = {
+	"SimpleType",
+	SimpleType_constraint,
+	SimpleType_decode_ber,
+	SimpleType_encode_der,
+	SimpleType_print,
+	SimpleType_free,
+	0,	/* Use generic outmost tag fetcher */
+	asn1_DEF_SimpleType_tags,
+	sizeof(asn1_DEF_SimpleType_tags)
+		/sizeof(asn1_DEF_SimpleType_tags[0]), /* 1 */
+	asn1_DEF_SimpleType_tags,	/* Same as above */
+	sizeof(asn1_DEF_SimpleType_tags)
+		/sizeof(asn1_DEF_SimpleType_tags[0]), /* 1 */
+	-0,	/* Unknown yet */
+	0, 0,	/* No members */
+	0	/* No specifics */
+};
+
