diff --git a/tests/65-multi-tag-OK.asn1.-Pfnative-types b/tests/65-multi-tag-OK.asn1.-Pfnative-types
index 9a20c0f..ba84d78 100644
--- a/tests/65-multi-tag-OK.asn1.-Pfnative-types
+++ b/tests/65-multi-tag-OK.asn1.-Pfnative-types
@@ -20,84 +20,10 @@
 
 /*** <<< CODE [T1] >>> ***/
 
-int
-T1_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_T2.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using T2,
  * so here we adjust the DEF accordingly.
  */
-static void
-T1_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_T2.free_struct;
-	td->print_struct   = asn_DEF_T2.print_struct;
-	td->check_constraints = asn_DEF_T2.check_constraints;
-	td->ber_decoder    = asn_DEF_T2.ber_decoder;
-	td->der_encoder    = asn_DEF_T2.der_encoder;
-	td->xer_decoder    = asn_DEF_T2.xer_decoder;
-	td->xer_encoder    = asn_DEF_T2.xer_encoder;
-	td->uper_decoder   = asn_DEF_T2.uper_decoder;
-	td->uper_encoder   = asn_DEF_T2.uper_encoder;
-	td->oer_decoder    = asn_DEF_T2.oer_decoder;
-	td->oer_encoder    = asn_DEF_T2.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_T2.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_T2.per_constraints;
-	td->elements       = asn_DEF_T2.elements;
-	td->elements_count = asn_DEF_T2.elements_count;
-	td->specifics      = asn_DEF_T2.specifics;
-}
-
-void
-T1_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T1_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T1_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T1_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T1_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) {
-	T1_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T1_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) {
-	T1_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T1_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) {
-	T1_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T1_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) {
-	T1_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T1] >>> ***/
 
@@ -118,13 +44,13 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	T1_free,
-	T1_print,
-	T1_constraint,
-	T1_decode_ber,
-	T1_encode_der,
-	T1_decode_xer,
-	T1_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -162,84 +88,10 @@
 
 /*** <<< CODE [T2] >>> ***/
 
-int
-T2_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_T3.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using T3,
  * so here we adjust the DEF accordingly.
  */
-static void
-T2_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_T3.free_struct;
-	td->print_struct   = asn_DEF_T3.print_struct;
-	td->check_constraints = asn_DEF_T3.check_constraints;
-	td->ber_decoder    = asn_DEF_T3.ber_decoder;
-	td->der_encoder    = asn_DEF_T3.der_encoder;
-	td->xer_decoder    = asn_DEF_T3.xer_decoder;
-	td->xer_encoder    = asn_DEF_T3.xer_encoder;
-	td->uper_decoder   = asn_DEF_T3.uper_decoder;
-	td->uper_encoder   = asn_DEF_T3.uper_encoder;
-	td->oer_decoder    = asn_DEF_T3.oer_decoder;
-	td->oer_encoder    = asn_DEF_T3.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_T3.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_T3.per_constraints;
-	td->elements       = asn_DEF_T3.elements;
-	td->elements_count = asn_DEF_T3.elements_count;
-	td->specifics      = asn_DEF_T3.specifics;
-}
-
-void
-T2_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T2_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T2_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T2_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) {
-	T2_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T2_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) {
-	T2_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T2_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) {
-	T2_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T2_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) {
-	T2_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T2] >>> ***/
 
@@ -258,13 +110,13 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	T2_free,
-	T2_print,
-	T2_constraint,
-	T2_decode_ber,
-	T2_encode_der,
-	T2_decode_xer,
-	T2_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -302,84 +154,10 @@
 
 /*** <<< CODE [T3] >>> ***/
 
-int
-T3_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_T4.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using T4,
  * so here we adjust the DEF accordingly.
  */
-static void
-T3_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_T4.free_struct;
-	td->print_struct   = asn_DEF_T4.print_struct;
-	td->check_constraints = asn_DEF_T4.check_constraints;
-	td->ber_decoder    = asn_DEF_T4.ber_decoder;
-	td->der_encoder    = asn_DEF_T4.der_encoder;
-	td->xer_decoder    = asn_DEF_T4.xer_decoder;
-	td->xer_encoder    = asn_DEF_T4.xer_encoder;
-	td->uper_decoder   = asn_DEF_T4.uper_decoder;
-	td->uper_encoder   = asn_DEF_T4.uper_encoder;
-	td->oer_decoder    = asn_DEF_T4.oer_decoder;
-	td->oer_encoder    = asn_DEF_T4.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_T4.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_T4.per_constraints;
-	td->elements       = asn_DEF_T4.elements;
-	td->elements_count = asn_DEF_T4.elements_count;
-	td->specifics      = asn_DEF_T4.specifics;
-}
-
-void
-T3_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T3_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T3_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T3_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) {
-	T3_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T3_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) {
-	T3_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T3_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) {
-	T3_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T3_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) {
-	T3_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T3] >>> ***/
 
