diff --git a/tests/19-param-OK.asn1.-Pfwide-types b/tests/19-param-OK.asn1.-Pfwide-types
index 6fbda3d..1268ffc 100644
--- a/tests/19-param-OK.asn1.-Pfwide-types
+++ b/tests/19-param-OK.asn1.-Pfwide-types
@@ -28,6 +28,8 @@
 /*** <<< FUNC-DECLS [SIGNED] >>> ***/
 
 extern asn_TYPE_descriptor_t asn_DEF_SIGNED_15P0;
+extern asn_SEQUENCE_specifics_t asn_SPC_SIGNED_15P0_specs_1;
+extern asn_TYPE_member_t asn_MBR_SIGNED_15P0_1[3];
 
 /*** <<< CODE [SIGNED] >>> ***/
 
@@ -141,7 +143,7 @@
 	&asn_SPC_toBeSigned_specs_2	/* Additional specs */
 };
 
-static asn_TYPE_member_t asn_MBR_SIGNED_15P0_1[] = {
+asn_TYPE_member_t asn_MBR_SIGNED_15P0_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct SIGNED_15P0, toBeSigned),
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
 		.tag_mode = 0,
@@ -181,7 +183,7 @@
     { (ASN_TAG_CLASS_UNIVERSAL | (6 << 2)), 1, 0, 0 }, /* algorithm */
     { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 0, 0, 0 } /* toBeSigned */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_SIGNED_15P0_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_SIGNED_15P0_specs_1 = {
 	sizeof(struct SIGNED_15P0),
 	offsetof(struct SIGNED_15P0, _asn_ctx),
 	asn_MAP_SIGNED_15P0_tag2el_1,
@@ -238,84 +240,10 @@
 
 /*** <<< CODE [Certificate] >>> ***/
 
-int
-Certificate_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
-			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_SIGNED_15P0.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using SIGNED_15P0,
  * so here we adjust the DEF accordingly.
  */
-static void
-Certificate_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_SIGNED_15P0.free_struct;
-	td->print_struct   = asn_DEF_SIGNED_15P0.print_struct;
-	td->check_constraints = asn_DEF_SIGNED_15P0.check_constraints;
-	td->ber_decoder    = asn_DEF_SIGNED_15P0.ber_decoder;
-	td->der_encoder    = asn_DEF_SIGNED_15P0.der_encoder;
-	td->xer_decoder    = asn_DEF_SIGNED_15P0.xer_decoder;
-	td->xer_encoder    = asn_DEF_SIGNED_15P0.xer_encoder;
-	td->uper_decoder   = asn_DEF_SIGNED_15P0.uper_decoder;
-	td->uper_encoder   = asn_DEF_SIGNED_15P0.uper_encoder;
-	td->oer_decoder    = asn_DEF_SIGNED_15P0.oer_decoder;
-	td->oer_encoder    = asn_DEF_SIGNED_15P0.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_SIGNED_15P0.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_SIGNED_15P0.per_constraints;
-	td->elements       = asn_DEF_SIGNED_15P0.elements;
-	td->elements_count = asn_DEF_SIGNED_15P0.elements_count;
-	td->specifics      = asn_DEF_SIGNED_15P0.specifics;
-}
-
-void
-Certificate_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-Certificate_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-Certificate_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-		void **structure, const void *bufptr, size_t size, int tag_mode) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-Certificate_encode_der(asn_TYPE_descriptor_t *td,
-		void *structure, int tag_mode, ber_tlv_tag_t tag,
-		asn_app_consume_bytes_f *cb, void *app_key) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-Certificate_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-		void **structure, const char *opt_mname, const void *bufptr, size_t size) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-Certificate_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
-		int ilevel, enum xer_encoder_flags_e flags,
-		asn_app_consume_bytes_f *cb, void *app_key) {
-	Certificate_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [Certificate] >>> ***/
 
@@ -325,13 +253,13 @@
 asn_TYPE_descriptor_t asn_DEF_Certificate = {
 	"Certificate",
 	"Certificate",
-	Certificate_free,
-	Certificate_print,
-	Certificate_constraint,
-	Certificate_decode_ber,
-	Certificate_encode_der,
-	Certificate_decode_xer,
-	Certificate_encode_xer,
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
 	0, 0,	/* No OER support, use "-gen-OER" to enable */
 	0, 0,	/* No PER support, use "-gen-PER" to enable */
 	0,	/* Use generic outmost tag fetcher */
@@ -343,8 +271,9 @@
 		/sizeof(asn_DEF_Certificate_tags_1[0]), /* 1 */
 	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
-	0, 0,	/* Defined elsewhere */
-	0	/* No specifics */
+	asn_MBR_SIGNED_15P0_1,
+	3,	/* Elements count */
+	&asn_SPC_SIGNED_15P0_specs_1	/* Additional specs */
 };
 
 
@@ -369,6 +298,8 @@
 /*** <<< FUNC-DECLS [Name] >>> ***/
 
 extern asn_TYPE_descriptor_t asn_DEF_Name;
+extern asn_SET_OF_specifics_t asn_SPC_Name_specs_1;
+extern asn_TYPE_member_t asn_MBR_Name_1[1];
 
 /*** <<< POST-INCLUDE [Name] >>> ***/
 
@@ -376,7 +307,7 @@
 
 /*** <<< STAT-DEFS [Name] >>> ***/
 
-static asn_TYPE_member_t asn_MBR_Name_1[] = {
+asn_TYPE_member_t asn_MBR_Name_1[] = {
 	{ ATF_POINTER, 0, 0,
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
 		.tag_mode = 0,
@@ -391,7 +322,7 @@
 static const ber_tlv_tag_t asn_DEF_Name_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_Name_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_Name_specs_1 = {
 	sizeof(struct Name),
 	offsetof(struct Name, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
@@ -441,6 +372,8 @@
 /*** <<< FUNC-DECLS [RelativeDistinguishedName] >>> ***/
 
 extern asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName;
+extern asn_SET_OF_specifics_t asn_SPC_RelativeDistinguishedName_specs_1;
+extern asn_TYPE_member_t asn_MBR_RelativeDistinguishedName_1[1];
 
 /*** <<< CTABLES [RelativeDistinguishedName] >>> ***/
 
@@ -499,7 +432,7 @@
 
 /*** <<< STAT-DEFS [RelativeDistinguishedName] >>> ***/
 
-static asn_TYPE_member_t asn_MBR_RelativeDistinguishedName_1[] = {
+asn_TYPE_member_t asn_MBR_RelativeDistinguishedName_1[] = {
 	{ ATF_POINTER, 0, 0,
 		.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
 		.tag_mode = 0,
@@ -514,7 +447,7 @@
 static const ber_tlv_tag_t asn_DEF_RelativeDistinguishedName_tags_1[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
 };
-static asn_SET_OF_specifics_t asn_SPC_RelativeDistinguishedName_specs_1 = {
+asn_SET_OF_specifics_t asn_SPC_RelativeDistinguishedName_specs_1 = {
 	sizeof(struct RelativeDistinguishedName),
 	offsetof(struct RelativeDistinguishedName, _asn_ctx),
 	0,	/* XER encoding is XMLDelimitedItemList */