@@ -396,13 +174,13 @@
 asn_TYPE_descriptor_t asn_DEF_T3 = {
 	"T3",
 	"T3",
-	T3_free,
-	T3_print,
-	T3_constraint,
-	T3_decode_ber,
-	T3_encode_der,
-	T3_decode_xer,
-	T3_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -440,84 +218,10 @@
 
 /*** <<< CODE [T4] >>> ***/
 
-int
-T4_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_T5.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using T5,
  * so here we adjust the DEF accordingly.
  */
-static void
-T4_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_T5.free_struct;
-	td->print_struct   = asn_DEF_T5.print_struct;
-	td->check_constraints = asn_DEF_T5.check_constraints;
-	td->ber_decoder    = asn_DEF_T5.ber_decoder;
-	td->der_encoder    = asn_DEF_T5.der_encoder;
-	td->xer_decoder    = asn_DEF_T5.xer_decoder;
-	td->xer_encoder    = asn_DEF_T5.xer_encoder;
-	td->uper_decoder   = asn_DEF_T5.uper_decoder;
-	td->uper_encoder   = asn_DEF_T5.uper_encoder;
-	td->oer_decoder    = asn_DEF_T5.oer_decoder;
-	td->oer_encoder    = asn_DEF_T5.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_T5.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_T5.per_constraints;
-	td->elements       = asn_DEF_T5.elements;
-	td->elements_count = asn_DEF_T5.elements_count;
-	td->specifics      = asn_DEF_T5.specifics;
-}
-
-void
-T4_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T4_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T4_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T4_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) {
-	T4_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T4_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) {
-	T4_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T4_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) {
-	T4_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T4_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) {
-	T4_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T4] >>> ***/
 
@@ -529,13 +233,13 @@
 asn_TYPE_descriptor_t asn_DEF_T4 = {
 	"T4",
 	"T4",
-	T4_free,
-	T4_print,
-	T4_constraint,
-	T4_decode_ber,
-	T4_encode_der,
-	T4_decode_xer,
-	T4_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -573,84 +277,10 @@
 
 /*** <<< CODE [T5] >>> ***/
 
-int
-T5_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_T6.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using T6,
  * so here we adjust the DEF accordingly.
  */
-static void
-T5_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_T6.free_struct;
-	td->print_struct   = asn_DEF_T6.print_struct;
-	td->check_constraints = asn_DEF_T6.check_constraints;
-	td->ber_decoder    = asn_DEF_T6.ber_decoder;
-	td->der_encoder    = asn_DEF_T6.der_encoder;
-	td->xer_decoder    = asn_DEF_T6.xer_decoder;
-	td->xer_encoder    = asn_DEF_T6.xer_encoder;
-	td->uper_decoder   = asn_DEF_T6.uper_decoder;
-	td->uper_encoder   = asn_DEF_T6.uper_encoder;
-	td->oer_decoder    = asn_DEF_T6.oer_decoder;
-	td->oer_encoder    = asn_DEF_T6.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_T6.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_T6.per_constraints;
-	td->elements       = asn_DEF_T6.elements;
-	td->elements_count = asn_DEF_T6.elements_count;
-	td->specifics      = asn_DEF_T6.specifics;
-}
-
-void
-T5_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T5_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T5_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T5_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) {
-	T5_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T5_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) {
-	T5_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T5_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) {
-	T5_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T5_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) {
-	T5_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T5] >>> ***/
 
@@ -661,13 +291,13 @@
 asn_TYPE_descriptor_t asn_DEF_T5 = {
 	"T5",
 	"T5",
-	T5_free,
-	T5_print,
-	T5_constraint,
-	T5_decode_ber,
-	T5_encode_der,
-	T5_decode_xer,
-	T5_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -705,84 +335,10 @@
 
 /*** <<< CODE [T6] >>> ***/
 
-int
-T6_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_NativeReal.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using NativeReal,
  * so here we adjust the DEF accordingly.
  */
-static void
-T6_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_NativeReal.free_struct;
-	td->print_struct   = asn_DEF_NativeReal.print_struct;
-	td->check_constraints = asn_DEF_NativeReal.check_constraints;
-	td->ber_decoder    = asn_DEF_NativeReal.ber_decoder;
-	td->der_encoder    = asn_DEF_NativeReal.der_encoder;
-	td->xer_decoder    = asn_DEF_NativeReal.xer_decoder;
-	td->xer_encoder    = asn_DEF_NativeReal.xer_encoder;
-	td->uper_decoder   = asn_DEF_NativeReal.uper_decoder;
-	td->uper_encoder   = asn_DEF_NativeReal.uper_encoder;
-	td->oer_decoder    = asn_DEF_NativeReal.oer_decoder;
-	td->oer_encoder    = asn_DEF_NativeReal.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_NativeReal.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_NativeReal.per_constraints;
-	td->elements       = asn_DEF_NativeReal.elements;
-	td->elements_count = asn_DEF_NativeReal.elements_count;
-	td->specifics      = asn_DEF_NativeReal.specifics;
-}
-
-void
-T6_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T6_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T6_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T6_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) {
-	T6_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T6_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) {
-	T6_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T6_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) {
-	T6_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T6_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) {
-	T6_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T6] >>> ***/
 
@@ -792,13 +348,13 @@
 asn_TYPE_descriptor_t asn_DEF_T6 = {
 	"T6",
 	"T6",
-	T6_free,
-	T6_print,
-	T6_constraint,
-	T6_decode_ber,
-	T6_encode_der,
-	T6_decode_xer,
-	T6_encode_xer,
+	NativeReal_free,
+	NativeReal_print,
+	NativeReal_constraint,
+	NativeReal_decode_ber,
+	NativeReal_encode_der,
+	NativeReal_decode_xer,
+	NativeReal_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 */
@@ -836,84 +392,10 @@
 
 /*** <<< CODE [T] >>> ***/
 
-int
-T_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_Ts.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
-}
-
 /*
  * This type is implemented using Ts,
  * so here we adjust the DEF accordingly.
  */
-static void
-T_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
-	td->free_struct    = asn_DEF_Ts.free_struct;
-	td->print_struct   = asn_DEF_Ts.print_struct;
-	td->check_constraints = asn_DEF_Ts.check_constraints;
-	td->ber_decoder    = asn_DEF_Ts.ber_decoder;
-	td->der_encoder    = asn_DEF_Ts.der_encoder;
-	td->xer_decoder    = asn_DEF_Ts.xer_decoder;
-	td->xer_encoder    = asn_DEF_Ts.xer_encoder;
-	td->uper_decoder   = asn_DEF_Ts.uper_decoder;
-	td->uper_encoder   = asn_DEF_Ts.uper_encoder;
-	td->oer_decoder    = asn_DEF_Ts.oer_decoder;
-	td->oer_encoder    = asn_DEF_Ts.oer_encoder;
-	if(!td->oer_constraints)
-		td->oer_constraints = asn_DEF_Ts.oer_constraints;
-	if(!td->per_constraints)
-		td->per_constraints = asn_DEF_Ts.per_constraints;
-	td->elements       = asn_DEF_Ts.elements;
-	td->elements_count = asn_DEF_Ts.elements_count;
-	td->specifics      = asn_DEF_Ts.specifics;
-}
-
-void
-T_free(asn_TYPE_descriptor_t *td,
-		void *struct_ptr, int contents_only) {
-	T_1_inherit_TYPE_descriptor(td);
-	td->free_struct(td, struct_ptr, contents_only);
-}
-
-int
-T_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
-		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
-	T_1_inherit_TYPE_descriptor(td);
-	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
-}
-
-asn_dec_rval_t
-T_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) {
-	T_1_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
-}
-
-asn_enc_rval_t
-T_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) {
-	T_1_inherit_TYPE_descriptor(td);
-	return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
-}
-
-asn_dec_rval_t
-T_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) {
-	T_1_inherit_TYPE_descriptor(td);
-	return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size);
-}
-
-asn_enc_rval_t
-T_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) {
-	T_1_inherit_TYPE_descriptor(td);
-	return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
-}
-
 
 /*** <<< STAT-DEFS [T] >>> ***/
 
@@ -925,13 +407,13 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	T_free,
-	T_print,
-	T_constraint,
-	T_decode_ber,
-	T_encode_der,
-	T_decode_xer,
-	T_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 */
@@ -943,8 +425,9 @@
 		/sizeof(asn_DEF_T_tags_1[0]), /* 3 */
 	0,	/* No OER visible constraints */
 	0,	/* No PER visible constraints */
-	0, 0,	/* Defined elsewhere */
-	0	/* No specifics */
+	asn_MBR_Ts_1,
+	3,	/* Elements count */
+	&asn_SPC_Ts_specs_1	/* Additional specs */
 };
 
 
@@ -968,10 +451,12 @@
 /*** <<< FUNC-DECLS [Ts] >>> ***/
 
 extern asn_TYPE_descriptor_t asn_DEF_Ts;
+extern asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1;
+extern asn_TYPE_member_t asn_MBR_Ts_1[3];
 
 /*** <<< STAT-DEFS [Ts] >>> ***/
 
-static asn_TYPE_member_t asn_MBR_Ts_1[] = {
+asn_TYPE_member_t asn_MBR_Ts_1[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct Ts, m1),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)),
 		.tag_mode = -1,	/* IMPLICIT tag at current level */
@@ -1012,7 +497,7 @@
     { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* m2 */
     { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 } /* m3 */
 };
-static asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1 = {
+asn_SEQUENCE_specifics_t asn_SPC_Ts_specs_1 = {
 	sizeof(struct Ts),
 	offsetof(struct Ts, _asn_ctx),
 	asn_MAP_Ts_tag2el_1,
