Move type operations to another structure

Every type has free, print, check_constraints, ber_decoder, der_encoder,
xer_decoder, xer_encoder, uper_decoder, uper_encoder and outmost_tag
operations. We move them out to a separate structure asn_TYPE_operation_t.

Combined with previous logic simplification, these operations are based
on ASN.1 basic types, constructed types and string types. So we can
reduce the space occupied by asn_TYPE_descriptor_t variables.
diff --git a/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types
index af272c5..62fc5b1 100644
--- a/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/03-enum-OK.asn1.-Pfwide-types
@@ -68,17 +68,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum1 = {
 	"Enum1",
 	"Enum1",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum1_tags_1,
 	sizeof(asn_DEF_Enum1_tags_1)
 		/sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
@@ -170,17 +161,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum2 = {
 	"Enum2",
 	"Enum2",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum2_tags_1,
 	sizeof(asn_DEF_Enum2_tags_1)
 		/sizeof(asn_DEF_Enum2_tags_1[0]), /* 1 */
@@ -260,17 +242,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum3 = {
 	"Enum3",
 	"Enum3",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum3_tags_1,
 	sizeof(asn_DEF_Enum3_tags_1)
 		/sizeof(asn_DEF_Enum3_tags_1[0]), /* 1 */
@@ -353,17 +326,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum4 = {
 	"Enum4",
 	"Enum4",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum4_tags_1,
 	sizeof(asn_DEF_Enum4_tags_1)
 		/sizeof(asn_DEF_Enum4_tags_1[0]), /* 1 */
@@ -443,17 +407,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum5 = {
 	"Enum5",
 	"Enum5",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum5_tags_1,
 	sizeof(asn_DEF_Enum5_tags_1)
 		/sizeof(asn_DEF_Enum5_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types
index 740db92..c2abeed 100644
--- a/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/104-param-1-OK.asn1.-Pfwide-types
@@ -56,17 +56,8 @@
 asn_TYPE_descriptor_t asn_DEF_Collection_16P0 = {
 	"Collection",
 	"Collection",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Collection_16P0_tags_1,
 	sizeof(asn_DEF_Collection_16P0_tags_1)
 		/sizeof(asn_DEF_Collection_16P0_tags_1[0]), /* 1 */
@@ -104,17 +95,8 @@
 asn_TYPE_descriptor_t asn_DEF_Collection_16P1 = {
 	"Collection",
 	"Collection",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Collection_16P1_tags_3,
 	sizeof(asn_DEF_Collection_16P1_tags_3)
 		/sizeof(asn_DEF_Collection_16P1_tags_3[0]), /* 1 */
@@ -193,17 +175,8 @@
 asn_TYPE_descriptor_t asn_DEF_Bunch = {
 	"Bunch",
 	"Bunch",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Bunch_tags_1,
 	sizeof(asn_DEF_Bunch_tags_1)
 		/sizeof(asn_DEF_Bunch_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types
index 3439300..1612084 100644
--- a/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/105-param-2-OK.asn1.-Pfwide-types
@@ -82,17 +82,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIGNED_16P0 = {
 	"SIGNED",
 	"SIGNED",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SIGNED_16P0_tags_1,
 	sizeof(asn_DEF_SIGNED_16P0_tags_1)
 		/sizeof(asn_DEF_SIGNED_16P0_tags_1[0]), /* 1 */
@@ -144,17 +135,8 @@
 asn_TYPE_descriptor_t asn_DEF_signed_4 = {
 	"signed",
 	"signed",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_signed_tags_4,
 	sizeof(asn_DEF_signed_tags_4)
 		/sizeof(asn_DEF_signed_tags_4[0]), /* 1 */
@@ -199,17 +181,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIGNED_16P1 = {
 	"SIGNED",
 	"SIGNED",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SIGNED_16P1_tags_3,
 	sizeof(asn_DEF_SIGNED_16P1_tags_3)
 		/sizeof(asn_DEF_SIGNED_16P1_tags_3[0]), /* 1 */
@@ -258,17 +231,8 @@
 asn_TYPE_descriptor_t asn_DEF_SignedREAL = {
 	"SignedREAL",
 	"SignedREAL",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SignedREAL_tags_1,
 	sizeof(asn_DEF_SignedREAL_tags_1)
 		/sizeof(asn_DEF_SignedREAL_tags_1[0]), /* 1 */
@@ -317,17 +281,8 @@
 asn_TYPE_descriptor_t asn_DEF_SignedSET = {
 	"SignedSET",
 	"SignedSET",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SignedSET_tags_1,
 	sizeof(asn_DEF_SignedSET_tags_1)
 		/sizeof(asn_DEF_SignedSET_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P b/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P
index 635a573..0fa7e61 100644
--- a/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/106-param-constr-OK.asn1.-P
@@ -174,17 +174,8 @@
 asn_TYPE_descriptor_t asn_DEF_Narrow_15P0 = {
 	"Narrow",
 	"Narrow",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Narrow_15P0_tags_1,
 	sizeof(asn_DEF_Narrow_15P0_tags_1)
 		/sizeof(asn_DEF_Narrow_15P0_tags_1[0]), /* 1 */
@@ -233,17 +224,8 @@
 asn_TYPE_descriptor_t asn_DEF_NarrowInteger = {
 	"NarrowInteger",
 	"NarrowInteger",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_NarrowInteger_tags_1,
 	sizeof(asn_DEF_NarrowInteger_tags_1)
 		/sizeof(asn_DEF_NarrowInteger_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types
index 7be99ad..c20a0c6 100644
--- a/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/108-param-constr-3-OK.asn1.-Pfwide-types
@@ -64,17 +64,8 @@
 asn_TYPE_descriptor_t asn_DEF_MinMax_16P0 = {
 	"MinMax",
 	"MinMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	MinMax_16P0_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_MinMax_16P0_tags_1,
 	sizeof(asn_DEF_MinMax_16P0_tags_1)
 		/sizeof(asn_DEF_MinMax_16P0_tags_1[0]), /* 1 */
@@ -153,17 +144,8 @@
 asn_TYPE_descriptor_t asn_DEF_ThreePlus = {
 	"ThreePlus",
 	"ThreePlus",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	ThreePlus_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_ThreePlus_tags_1,
 	sizeof(asn_DEF_ThreePlus_tags_1)
 		/sizeof(asn_DEF_ThreePlus_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfwide-types
index 4d85105..5c3c98c 100644
--- a/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/110-param-3-OK.asn1.-Pfwide-types
@@ -103,17 +103,8 @@
 asn_TYPE_descriptor_t asn_DEF_Flag_16P0 = {
 	"Flag",
 	"Flag",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Flag_16P0_tags_1,
 	sizeof(asn_DEF_Flag_16P0_tags_1)
 		/sizeof(asn_DEF_Flag_16P0_tags_1[0]), /* 1 */
@@ -173,17 +164,8 @@
 asn_TYPE_descriptor_t asn_DEF_field_7 = {
 	"field",
 	"field",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_field_tags_7,
 	sizeof(asn_DEF_field_tags_7)
 		/sizeof(asn_DEF_field_tags_7[0]), /* 1 */
@@ -227,17 +209,8 @@
 asn_TYPE_descriptor_t asn_DEF_Flag_16P1 = {
 	"Flag",
 	"Flag",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Flag_16P1_tags_6,
 	sizeof(asn_DEF_Flag_16P1_tags_6)
 		/sizeof(asn_DEF_Flag_16P1_tags_6[0]), /* 1 */
@@ -286,17 +259,8 @@
 asn_TYPE_descriptor_t asn_DEF_IntegerColorFlag = {
 	"IntegerColorFlag",
 	"IntegerColorFlag",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_IntegerColorFlag_tags_1,
 	sizeof(asn_DEF_IntegerColorFlag_tags_1)
 		/sizeof(asn_DEF_IntegerColorFlag_tags_1[0]), /* 1 */
@@ -345,17 +309,8 @@
 asn_TYPE_descriptor_t asn_DEF_EnumeratedColorFlag = {
 	"EnumeratedColorFlag",
 	"EnumeratedColorFlag",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_EnumeratedColorFlag_tags_1,
 	sizeof(asn_DEF_EnumeratedColorFlag_tags_1)
 		/sizeof(asn_DEF_EnumeratedColorFlag_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
index c09c605..0fe86d7 100644
--- a/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/119-per-strings-OK.asn1.-Pgen-PER
@@ -1209,18 +1209,8 @@
 asn_TYPE_descriptor_t asn_DEF_many_2 = {
 	"many",
 	"many",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_OF_decode_uper,
-	SEQUENCE_OF_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_many_tags_2,
 	sizeof(asn_DEF_many_tags_2)
 		/sizeof(asn_DEF_many_tags_2[0]) - 1, /* 1 */
@@ -1627,18 +1617,8 @@
 asn_TYPE_descriptor_t asn_DEF_PDU = {
 	"PDU",
 	"PDU",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PDU_tags_1,
 	sizeof(asn_DEF_PDU_tags_1)
 		/sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P
index f267409..b522fe2 100644
--- a/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/125-bitstring-constraint-OK.asn1.-P
@@ -47,8 +47,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_BIT_STRING.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -64,17 +63,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	BIT_STRING_free,
-	BIT_STRING_print,
-	BIT_STRING_compare,
+	&asn_OP_BIT_STRING,
 	T_constraint,
-	BIT_STRING_decode_ber,
-	BIT_STRING_encode_der,
-	BIT_STRING_decode_xer,
-	BIT_STRING_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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER
index 8a4311d..f365731 100644
--- a/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/126-per-extensions-OK.asn1.-Pgen-PER
@@ -105,18 +105,8 @@
 asn_TYPE_descriptor_t asn_DEF_PDU = {
 	"PDU",
 	"PDU",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PDU_tags_1,
 	sizeof(asn_DEF_PDU_tags_1)
 		/sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */
@@ -212,18 +202,8 @@
 asn_TYPE_descriptor_t asn_DEF_Singleton = {
 	"Singleton",
 	"Singleton",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Singleton_tags_1,
 	sizeof(asn_DEF_Singleton_tags_1)
 		/sizeof(asn_DEF_Singleton_tags_1[0]), /* 1 */
@@ -342,18 +322,8 @@
 asn_TYPE_descriptor_t asn_DEF_PDU_2 = {
 	"PDU-2",
 	"PDU-2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	CHOICE_decode_uper,
-	CHOICE_encode_uper,
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER
index 17e0fbf..44e0094 100644
--- a/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/127-per-long-OK.asn1.-Pgen-PER
@@ -213,18 +213,8 @@
 asn_TYPE_descriptor_t asn_DEF_unsigned32_4 = {
 	"unsigned32",
 	"unsigned32",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	unsigned32_4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_unsigned32_tags_4,
 	sizeof(asn_DEF_unsigned32_tags_4)
 		/sizeof(asn_DEF_unsigned32_tags_4[0]) - 1, /* 1 */
@@ -250,18 +240,8 @@
 asn_TYPE_descriptor_t asn_DEF_unsplit32_5 = {
 	"unsplit32",
 	"unsplit32",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	unsplit32_5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_unsplit32_tags_5,
 	sizeof(asn_DEF_unsplit32_tags_5)
 		/sizeof(asn_DEF_unsplit32_tags_5[0]) - 1, /* 1 */
@@ -341,18 +321,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER
index 0beb8fc..f00777a 100644
--- a/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/131-per-empty-OK.asn1.-Pgen-PER
@@ -32,18 +32,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER
index 0960882..bb4f7b0 100644
--- a/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/134-per-long-OK.asn1.-Pgen-PER
@@ -239,18 +239,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER
index fa5dae5..d424a44 100644
--- a/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/136-oer-long-OK.asn1.-Pgen-OER
@@ -566,18 +566,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_oer,
-	SEQUENCE_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
index 5ee4e0f..370efeb 100644
--- a/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/137-oer-string-OK.asn1.-Pgen-OER
@@ -226,18 +226,8 @@
 asn_TYPE_descriptor_t asn_DEF_unconstrained_2 = {
 	"unconstrained",
 	"unconstrained",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_oer,
-	SEQUENCE_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_unconstrained_tags_2,
 	sizeof(asn_DEF_unconstrained_tags_2)
 		/sizeof(asn_DEF_unconstrained_tags_2[0]), /* 1 */
@@ -307,18 +297,8 @@
 asn_TYPE_descriptor_t asn_DEF_constrained_6 = {
 	"constrained",
 	"constrained",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_oer,
-	SEQUENCE_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_constrained_tags_6,
 	sizeof(asn_DEF_constrained_tags_6)
 		/sizeof(asn_DEF_constrained_tags_6[0]), /* 1 */
@@ -375,18 +355,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	SEQUENCE_decode_oer,
-	SEQUENCE_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
index 0d74625..3dd913e 100644
--- a/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
+++ b/tests/tests-asn1c-compiler/138-oer-constraints-OK.asn1.-Pgen-OER
@@ -35,18 +35,8 @@
 asn_TYPE_descriptor_t asn_DEF_A_noc = {
 	"A-noc",
 	"A-noc",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_A_noc_tags_1,
 	sizeof(asn_DEF_A_noc_tags_1)
 		/sizeof(asn_DEF_A_noc_tags_1[0]), /* 1 */
@@ -127,18 +117,8 @@
 asn_TYPE_descriptor_t asn_DEF_B_0_0 = {
 	"B-0-0",
 	"B-0-0",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	B_0_0_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_B_0_0_tags_1,
 	sizeof(asn_DEF_B_0_0_tags_1)
 		/sizeof(asn_DEF_B_0_0_tags_1[0]), /* 1 */
@@ -219,18 +199,8 @@
 asn_TYPE_descriptor_t asn_DEF_C_1_2 = {
 	"C-1-2",
 	"C-1-2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	C_1_2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_C_1_2_tags_1,
 	sizeof(asn_DEF_C_1_2_tags_1)
 		/sizeof(asn_DEF_C_1_2_tags_1[0]), /* 1 */
@@ -311,18 +281,8 @@
 asn_TYPE_descriptor_t asn_DEF_D_inv = {
 	"D-inv",
 	"D-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	D_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_D_inv_tags_1,
 	sizeof(asn_DEF_D_inv_tags_1)
 		/sizeof(asn_DEF_D_inv_tags_1[0]), /* 1 */
@@ -403,18 +363,8 @@
 asn_TYPE_descriptor_t asn_DEF_E_2_5 = {
 	"E-2-5",
 	"E-2-5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	E_2_5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_E_2_5_tags_1,
 	sizeof(asn_DEF_E_2_5_tags_1)
 		/sizeof(asn_DEF_E_2_5_tags_1[0]), /* 1 */
@@ -495,18 +445,8 @@
 asn_TYPE_descriptor_t asn_DEF_F_inv = {
 	"F-inv",
 	"F-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	F_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_F_inv_tags_1,
 	sizeof(asn_DEF_F_inv_tags_1)
 		/sizeof(asn_DEF_F_inv_tags_1[0]), /* 1 */
@@ -587,18 +527,8 @@
 asn_TYPE_descriptor_t asn_DEF_G_3_3 = {
 	"G-3-3",
 	"G-3-3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	G_3_3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_G_3_3_tags_1,
 	sizeof(asn_DEF_G_3_3_tags_1)
 		/sizeof(asn_DEF_G_3_3_tags_1[0]), /* 1 */
@@ -679,18 +609,8 @@
 asn_TYPE_descriptor_t asn_DEF_H_4_5 = {
 	"H-4-5",
 	"H-4-5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	H_4_5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_H_4_5_tags_1,
 	sizeof(asn_DEF_H_4_5_tags_1)
 		/sizeof(asn_DEF_H_4_5_tags_1[0]), /* 1 */
@@ -771,18 +691,8 @@
 asn_TYPE_descriptor_t asn_DEF_I_0_5 = {
 	"I-0-5",
 	"I-0-5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	I_0_5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_I_0_5_tags_1,
 	sizeof(asn_DEF_I_0_5_tags_1)
 		/sizeof(asn_DEF_I_0_5_tags_1[0]), /* 1 */
@@ -863,18 +773,8 @@
 asn_TYPE_descriptor_t asn_DEF_J_4_9 = {
 	"J-4-9",
 	"J-4-9",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	J_4_9_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_J_4_9_tags_1,
 	sizeof(asn_DEF_J_4_9_tags_1)
 		/sizeof(asn_DEF_J_4_9_tags_1[0]), /* 1 */
@@ -955,18 +855,8 @@
 asn_TYPE_descriptor_t asn_DEF_K_inv = {
 	"K-inv",
 	"K-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	K_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_K_inv_tags_1,
 	sizeof(asn_DEF_K_inv_tags_1)
 		/sizeof(asn_DEF_K_inv_tags_1[0]), /* 1 */
@@ -1047,18 +937,8 @@
 asn_TYPE_descriptor_t asn_DEF_L_0_5 = {
 	"L-0-5",
 	"L-0-5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	L_0_5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_L_0_5_tags_1,
 	sizeof(asn_DEF_L_0_5_tags_1)
 		/sizeof(asn_DEF_L_0_5_tags_1[0]), /* 1 */
@@ -1139,18 +1019,8 @@
 asn_TYPE_descriptor_t asn_DEF_M_inv = {
 	"M-inv",
 	"M-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	M_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_M_inv_tags_1,
 	sizeof(asn_DEF_M_inv_tags_1)
 		/sizeof(asn_DEF_M_inv_tags_1[0]), /* 1 */
@@ -1231,18 +1101,8 @@
 asn_TYPE_descriptor_t asn_DEF_N_inv = {
 	"N-inv",
 	"N-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	N_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_N_inv_tags_1,
 	sizeof(asn_DEF_N_inv_tags_1)
 		/sizeof(asn_DEF_N_inv_tags_1[0]), /* 1 */
@@ -1323,18 +1183,8 @@
 asn_TYPE_descriptor_t asn_DEF_O_inv = {
 	"O-inv",
 	"O-inv",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	O_inv_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	NativeInteger_decode_oer,
-	NativeInteger_encode_oer,
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_O_inv_tags_1,
 	sizeof(asn_DEF_O_inv_tags_1)
 		/sizeof(asn_DEF_O_inv_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P
index 641bca8..d05c23d 100644
--- a/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/139-component-relation-OK.asn1.-P
@@ -93,7 +93,7 @@
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
 	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
 	
-	    if(constraining_cell->type_descriptor->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
 	        result.type_descriptor = type_cell->type_descriptor;
 	        result.presence_index = row + 1;
 	        break;
@@ -167,17 +167,8 @@
 asn_TYPE_descriptor_t asn_DEF_value_3 = {
 	"value",
 	"value",
-	OPEN_TYPE_free,
-	OPEN_TYPE_print,
-	OPEN_TYPE_compare,
+	&asn_OP_OPEN_TYPE,
 	OPEN_TYPE_constraint,
-	OPEN_TYPE_decode_ber,
-	OPEN_TYPE_encode_der,
-	OPEN_TYPE_decode_xer,
-	OPEN_TYPE_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 */
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -231,17 +222,8 @@
 asn_TYPE_descriptor_t asn_DEF_Frame = {
 	"Frame",
 	"Frame",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Frame_tags_1,
 	sizeof(asn_DEF_Frame_tags_1)
 		/sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
@@ -290,17 +272,8 @@
 asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
 	"PrimitiveMessage",
 	"PrimitiveMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_PrimitiveMessage_tags_1,
 	sizeof(asn_DEF_PrimitiveMessage_tags_1)
 		/sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
@@ -348,17 +321,8 @@
 asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
 	"ComplexMessage",
 	"ComplexMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ComplexMessage_tags_1,
 	sizeof(asn_DEF_ComplexMessage_tags_1)
 		/sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P
index 641bca8..d05c23d 100644
--- a/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/140-component-relation-OK.asn1.-P
@@ -93,7 +93,7 @@
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
 	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
 	
-	    if(constraining_cell->type_descriptor->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
 	        result.type_descriptor = type_cell->type_descriptor;
 	        result.presence_index = row + 1;
 	        break;
@@ -167,17 +167,8 @@
 asn_TYPE_descriptor_t asn_DEF_value_3 = {
 	"value",
 	"value",
-	OPEN_TYPE_free,
-	OPEN_TYPE_print,
-	OPEN_TYPE_compare,
+	&asn_OP_OPEN_TYPE,
 	OPEN_TYPE_constraint,
-	OPEN_TYPE_decode_ber,
-	OPEN_TYPE_encode_der,
-	OPEN_TYPE_decode_xer,
-	OPEN_TYPE_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 */
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -231,17 +222,8 @@
 asn_TYPE_descriptor_t asn_DEF_Frame = {
 	"Frame",
 	"Frame",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Frame_tags_1,
 	sizeof(asn_DEF_Frame_tags_1)
 		/sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
@@ -290,17 +272,8 @@
 asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
 	"PrimitiveMessage",
 	"PrimitiveMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_PrimitiveMessage_tags_1,
 	sizeof(asn_DEF_PrimitiveMessage_tags_1)
 		/sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
@@ -348,17 +321,8 @@
 asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
 	"ComplexMessage",
 	"ComplexMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ComplexMessage_tags_1,
 	sizeof(asn_DEF_ComplexMessage_tags_1)
 		/sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P b/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P
index 2718acc..2342446 100644
--- a/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/141-component-relation-OK.asn1.-P
@@ -99,7 +99,7 @@
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
 	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
 	
-	    if(constraining_cell->type_descriptor->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
 	        result.type_descriptor = type_cell->type_descriptor;
 	        result.presence_index = row + 1;
 	        break;
@@ -173,17 +173,8 @@
 asn_TYPE_descriptor_t asn_DEF_value_3 = {
 	"value",
 	"value",
-	OPEN_TYPE_free,
-	OPEN_TYPE_print,
-	OPEN_TYPE_compare,
+	&asn_OP_OPEN_TYPE,
 	OPEN_TYPE_constraint,
-	OPEN_TYPE_decode_ber,
-	OPEN_TYPE_encode_der,
-	OPEN_TYPE_decode_xer,
-	OPEN_TYPE_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 */
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -238,17 +229,8 @@
 asn_TYPE_descriptor_t asn_DEF_Frame = {
 	"Frame",
 	"Frame",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Frame_tags_1,
 	sizeof(asn_DEF_Frame_tags_1)
 		/sizeof(asn_DEF_Frame_tags_1[0]), /* 1 */
@@ -322,17 +304,8 @@
 asn_TYPE_descriptor_t asn_DEF_ConstrainedInteger = {
 	"ConstrainedInteger",
 	"ConstrainedInteger",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	ConstrainedInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_ConstrainedInteger_tags_1,
 	sizeof(asn_DEF_ConstrainedInteger_tags_1)
 		/sizeof(asn_DEF_ConstrainedInteger_tags_1[0]), /* 1 */
@@ -380,17 +353,8 @@
 asn_TYPE_descriptor_t asn_DEF_PrimitiveMessage = {
 	"PrimitiveMessage",
 	"PrimitiveMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_PrimitiveMessage_tags_1,
 	sizeof(asn_DEF_PrimitiveMessage_tags_1)
 		/sizeof(asn_DEF_PrimitiveMessage_tags_1[0]), /* 1 */
@@ -438,17 +402,8 @@
 asn_TYPE_descriptor_t asn_DEF_ComplexMessage = {
 	"ComplexMessage",
 	"ComplexMessage",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ComplexMessage_tags_1,
 	sizeof(asn_DEF_ComplexMessage_tags_1)
 		/sizeof(asn_DEF_ComplexMessage_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-P b/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-P
index fd73afa..649ddb2 100644
--- a/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/142-anonymous-types-deco-OK.asn1.-P
@@ -73,17 +73,8 @@
 asn_TYPE_descriptor_t asn_DEF_CommonType = {
 	"CommonType",
 	"CommonType",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -235,17 +226,8 @@
 asn_TYPE_descriptor_t asn_DEF_anonType_2 = {
 	"anonType",
 	"anonType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_anonType_tags_2,
 	sizeof(asn_DEF_anonType_tags_2)
 		/sizeof(asn_DEF_anonType_tags_2[0]) - 1, /* 1 */
@@ -288,17 +270,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type1 = {
 	"Type1",
 	"Type1",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -450,17 +423,8 @@
 asn_TYPE_descriptor_t asn_DEF_anonType_2 = {
 	"anonType",
 	"anonType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_anonType_tags_2,
 	sizeof(asn_DEF_anonType_tags_2)
 		/sizeof(asn_DEF_anonType_tags_2[0]) - 1, /* 1 */
@@ -503,17 +467,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type2 = {
 	"Type2",
 	"Type2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P b/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P
index 988cfe5..e92c4ce 100644
--- a/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/143-inner-parameterization-OK.asn1.-P
@@ -63,17 +63,8 @@
 asn_TYPE_descriptor_t asn_DEF_Message = {
 	"Message",
 	"Message",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Message_tags_1,
 	sizeof(asn_DEF_Message_tags_1)
 		/sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
@@ -203,17 +194,8 @@
 asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P0 = {
 	"SpecializedContent",
 	"SpecializedContent",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SpecializedContent_21P0_tags_1,
 	sizeof(asn_DEF_SpecializedContent_21P0_tags_1)
 		/sizeof(asn_DEF_SpecializedContent_21P0_tags_1[0]), /* 1 */
@@ -258,17 +240,8 @@
 asn_TYPE_descriptor_t asn_DEF_SpecializedContent_21P1 = {
 	"SpecializedContent",
 	"SpecializedContent",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SpecializedContent_21P1_tags_3,
 	sizeof(asn_DEF_SpecializedContent_21P1_tags_3)
 		/sizeof(asn_DEF_SpecializedContent_21P1_tags_3[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P
index 340d2ec..5c010ea 100644
--- a/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/144-ios-parameterization-OK.asn1.-P
@@ -50,17 +50,8 @@
 asn_TYPE_descriptor_t asn_DEF_Message = {
 	"Message",
 	"Message",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Message_tags_1,
 	sizeof(asn_DEF_Message_tags_1)
 		/sizeof(asn_DEF_Message_tags_1[0]), /* 1 */
@@ -166,7 +157,7 @@
 	    const asn_ioc_cell_t *constraining_cell = &itable->rows[row * itable->columns_count + constraining_column];
 	    const asn_ioc_cell_t *type_cell = &itable->rows[row * itable->columns_count + for_column];
 	
-	    if(constraining_cell->type_descriptor->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
+	    if(constraining_cell->type_descriptor->op->compare_struct(constraining_cell->type_descriptor, constraining_value, constraining_cell->value_sptr) == 0) {
 	        result.type_descriptor = type_cell->type_descriptor;
 	        result.presence_index = row + 1;
 	        break;
@@ -240,17 +231,8 @@
 asn_TYPE_descriptor_t asn_DEF_value_3 = {
 	"value",
 	"value",
-	OPEN_TYPE_free,
-	OPEN_TYPE_print,
-	OPEN_TYPE_compare,
+	&asn_OP_OPEN_TYPE,
 	OPEN_TYPE_constraint,
-	OPEN_TYPE_decode_ber,
-	OPEN_TYPE_encode_der,
-	OPEN_TYPE_decode_xer,
-	OPEN_TYPE_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 */
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -304,17 +286,8 @@
 asn_TYPE_descriptor_t asn_DEF_SpecializedContent_30P0 = {
 	"SpecializedContent",
 	"SpecializedContent",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SpecializedContent_30P0_tags_1,
 	sizeof(asn_DEF_SpecializedContent_30P0_tags_1)
 		/sizeof(asn_DEF_SpecializedContent_30P0_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types
index af67368..4fb9487 100644
--- a/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/19-param-OK.asn1.-Pfwide-types
@@ -123,17 +123,8 @@
 asn_TYPE_descriptor_t asn_DEF_toBeSigned_2 = {
 	"toBeSigned",
 	"toBeSigned",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_toBeSigned_tags_2,
 	sizeof(asn_DEF_toBeSigned_tags_2)
 		/sizeof(asn_DEF_toBeSigned_tags_2[0]), /* 1 */
@@ -202,17 +193,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIGNED_15P0 = {
 	"SIGNED",
 	"SIGNED",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SIGNED_15P0_tags_1,
 	sizeof(asn_DEF_SIGNED_15P0_tags_1)
 		/sizeof(asn_DEF_SIGNED_15P0_tags_1[0]), /* 1 */
@@ -261,17 +243,8 @@
 asn_TYPE_descriptor_t asn_DEF_Certificate = {
 	"Certificate",
 	"Certificate",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Certificate_tags_1,
 	sizeof(asn_DEF_Certificate_tags_1)
 		/sizeof(asn_DEF_Certificate_tags_1[0]), /* 1 */
@@ -340,17 +313,8 @@
 asn_TYPE_descriptor_t asn_DEF_Name = {
 	"Name",
 	"Name",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_Name_tags_1,
 	sizeof(asn_DEF_Name_tags_1)
 		/sizeof(asn_DEF_Name_tags_1[0]), /* 1 */
@@ -467,17 +431,8 @@
 asn_TYPE_descriptor_t asn_DEF_RelativeDistinguishedName = {
 	"RelativeDistinguishedName",
 	"RelativeDistinguishedName",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_RelativeDistinguishedName_tags_1,
 	sizeof(asn_DEF_RelativeDistinguishedName_tags_1)
 		/sizeof(asn_DEF_RelativeDistinguishedName_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types
index ccc8c75..dd33adb 100644
--- a/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/22-tags-OK.asn1.-Pfwide-types
@@ -83,17 +83,8 @@
 asn_TYPE_descriptor_t asn_DEF_b_3 = {
 	"b",
 	"b",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -160,17 +151,8 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T1_tags_1,
 	sizeof(asn_DEF_T1_tags_1)
 		/sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types
index 5e3a3a8..800eb3d 100644
--- a/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/30-set-OK.asn1.-Pfwide-types
@@ -104,17 +104,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types
index a4401c2..3ee41ef 100644
--- a/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/31-set-of-OK.asn1.-Pfwide-types
@@ -53,17 +53,8 @@
 asn_TYPE_descriptor_t asn_DEF_Forest = {
 	"Forest",
 	"Forest",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Forest_tags_1,
 	sizeof(asn_DEF_Forest_tags_1)
 		/sizeof(asn_DEF_Forest_tags_1[0]), /* 1 */
@@ -144,17 +135,8 @@
 asn_TYPE_descriptor_t asn_DEF_Tree = {
 	"Tree",
 	"Tree",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Tree_tags_1,
 	sizeof(asn_DEF_Tree_tags_1)
 		/sizeof(asn_DEF_Tree_tags_1[0]), /* 1 */
@@ -287,17 +269,8 @@
 asn_TYPE_descriptor_t asn_DEF_trees_2 = {
 	"trees",
 	"trees",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_trees_tags_2,
 	sizeof(asn_DEF_trees_tags_2)
 		/sizeof(asn_DEF_trees_tags_2[0]) - 1, /* 1 */
@@ -343,17 +316,8 @@
 asn_TYPE_descriptor_t asn_DEF_Member_5 = {
 	"SEQUENCE",
 	"SEQUENCE",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Member_tags_5,
 	sizeof(asn_DEF_Member_tags_5)
 		/sizeof(asn_DEF_Member_tags_5[0]), /* 1 */
@@ -393,17 +357,8 @@
 asn_TYPE_descriptor_t asn_DEF_anything_4 = {
 	"anything",
 	"anything",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_anything_tags_4,
 	sizeof(asn_DEF_anything_tags_4)
 		/sizeof(asn_DEF_anything_tags_4[0]) - 1, /* 1 */
@@ -459,17 +414,8 @@
 asn_TYPE_descriptor_t asn_DEF_other_9 = {
 	"other",
 	"other",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -548,17 +494,8 @@
 asn_TYPE_descriptor_t asn_DEF_Stuff = {
 	"Stuff",
 	"Stuff",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Stuff_tags_1,
 	sizeof(asn_DEF_Stuff_tags_1)
 		/sizeof(asn_DEF_Stuff_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P b/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P
index c4d2466..876dcda 100644
--- a/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/32-sequence-of-OK.asn1.-P
@@ -51,17 +51,8 @@
 asn_TYPE_descriptor_t asn_DEF_Programming = {
 	"Programming",
 	"Programming",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_Programming_tags_1,
 	sizeof(asn_DEF_Programming_tags_1)
 		/sizeof(asn_DEF_Programming_tags_1[0]), /* 1 */
@@ -130,17 +121,8 @@
 asn_TYPE_descriptor_t asn_DEF_Fault = {
 	"Fault",
 	"Fault",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Fault_tags_1,
 	sizeof(asn_DEF_Fault_tags_1)
 		/sizeof(asn_DEF_Fault_tags_1[0]), /* 1 */
@@ -193,17 +175,8 @@
 asn_TYPE_descriptor_t asn_DEF_Error = {
 	"Error",
 	"Error",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Error_tags_1,
 	sizeof(asn_DEF_Error_tags_1)
 		/sizeof(asn_DEF_Error_tags_1[0]), /* 1 */
@@ -279,17 +252,8 @@
 asn_TYPE_descriptor_t asn_DEF_seqOfMan_3 = {
 	"seqOfMan",
 	"seqOfMan",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_seqOfMan_tags_3,
 	sizeof(asn_DEF_seqOfMan_tags_3)
 		/sizeof(asn_DEF_seqOfMan_tags_3[0]), /* 2 */
@@ -346,17 +310,8 @@
 asn_TYPE_descriptor_t asn_DEF_SeqWithMandatory = {
 	"SeqWithMandatory",
 	"SeqWithMandatory",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SeqWithMandatory_tags_1,
 	sizeof(asn_DEF_SeqWithMandatory_tags_1)
 		/sizeof(asn_DEF_SeqWithMandatory_tags_1[0]), /* 1 */
@@ -433,17 +388,8 @@
 asn_TYPE_descriptor_t asn_DEF_seqOfOpt_3 = {
 	"seqOfOpt",
 	"seqOfOpt",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_seqOfOpt_tags_3,
 	sizeof(asn_DEF_seqOfOpt_tags_3)
 		/sizeof(asn_DEF_seqOfOpt_tags_3[0]), /* 2 */
@@ -500,17 +446,8 @@
 asn_TYPE_descriptor_t asn_DEF_SeqWithOptional = {
 	"SeqWithOptional",
 	"SeqWithOptional",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_SeqWithOptional_tags_1,
 	sizeof(asn_DEF_SeqWithOptional_tags_1)
 		/sizeof(asn_DEF_SeqWithOptional_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types
index dbc9220..dfd38f3 100644
--- a/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/37-indirect-choice-OK.asn1.-Pfwide-types
@@ -103,17 +103,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -202,17 +193,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice1 = {
 	"Choice1",
 	"Choice1",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -333,17 +315,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice2 = {
 	"Choice2",
 	"Choice2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	asn_DEF_Choice2_tags_1,
 	sizeof(asn_DEF_Choice2_tags_1)
 		/sizeof(asn_DEF_Choice2_tags_1[0]), /* 1 */
@@ -393,17 +366,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice3 = {
 	"Choice3",
 	"Choice3",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	asn_DEF_Choice3_tags_1,
 	sizeof(asn_DEF_Choice3_tags_1)
 		/sizeof(asn_DEF_Choice3_tags_1[0]), /* 2 */
@@ -453,17 +417,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice4 = {
 	"Choice4",
 	"Choice4",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	asn_DEF_Choice4_tags_1,
 	sizeof(asn_DEF_Choice4_tags_1)
 		/sizeof(asn_DEF_Choice4_tags_1[0]) - 1, /* 1 */
@@ -512,17 +467,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice5 = {
 	"Choice5",
 	"Choice5",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	asn_DEF_Choice5_tags_1,
 	sizeof(asn_DEF_Choice5_tags_1)
 		/sizeof(asn_DEF_Choice5_tags_1[0]), /* 1 */
@@ -568,17 +514,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice6 = {
 	"Choice6",
 	"Choice6",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types
index ab34a4b..2878ad4 100644
--- a/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/39-sequence-of-OK.asn1.-Pfwide-types
@@ -60,17 +60,8 @@
 asn_TYPE_descriptor_t asn_DEF_collection_3 = {
 	"collection",
 	"collection",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_collection_tags_3,
 	sizeof(asn_DEF_collection_tags_3)
 		/sizeof(asn_DEF_collection_tags_3[0]), /* 1 */
@@ -127,17 +118,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
@@ -219,17 +201,8 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T2_tags_1,
 	sizeof(asn_DEF_T2_tags_1)
 		/sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR b/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR
index 06dd0e4..5b965c1 100644
--- a/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR
+++ b/tests/tests-asn1c-compiler/42-real-life-OK.asn1.-PR
@@ -93,17 +93,8 @@
 asn_TYPE_descriptor_t asn_DEF_varsets_3 = {
 	"varsets",
 	"varsets",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_varsets_tags_3,
 	sizeof(asn_DEF_varsets_tags_3)
 		/sizeof(asn_DEF_varsets_tags_3[0]), /* 1 */
@@ -160,17 +151,8 @@
 asn_TYPE_descriptor_t asn_DEF_LogLine = {
 	"LogLine",
 	"LogLine",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_LogLine_tags_1,
 	sizeof(asn_DEF_LogLine_tags_1)
 		/sizeof(asn_DEF_LogLine_tags_1[0]), /* 1 */
@@ -274,17 +256,8 @@
 asn_TYPE_descriptor_t asn_DEF_vparts_2 = {
 	"vparts",
 	"vparts",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_vparts_tags_2,
 	sizeof(asn_DEF_vparts_tags_2)
 		/sizeof(asn_DEF_vparts_tags_2[0]), /* 1 */
@@ -341,17 +314,8 @@
 asn_TYPE_descriptor_t asn_DEF_VariablePartSet = {
 	"VariablePartSet",
 	"VariablePartSet",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_VariablePartSet_tags_1,
 	sizeof(asn_DEF_VariablePartSet_tags_1)
 		/sizeof(asn_DEF_VariablePartSet_tags_1[0]), /* 1 */
@@ -478,17 +442,8 @@
 asn_TYPE_descriptor_t asn_DEF_vset_2 = {
 	"vset",
 	"vset",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_vset_tags_2,
 	sizeof(asn_DEF_vset_tags_2)
 		/sizeof(asn_DEF_vset_tags_2[0]), /* 1 */
@@ -546,17 +501,8 @@
 asn_TYPE_descriptor_t asn_DEF_vrange_4 = {
 	"vrange",
 	"vrange",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_vrange_tags_4,
 	sizeof(asn_DEF_vrange_tags_4)
 		/sizeof(asn_DEF_vrange_tags_4[0]), /* 1 */
@@ -611,17 +557,8 @@
 asn_TYPE_descriptor_t asn_DEF_VariablePart = {
 	"VariablePart",
 	"VariablePart",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -727,17 +664,8 @@
 asn_TYPE_descriptor_t asn_DEF_accept_as_2 = {
 	"accept-as",
 	"accept-as",
-	NativeEnumerated_free,
-	NativeEnumerated_print,
-	NativeEnumerated_compare,
+	&asn_OP_NativeEnumerated,
 	NativeEnumerated_constraint,
-	NativeEnumerated_decode_ber,
-	NativeEnumerated_encode_der,
-	NativeEnumerated_decode_xer,
-	NativeEnumerated_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 */
 	asn_DEF_accept_as_tags_2,
 	sizeof(asn_DEF_accept_as_tags_2)
 		/sizeof(asn_DEF_accept_as_tags_2[0]), /* 1 */
@@ -775,17 +703,8 @@
 asn_TYPE_descriptor_t asn_DEF_email_9 = {
 	"email",
 	"email",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_email_tags_9,
 	sizeof(asn_DEF_email_tags_9)
 		/sizeof(asn_DEF_email_tags_9[0]), /* 1 */
@@ -843,17 +762,8 @@
 asn_TYPE_descriptor_t asn_DEF_notify_7 = {
 	"notify",
 	"notify",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_notify_tags_7,
 	sizeof(asn_DEF_notify_tags_7)
 		/sizeof(asn_DEF_notify_tags_7[0]), /* 1 */
@@ -910,17 +820,8 @@
 asn_TYPE_descriptor_t asn_DEF_ActionItem = {
 	"ActionItem",
 	"ActionItem",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ActionItem_tags_1,
 	sizeof(asn_DEF_ActionItem_tags_1)
 		/sizeof(asn_DEF_ActionItem_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types
index 19ecb13..fbf2aeb 100644
--- a/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/43-recursion-OK.asn1.-Pfwide-types
@@ -71,17 +71,8 @@
 asn_TYPE_descriptor_t asn_DEF_t_member1_2 = {
 	"t-member1",
 	"t-member1",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_t_member1_tags_2,
 	sizeof(asn_DEF_t_member1_tags_2)
 		/sizeof(asn_DEF_t_member1_tags_2[0]), /* 1 */
@@ -120,17 +111,8 @@
 asn_TYPE_descriptor_t asn_DEF_t_member2_4 = {
 	"t-member2",
 	"t-member2",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_t_member2_tags_4,
 	sizeof(asn_DEF_t_member2_tags_4)
 		/sizeof(asn_DEF_t_member2_tags_4[0]), /* 1 */
@@ -211,17 +193,8 @@
 asn_TYPE_descriptor_t asn_DEF_Test_structure_1 = {
 	"Test-structure-1",
 	"Test-structure-1",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Test_structure_1_tags_1,
 	sizeof(asn_DEF_Test_structure_1_tags_1)
 		/sizeof(asn_DEF_Test_structure_1_tags_1[0]), /* 1 */
@@ -315,17 +288,8 @@
 asn_TYPE_descriptor_t asn_DEF_or_3 = {
 	"or",
 	"or",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_or_tags_3,
 	sizeof(asn_DEF_or_tags_3)
 		/sizeof(asn_DEF_or_tags_3[0]) - 1, /* 1 */
@@ -404,17 +368,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice_1 = {
 	"Choice-1",
 	"Choice-1",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -506,17 +461,8 @@
 asn_TYPE_descriptor_t asn_DEF_Test_structure_2 = {
 	"Test-structure-2",
 	"Test-structure-2",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Test_structure_2_tags_1,
 	sizeof(asn_DEF_Test_structure_2_tags_1)
 		/sizeof(asn_DEF_Test_structure_2_tags_1[0]), /* 1 */
@@ -610,17 +556,8 @@
 asn_TYPE_descriptor_t asn_DEF_Test_structure_3 = {
 	"Test-structure-3",
 	"Test-structure-3",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Test_structure_3_tags_1,
 	sizeof(asn_DEF_Test_structure_3_tags_1)
 		/sizeof(asn_DEF_Test_structure_3_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P b/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P
index ab8d27a..eb408fb 100644
--- a/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/44-choice-in-sequence-OK.asn1.-P
@@ -112,17 +112,8 @@
 asn_TYPE_descriptor_t asn_DEF_e_6 = {
 	"e",
 	"e",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -176,17 +167,8 @@
 asn_TYPE_descriptor_t asn_DEF_h_9 = {
 	"h",
 	"h",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -265,17 +247,8 @@
 asn_TYPE_descriptor_t asn_DEF_b_3 = {
 	"b",
 	"b",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -335,17 +308,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]) - 1, /* 1 */
diff --git a/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR b/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR
index f0fc1ea..ff3e78f 100644
--- a/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR
+++ b/tests/tests-asn1c-compiler/46-redefine-OK.asn1.-PR
@@ -33,17 +33,8 @@
 asn_TYPE_descriptor_t asn_DEF_PrimitiveType = {
 	"PrimitiveType",
 	"PrimitiveType",
-	OCTET_STRING_free,
-	OCTET_STRING_print,
-	OCTET_STRING_compare,
+	&asn_OP_OCTET_STRING,
 	OCTET_STRING_constraint,
-	OCTET_STRING_decode_ber,
-	OCTET_STRING_encode_der,
-	OCTET_STRING_decode_xer,
-	OCTET_STRING_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 */
 	asn_DEF_PrimitiveType_tags_1,
 	sizeof(asn_DEF_PrimitiveType_tags_1)
 		/sizeof(asn_DEF_PrimitiveType_tags_1[0]), /* 1 */
@@ -110,17 +101,8 @@
 asn_TYPE_descriptor_t asn_DEF_ConstructedType = {
 	"ConstructedType",
 	"ConstructedType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ConstructedType_tags_1,
 	sizeof(asn_DEF_ConstructedType_tags_1)
 		/sizeof(asn_DEF_ConstructedType_tags_1[0]), /* 1 */
@@ -170,17 +152,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]) - 1, /* 1 */
diff --git a/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types
index 1a8e997..5d8efd3 100644
--- a/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/47-set-ext-OK.asn1.-Pfwide-types
@@ -74,17 +74,8 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_T1_tags_1,
 	sizeof(asn_DEF_T1_tags_1)
 		/sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
@@ -174,17 +165,8 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_T2_tags_1,
 	sizeof(asn_DEF_T2_tags_1)
 		/sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
@@ -264,17 +246,8 @@
 asn_TYPE_descriptor_t asn_DEF_T3 = {
 	"T3",
 	"T3",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -352,17 +325,8 @@
 asn_TYPE_descriptor_t asn_DEF_T4 = {
 	"T4",
 	"T4",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
index 7ff414d..f18a21b 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pfwide-types
@@ -33,17 +33,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int1 = {
 	"Int1",
 	"Int1",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_Int1_tags_1,
 	sizeof(asn_DEF_Int1_tags_1)
 		/sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
@@ -118,17 +109,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int2 = {
 	"Int2",
 	"Int2",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	Int2_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_Int2_tags_1,
 	sizeof(asn_DEF_Int2_tags_1)
 		/sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
@@ -207,17 +189,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int3 = {
 	"Int3",
 	"Int3",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	Int3_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_Int3_tags_1,
 	sizeof(asn_DEF_Int3_tags_1)
 		/sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
@@ -296,17 +269,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int4 = {
 	"Int4",
 	"Int4",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	Int4_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_Int4_tags_1,
 	sizeof(asn_DEF_Int4_tags_1)
 		/sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
@@ -385,17 +349,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int5 = {
 	"Int5",
 	"Int5",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	Int5_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_Int5_tags_1,
 	sizeof(asn_DEF_Int5_tags_1)
 		/sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
@@ -474,17 +429,8 @@
 asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions = {
 	"ExtensibleExtensions",
 	"ExtensibleExtensions",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	ExtensibleExtensions_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_ExtensibleExtensions_tags_1,
 	sizeof(asn_DEF_ExtensibleExtensions_tags_1)
 		/sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
@@ -532,17 +478,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str1 = {
 	"Str1",
 	"Str1",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	IA5String_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Str1_tags_1,
 	sizeof(asn_DEF_Str1_tags_1)
 		/sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
@@ -633,17 +570,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str2 = {
 	"Str2",
 	"Str2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Str2_tags_1,
 	sizeof(asn_DEF_Str2_tags_1)
 		/sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
@@ -745,17 +673,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str3 = {
 	"Str3",
 	"Str3",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str3_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Str3_tags_1,
 	sizeof(asn_DEF_Str3_tags_1)
 		/sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
@@ -843,17 +762,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str4 = {
 	"Str4",
 	"Str4",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str4_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Str4_tags_1,
 	sizeof(asn_DEF_Str4_tags_1)
 		/sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
@@ -941,17 +851,8 @@
 asn_TYPE_descriptor_t asn_DEF_PER_Visible = {
 	"PER-Visible",
 	"PER-Visible",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	PER_Visible_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_PER_Visible_tags_1,
 	sizeof(asn_DEF_PER_Visible_tags_1)
 		/sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
@@ -1039,17 +940,8 @@
 asn_TYPE_descriptor_t asn_DEF_PER_Visible_2 = {
 	"PER-Visible-2",
 	"PER-Visible-2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	PER_Visible_2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_PER_Visible_2_tags_1,
 	sizeof(asn_DEF_PER_Visible_2_tags_1)
 		/sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
@@ -1137,17 +1029,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1 = {
 	"Not-PER-Visible-1",
 	"Not-PER-Visible-1",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_1_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Not_PER_Visible_1_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
@@ -1235,17 +1118,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2 = {
 	"Not-PER-Visible-2",
 	"Not-PER-Visible-2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Not_PER_Visible_2_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
@@ -1333,17 +1207,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3 = {
 	"Not-PER-Visible-3",
 	"Not-PER-Visible-3",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_3_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Not_PER_Visible_3_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
@@ -1434,17 +1299,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM = {
 	"SIZE-but-not-FROM",
 	"SIZE-but-not-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	SIZE_but_not_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_SIZE_but_not_FROM_tags_1,
 	sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
 		/sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
@@ -1535,17 +1391,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM = {
 	"SIZE-and-FROM",
 	"SIZE-and-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	SIZE_and_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_SIZE_and_FROM_tags_1,
 	sizeof(asn_DEF_SIZE_and_FROM_tags_1)
 		/sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
@@ -1633,17 +1480,8 @@
 asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM = {
 	"Neither-SIZE-nor-FROM",
 	"Neither-SIZE-nor-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Neither_SIZE_nor_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_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 */
 	asn_DEF_Neither_SIZE_nor_FROM_tags_1,
 	sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
 		/sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
@@ -1725,17 +1563,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_4 = {
 	"Utf8-4",
 	"Utf8-4",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_4_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_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 */
 	asn_DEF_Utf8_4_tags_1,
 	sizeof(asn_DEF_Utf8_4_tags_1)
 		/sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
@@ -1845,17 +1674,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_3 = {
 	"Utf8-3",
 	"Utf8-3",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_3_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_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 */
 	asn_DEF_Utf8_3_tags_1,
 	sizeof(asn_DEF_Utf8_3_tags_1)
 		/sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
@@ -1935,17 +1755,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_2 = {
 	"Utf8-2",
 	"Utf8-2",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_2_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_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 */
 	asn_DEF_Utf8_2_tags_1,
 	sizeof(asn_DEF_Utf8_2_tags_1)
 		/sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
@@ -1993,17 +1804,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_1 = {
 	"Utf8-1",
 	"Utf8-1",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	UTF8String_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_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 */
 	asn_DEF_Utf8_1_tags_1,
 	sizeof(asn_DEF_Utf8_1_tags_1)
 		/sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
@@ -2106,17 +1908,8 @@
 asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier = {
 	"VisibleIdentifier",
 	"VisibleIdentifier",
-	VisibleString_free,
-	VisibleString_print,
-	VisibleString_compare,
+	&asn_OP_VisibleString,
 	VisibleIdentifier_constraint,
-	VisibleString_decode_ber,
-	VisibleString_encode_der,
-	VisibleString_decode_xer,
-	VisibleString_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 */
 	asn_DEF_VisibleIdentifier_tags_1,
 	sizeof(asn_DEF_VisibleIdentifier_tags_1)
 		/sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
@@ -2345,17 +2138,8 @@
 asn_TYPE_descriptor_t asn_DEF_enum_c_6 = {
 	"enum-c",
 	"enum-c",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_enum_c_tags_6,
 	sizeof(asn_DEF_enum_c_tags_6)
 		/sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
@@ -2471,17 +2255,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -2548,17 +2323,8 @@
 asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
 	"SequenceOf",
 	"SequenceOf",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_SequenceOf_tags_1,
 	sizeof(asn_DEF_SequenceOf_tags_1)
 		/sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
@@ -2631,17 +2397,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum0 = {
 	"Enum0",
 	"Enum0",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Enum0_tags_1,
 	sizeof(asn_DEF_Enum0_tags_1)
 		/sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
@@ -2738,17 +2495,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum1 = {
 	"Enum1",
 	"Enum1",
-	NativeEnumerated_free,
-	NativeEnumerated_print,
-	NativeEnumerated_compare,
+	&asn_OP_NativeEnumerated,
 	Enum1_constraint,
-	NativeEnumerated_decode_ber,
-	NativeEnumerated_encode_der,
-	NativeEnumerated_decode_xer,
-	NativeEnumerated_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 */
 	asn_DEF_Enum1_tags_1,
 	sizeof(asn_DEF_Enum1_tags_1)
 		/sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
@@ -2851,17 +2599,8 @@
 asn_TYPE_descriptor_t asn_DEF_Identifier = {
 	"Identifier",
 	"Identifier",
-	VisibleString_free,
-	VisibleString_print,
-	VisibleString_compare,
+	&asn_OP_VisibleString,
 	Identifier_constraint,
-	VisibleString_decode_ber,
-	VisibleString_encode_der,
-	VisibleString_decode_xer,
-	VisibleString_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 */
 	asn_DEF_Identifier_tags_1,
 	sizeof(asn_DEF_Identifier_tags_1)
 		/sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
index a732d0e..924cad8 100644
--- a/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/50-constraint-OK.asn1.-Pgen-PER
@@ -35,18 +35,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int1 = {
 	"Int1",
 	"Int1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int1_tags_1,
 	sizeof(asn_DEF_Int1_tags_1)
 		/sizeof(asn_DEF_Int1_tags_1[0]), /* 1 */
@@ -130,18 +120,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int2 = {
 	"Int2",
 	"Int2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	Int2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int2_tags_1,
 	sizeof(asn_DEF_Int2_tags_1)
 		/sizeof(asn_DEF_Int2_tags_1[0]), /* 1 */
@@ -225,18 +205,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int3 = {
 	"Int3",
 	"Int3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	Int3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int3_tags_1,
 	sizeof(asn_DEF_Int3_tags_1)
 		/sizeof(asn_DEF_Int3_tags_1[0]), /* 1 */
@@ -320,18 +290,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int4 = {
 	"Int4",
 	"Int4",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	Int4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int4_tags_1,
 	sizeof(asn_DEF_Int4_tags_1)
 		/sizeof(asn_DEF_Int4_tags_1[0]), /* 1 */
@@ -415,18 +375,8 @@
 asn_TYPE_descriptor_t asn_DEF_Int5 = {
 	"Int5",
 	"Int5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	Int5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Int5_tags_1,
 	sizeof(asn_DEF_Int5_tags_1)
 		/sizeof(asn_DEF_Int5_tags_1[0]), /* 1 */
@@ -509,18 +459,8 @@
 asn_TYPE_descriptor_t asn_DEF_ExtensibleExtensions = {
 	"ExtensibleExtensions",
 	"ExtensibleExtensions",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	ExtensibleExtensions_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_ExtensibleExtensions_tags_1,
 	sizeof(asn_DEF_ExtensibleExtensions_tags_1)
 		/sizeof(asn_DEF_ExtensibleExtensions_tags_1[0]), /* 1 */
@@ -570,18 +510,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str1 = {
 	"Str1",
 	"Str1",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	IA5String_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str1_tags_1,
 	sizeof(asn_DEF_Str1_tags_1)
 		/sizeof(asn_DEF_Str1_tags_1[0]), /* 1 */
@@ -683,18 +613,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str2 = {
 	"Str2",
 	"Str2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str2_tags_1,
 	sizeof(asn_DEF_Str2_tags_1)
 		/sizeof(asn_DEF_Str2_tags_1[0]), /* 1 */
@@ -820,18 +740,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str3 = {
 	"Str3",
 	"Str3",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str3_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str3_tags_1,
 	sizeof(asn_DEF_Str3_tags_1)
 		/sizeof(asn_DEF_Str3_tags_1[0]), /* 1 */
@@ -929,18 +839,8 @@
 asn_TYPE_descriptor_t asn_DEF_Str4 = {
 	"Str4",
 	"Str4",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Str4_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Str4_tags_1,
 	sizeof(asn_DEF_Str4_tags_1)
 		/sizeof(asn_DEF_Str4_tags_1[0]), /* 1 */
@@ -1039,18 +939,8 @@
 asn_TYPE_descriptor_t asn_DEF_PER_Visible = {
 	"PER-Visible",
 	"PER-Visible",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	PER_Visible_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_tags_1,
 	sizeof(asn_DEF_PER_Visible_tags_1)
 		/sizeof(asn_DEF_PER_Visible_tags_1[0]), /* 1 */
@@ -1148,18 +1038,8 @@
 asn_TYPE_descriptor_t asn_DEF_PER_Visible_2 = {
 	"PER-Visible-2",
 	"PER-Visible-2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	PER_Visible_2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_PER_Visible_2_tags_1,
 	sizeof(asn_DEF_PER_Visible_2_tags_1)
 		/sizeof(asn_DEF_PER_Visible_2_tags_1[0]), /* 1 */
@@ -1257,18 +1137,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_1 = {
 	"Not-PER-Visible-1",
 	"Not-PER-Visible-1",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_1_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_1_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_1_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_1_tags_1[0]), /* 1 */
@@ -1366,18 +1236,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_2 = {
 	"Not-PER-Visible-2",
 	"Not-PER-Visible-2",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_2_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_2_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_2_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_2_tags_1[0]), /* 1 */
@@ -1475,18 +1335,8 @@
 asn_TYPE_descriptor_t asn_DEF_Not_PER_Visible_3 = {
 	"Not-PER-Visible-3",
 	"Not-PER-Visible-3",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Not_PER_Visible_3_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Not_PER_Visible_3_tags_1,
 	sizeof(asn_DEF_Not_PER_Visible_3_tags_1)
 		/sizeof(asn_DEF_Not_PER_Visible_3_tags_1[0]), /* 1 */
@@ -1587,18 +1437,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIZE_but_not_FROM = {
 	"SIZE-but-not-FROM",
 	"SIZE-but-not-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	SIZE_but_not_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_but_not_FROM_tags_1,
 	sizeof(asn_DEF_SIZE_but_not_FROM_tags_1)
 		/sizeof(asn_DEF_SIZE_but_not_FROM_tags_1[0]), /* 1 */
@@ -1699,18 +1539,8 @@
 asn_TYPE_descriptor_t asn_DEF_SIZE_and_FROM = {
 	"SIZE-and-FROM",
 	"SIZE-and-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	SIZE_and_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SIZE_and_FROM_tags_1,
 	sizeof(asn_DEF_SIZE_and_FROM_tags_1)
 		/sizeof(asn_DEF_SIZE_and_FROM_tags_1[0]), /* 1 */
@@ -1808,18 +1638,8 @@
 asn_TYPE_descriptor_t asn_DEF_Neither_SIZE_nor_FROM = {
 	"Neither-SIZE-nor-FROM",
 	"Neither-SIZE-nor-FROM",
-	IA5String_free,
-	IA5String_print,
-	IA5String_compare,
+	&asn_OP_IA5String,
 	Neither_SIZE_nor_FROM_constraint,
-	IA5String_decode_ber,
-	IA5String_encode_der,
-	IA5String_decode_xer,
-	IA5String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	IA5String_decode_uper,
-	IA5String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Neither_SIZE_nor_FROM_tags_1,
 	sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1)
 		/sizeof(asn_DEF_Neither_SIZE_nor_FROM_tags_1[0]), /* 1 */
@@ -1911,18 +1731,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_4 = {
 	"Utf8-4",
 	"Utf8-4",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_4_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	UTF8String_decode_uper,
-	UTF8String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_4_tags_1,
 	sizeof(asn_DEF_Utf8_4_tags_1)
 		/sizeof(asn_DEF_Utf8_4_tags_1[0]), /* 1 */
@@ -2042,18 +1852,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_3 = {
 	"Utf8-3",
 	"Utf8-3",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_3_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	UTF8String_decode_uper,
-	UTF8String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_3_tags_1,
 	sizeof(asn_DEF_Utf8_3_tags_1)
 		/sizeof(asn_DEF_Utf8_3_tags_1[0]), /* 1 */
@@ -2144,18 +1944,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_2 = {
 	"Utf8-2",
 	"Utf8-2",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	Utf8_2_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	UTF8String_decode_uper,
-	UTF8String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_2_tags_1,
 	sizeof(asn_DEF_Utf8_2_tags_1)
 		/sizeof(asn_DEF_Utf8_2_tags_1[0]), /* 1 */
@@ -2205,18 +1995,8 @@
 asn_TYPE_descriptor_t asn_DEF_Utf8_1 = {
 	"Utf8-1",
 	"Utf8-1",
-	UTF8String_free,
-	UTF8String_print,
-	UTF8String_compare,
+	&asn_OP_UTF8String,
 	UTF8String_constraint,
-	UTF8String_decode_ber,
-	UTF8String_encode_der,
-	UTF8String_decode_xer,
-	UTF8String_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	UTF8String_decode_uper,
-	UTF8String_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Utf8_1_tags_1,
 	sizeof(asn_DEF_Utf8_1_tags_1)
 		/sizeof(asn_DEF_Utf8_1_tags_1[0]), /* 1 */
@@ -2328,18 +2108,8 @@
 asn_TYPE_descriptor_t asn_DEF_VisibleIdentifier = {
 	"VisibleIdentifier",
 	"VisibleIdentifier",
-	VisibleString_free,
-	VisibleString_print,
-	VisibleString_compare,
+	&asn_OP_VisibleString,
 	VisibleIdentifier_constraint,
-	VisibleString_decode_ber,
-	VisibleString_encode_der,
-	VisibleString_decode_xer,
-	VisibleString_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	VisibleString_decode_uper,
-	VisibleString_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_VisibleIdentifier_tags_1,
 	sizeof(asn_DEF_VisibleIdentifier_tags_1)
 		/sizeof(asn_DEF_VisibleIdentifier_tags_1[0]), /* 1 */
@@ -2571,18 +2341,8 @@
 asn_TYPE_descriptor_t asn_DEF_enum_c_6 = {
 	"enum-c",
 	"enum-c",
-	NativeEnumerated_free,
-	NativeEnumerated_print,
-	NativeEnumerated_compare,
+	&asn_OP_NativeEnumerated,
 	NativeEnumerated_constraint,
-	NativeEnumerated_decode_ber,
-	NativeEnumerated_encode_der,
-	NativeEnumerated_decode_xer,
-	NativeEnumerated_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeEnumerated_decode_uper,
-	NativeEnumerated_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_enum_c_tags_6,
 	sizeof(asn_DEF_enum_c_tags_6)
 		/sizeof(asn_DEF_enum_c_tags_6[0]), /* 1 */
@@ -2700,18 +2460,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	SEQUENCE_constraint,
-	SEQUENCE_decode_ber,
-	SEQUENCE_encode_der,
-	SEQUENCE_decode_xer,
-	SEQUENCE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_decode_uper,
-	SEQUENCE_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -2786,18 +2536,8 @@
 asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
 	"SequenceOf",
 	"SequenceOf",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	SEQUENCE_OF_decode_uper,
-	SEQUENCE_OF_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_SequenceOf_tags_1,
 	sizeof(asn_DEF_SequenceOf_tags_1)
 		/sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
@@ -2880,18 +2620,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum0 = {
 	"Enum0",
 	"Enum0",
-	NativeEnumerated_free,
-	NativeEnumerated_print,
-	NativeEnumerated_compare,
+	&asn_OP_NativeEnumerated,
 	NativeEnumerated_constraint,
-	NativeEnumerated_decode_ber,
-	NativeEnumerated_encode_der,
-	NativeEnumerated_decode_xer,
-	NativeEnumerated_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeEnumerated_decode_uper,
-	NativeEnumerated_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Enum0_tags_1,
 	sizeof(asn_DEF_Enum0_tags_1)
 		/sizeof(asn_DEF_Enum0_tags_1[0]), /* 1 */
@@ -2998,18 +2728,8 @@
 asn_TYPE_descriptor_t asn_DEF_Enum1 = {
 	"Enum1",
 	"Enum1",
-	NativeEnumerated_free,
-	NativeEnumerated_print,
-	NativeEnumerated_compare,
+	&asn_OP_NativeEnumerated,
 	Enum1_constraint,
-	NativeEnumerated_decode_ber,
-	NativeEnumerated_encode_der,
-	NativeEnumerated_decode_xer,
-	NativeEnumerated_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeEnumerated_decode_uper,
-	NativeEnumerated_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Enum1_tags_1,
 	sizeof(asn_DEF_Enum1_tags_1)
 		/sizeof(asn_DEF_Enum1_tags_1[0]), /* 1 */
@@ -3141,18 +2861,8 @@
 asn_TYPE_descriptor_t asn_DEF_Identifier = {
 	"Identifier",
 	"Identifier",
-	VisibleString_free,
-	VisibleString_print,
-	VisibleString_compare,
+	&asn_OP_VisibleString,
 	Identifier_constraint,
-	VisibleString_decode_ber,
-	VisibleString_encode_der,
-	VisibleString_decode_xer,
-	VisibleString_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	VisibleString_decode_uper,
-	VisibleString_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_Identifier_tags_1,
 	sizeof(asn_DEF_Identifier_tags_1)
 		/sizeof(asn_DEF_Identifier_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types
index d1667aa..a7c68b6 100644
--- a/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/59-choice-extended-OK.asn1.-Pfwide-types
@@ -104,17 +104,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice = {
 	"Choice",
 	"Choice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	asn_DEF_Choice_tags_1,
 	sizeof(asn_DEF_Choice_tags_1)
 		/sizeof(asn_DEF_Choice_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types
index 1f882e2..4603380 100644
--- a/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/60-any-OK.asn1.-Pfwide-types
@@ -63,17 +63,8 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T1_tags_1,
 	sizeof(asn_DEF_T1_tags_1)
 		/sizeof(asn_DEF_T1_tags_1[0]), /* 1 */
@@ -153,17 +144,8 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T2_tags_1,
 	sizeof(asn_DEF_T2_tags_1)
 		/sizeof(asn_DEF_T2_tags_1[0]), /* 1 */
@@ -238,17 +220,8 @@
 asn_TYPE_descriptor_t asn_DEF_T3 = {
 	"T3",
 	"T3",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T3_tags_1,
 	sizeof(asn_DEF_T3_tags_1)
 		/sizeof(asn_DEF_T3_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types
index a4158fc..8d87556 100644
--- a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types
+++ b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfnative-types
@@ -44,17 +44,8 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T1_tags_1,
 	sizeof(asn_DEF_T1_tags_1)
 		/sizeof(asn_DEF_T1_tags_1[0]), /* 4 */
@@ -111,17 +102,8 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T2_tags_1,
 	sizeof(asn_DEF_T2_tags_1)
 		/sizeof(asn_DEF_T2_tags_1[0]), /* 3 */
@@ -176,17 +158,8 @@
 asn_TYPE_descriptor_t asn_DEF_T3 = {
 	"T3",
 	"T3",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T3_tags_1,
 	sizeof(asn_DEF_T3_tags_1)
 		/sizeof(asn_DEF_T3_tags_1[0]), /* 2 */
@@ -236,17 +209,8 @@
 asn_TYPE_descriptor_t asn_DEF_T4 = {
 	"T4",
 	"T4",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T4_tags_1,
 	sizeof(asn_DEF_T4_tags_1)
 		/sizeof(asn_DEF_T4_tags_1[0]) - 1, /* 2 */
@@ -295,17 +259,8 @@
 asn_TYPE_descriptor_t asn_DEF_T5 = {
 	"T5",
 	"T5",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T5_tags_1,
 	sizeof(asn_DEF_T5_tags_1)
 		/sizeof(asn_DEF_T5_tags_1[0]) - 1, /* 1 */
@@ -353,17 +308,8 @@
 asn_TYPE_descriptor_t asn_DEF_T6 = {
 	"T6",
 	"T6",
-	NativeReal_free,
-	NativeReal_print,
-	NativeReal_compare,
+	&asn_OP_NativeReal,
 	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 */
 	asn_DEF_T6_tags_1,
 	sizeof(asn_DEF_T6_tags_1)
 		/sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
@@ -413,17 +359,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]) - 2, /* 1 */
@@ -519,17 +456,8 @@
 asn_TYPE_descriptor_t asn_DEF_Ts = {
 	"Ts",
 	"Ts",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Ts_tags_1,
 	sizeof(asn_DEF_Ts_tags_1)
 		/sizeof(asn_DEF_Ts_tags_1[0]) - 1, /* 1 */
diff --git a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types
index bcc9f3a..0bf1478 100644
--- a/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/65-multi-tag-OK.asn1.-Pfwide-types
@@ -44,17 +44,8 @@
 asn_TYPE_descriptor_t asn_DEF_T1 = {
 	"T1",
 	"T1",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T1_tags_1,
 	sizeof(asn_DEF_T1_tags_1)
 		/sizeof(asn_DEF_T1_tags_1[0]), /* 4 */
@@ -111,17 +102,8 @@
 asn_TYPE_descriptor_t asn_DEF_T2 = {
 	"T2",
 	"T2",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T2_tags_1,
 	sizeof(asn_DEF_T2_tags_1)
 		/sizeof(asn_DEF_T2_tags_1[0]), /* 3 */
@@ -176,17 +158,8 @@
 asn_TYPE_descriptor_t asn_DEF_T3 = {
 	"T3",
 	"T3",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T3_tags_1,
 	sizeof(asn_DEF_T3_tags_1)
 		/sizeof(asn_DEF_T3_tags_1[0]), /* 2 */
@@ -236,17 +209,8 @@
 asn_TYPE_descriptor_t asn_DEF_T4 = {
 	"T4",
 	"T4",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T4_tags_1,
 	sizeof(asn_DEF_T4_tags_1)
 		/sizeof(asn_DEF_T4_tags_1[0]) - 1, /* 2 */
@@ -295,17 +259,8 @@
 asn_TYPE_descriptor_t asn_DEF_T5 = {
 	"T5",
 	"T5",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T5_tags_1,
 	sizeof(asn_DEF_T5_tags_1)
 		/sizeof(asn_DEF_T5_tags_1[0]) - 1, /* 1 */
@@ -353,17 +308,8 @@
 asn_TYPE_descriptor_t asn_DEF_T6 = {
 	"T6",
 	"T6",
-	REAL_free,
-	REAL_print,
-	REAL_compare,
+	&asn_OP_REAL,
 	REAL_constraint,
-	REAL_decode_ber,
-	REAL_encode_der,
-	REAL_decode_xer,
-	REAL_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 */
 	asn_DEF_T6_tags_1,
 	sizeof(asn_DEF_T6_tags_1)
 		/sizeof(asn_DEF_T6_tags_1[0]), /* 1 */
@@ -413,17 +359,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]) - 2, /* 1 */
@@ -519,17 +456,8 @@
 asn_TYPE_descriptor_t asn_DEF_Ts = {
 	"Ts",
 	"Ts",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Ts_tags_1,
 	sizeof(asn_DEF_Ts_tags_1)
 		/sizeof(asn_DEF_Ts_tags_1[0]) - 1, /* 1 */
diff --git a/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types
index f41ca72..736d954 100644
--- a/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/66-ref-simple-OK.asn1.-Pfwide-types
@@ -44,17 +44,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
@@ -131,17 +122,8 @@
 asn_TYPE_descriptor_t asn_DEF_SimpleType = {
 	"SimpleType",
 	"SimpleType",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_SimpleType_tags_1,
 	sizeof(asn_DEF_SimpleType_tags_1)
 		/sizeof(asn_DEF_SimpleType_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types
index 2fd988c..7faf964 100644
--- a/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/69-reserved-words-OK.asn1.-Pfwide-types
@@ -97,17 +97,8 @@
 asn_TYPE_descriptor_t asn_DEF_class_4 = {
 	"class",
 	"class",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_class_tags_4,
 	sizeof(asn_DEF_class_tags_4)
 		/sizeof(asn_DEF_class_tags_4[0]), /* 1 */
@@ -187,17 +178,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types
index db026ff..0bda67c 100644
--- a/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/70-xer-test-OK.asn1.-Pfwide-types
@@ -274,17 +274,8 @@
 asn_TYPE_descriptor_t asn_DEF_PDU = {
 	"PDU",
 	"PDU",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -399,17 +390,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -511,17 +493,8 @@
 asn_TYPE_descriptor_t asn_DEF_Set = {
 	"Set",
 	"Set",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Set_tags_1,
 	sizeof(asn_DEF_Set_tags_1)
 		/sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
@@ -616,17 +589,8 @@
 asn_TYPE_descriptor_t asn_DEF_enum_4 = {
 	"enum",
 	"enum",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_enum_tags_4,
 	sizeof(asn_DEF_enum_tags_4)
 		/sizeof(asn_DEF_enum_tags_4[0]) - 1, /* 1 */
@@ -687,17 +651,8 @@
 asn_TYPE_descriptor_t asn_DEF_ExtensibleSet = {
 	"ExtensibleSet",
 	"ExtensibleSet",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_ExtensibleSet_tags_1,
 	sizeof(asn_DEF_ExtensibleSet_tags_1)
 		/sizeof(asn_DEF_ExtensibleSet_tags_1[0]), /* 1 */
@@ -797,17 +752,8 @@
 asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence = {
 	"ExtensibleSequence",
 	"ExtensibleSequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ExtensibleSequence_tags_1,
 	sizeof(asn_DEF_ExtensibleSequence_tags_1)
 		/sizeof(asn_DEF_ExtensibleSequence_tags_1[0]), /* 1 */
@@ -893,17 +839,8 @@
 asn_TYPE_descriptor_t asn_DEF_ExtensibleSequence2 = {
 	"ExtensibleSequence2",
 	"ExtensibleSequence2",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_ExtensibleSequence2_tags_1,
 	sizeof(asn_DEF_ExtensibleSequence2_tags_1)
 		/sizeof(asn_DEF_ExtensibleSequence2_tags_1[0]), /* 1 */
@@ -965,17 +902,8 @@
 asn_TYPE_descriptor_t asn_DEF_SetOfNULL = {
 	"SetOfNULL",
 	"SetOfNULL",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_SetOfNULL_tags_1,
 	sizeof(asn_DEF_SetOfNULL_tags_1)
 		/sizeof(asn_DEF_SetOfNULL_tags_1[0]), /* 1 */
@@ -1037,17 +965,8 @@
 asn_TYPE_descriptor_t asn_DEF_SetOfREAL = {
 	"SetOfREAL",
 	"SetOfREAL",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_SetOfREAL_tags_1,
 	sizeof(asn_DEF_SetOfREAL_tags_1)
 		/sizeof(asn_DEF_SetOfREAL_tags_1[0]), /* 1 */
@@ -1124,17 +1043,8 @@
 asn_TYPE_descriptor_t asn_DEF_Member_2 = {
 	"ENUMERATED",
 	"ENUMERATED",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_Member_tags_2,
 	sizeof(asn_DEF_Member_tags_2)
 		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
@@ -1171,17 +1081,8 @@
 asn_TYPE_descriptor_t asn_DEF_SetOfEnums = {
 	"SetOfEnums",
 	"SetOfEnums",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_SetOfEnums_tags_1,
 	sizeof(asn_DEF_SetOfEnums_tags_1)
 		/sizeof(asn_DEF_SetOfEnums_tags_1[0]), /* 1 */
@@ -1243,17 +1144,8 @@
 asn_TYPE_descriptor_t asn_DEF_NamedSetOfNULL = {
 	"NamedSetOfNULL",
 	"NamedSetOfNULL",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_NamedSetOfNULL_tags_1,
 	sizeof(asn_DEF_NamedSetOfNULL_tags_1)
 		/sizeof(asn_DEF_NamedSetOfNULL_tags_1[0]), /* 1 */
@@ -1315,17 +1207,8 @@
 asn_TYPE_descriptor_t asn_DEF_NamedSetOfREAL = {
 	"NamedSetOfREAL",
 	"NamedSetOfREAL",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_NamedSetOfREAL_tags_1,
 	sizeof(asn_DEF_NamedSetOfREAL_tags_1)
 		/sizeof(asn_DEF_NamedSetOfREAL_tags_1[0]), /* 1 */
@@ -1402,17 +1285,8 @@
 asn_TYPE_descriptor_t asn_DEF_name_2 = {
 	"ENUMERATED",
 	"ENUMERATED",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_name_tags_2,
 	sizeof(asn_DEF_name_tags_2)
 		/sizeof(asn_DEF_name_tags_2[0]), /* 1 */
@@ -1449,17 +1323,8 @@
 asn_TYPE_descriptor_t asn_DEF_NamedSetOfEnums = {
 	"NamedSetOfEnums",
 	"NamedSetOfEnums",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_NamedSetOfEnums_tags_1,
 	sizeof(asn_DEF_NamedSetOfEnums_tags_1)
 		/sizeof(asn_DEF_NamedSetOfEnums_tags_1[0]), /* 1 */
@@ -1521,17 +1386,8 @@
 asn_TYPE_descriptor_t asn_DEF_SequenceOf = {
 	"SequenceOf",
 	"SequenceOf",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_SequenceOf_tags_1,
 	sizeof(asn_DEF_SequenceOf_tags_1)
 		/sizeof(asn_DEF_SequenceOf_tags_1[0]), /* 1 */
@@ -1593,17 +1449,8 @@
 asn_TYPE_descriptor_t asn_DEF_SeqOfZuka = {
 	"SeqOfZuka",
 	"SeqOfZuka",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_SeqOfZuka_tags_1,
 	sizeof(asn_DEF_SeqOfZuka_tags_1)
 		/sizeof(asn_DEF_SeqOfZuka_tags_1[0]), /* 1 */
@@ -1672,17 +1519,8 @@
 asn_TYPE_descriptor_t asn_DEF_SetOfChoice = {
 	"SetOfChoice",
 	"SetOfChoice",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_SetOfChoice_tags_1,
 	sizeof(asn_DEF_SetOfChoice_tags_1)
 		/sizeof(asn_DEF_SetOfChoice_tags_1[0]), /* 1 */
@@ -1751,17 +1589,8 @@
 asn_TYPE_descriptor_t asn_DEF_NamedSetOfChoice = {
 	"NamedSetOfChoice",
 	"NamedSetOfChoice",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_NamedSetOfChoice_tags_1,
 	sizeof(asn_DEF_NamedSetOfChoice_tags_1)
 		/sizeof(asn_DEF_NamedSetOfChoice_tags_1[0]), /* 1 */
@@ -1852,17 +1681,8 @@
 asn_TYPE_descriptor_t asn_DEF_SimpleChoice = {
 	"SimpleChoice",
 	"SimpleChoice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types
index 468ecfc..138e561 100644
--- a/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/72-same-names-OK.asn1.-Pfwide-types
@@ -77,17 +77,8 @@
 asn_TYPE_descriptor_t asn_DEF_Member_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Member_tags_2,
 	sizeof(asn_DEF_Member_tags_2)
 		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
@@ -125,17 +116,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type = {
 	"Type",
 	"Type",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Type_tags_1,
 	sizeof(asn_DEF_Type_tags_1)
 		/sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
@@ -238,17 +220,8 @@
 asn_TYPE_descriptor_t asn_DEF_another_name_3 = {
 	"another-name",
 	"another-name",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_another_name_tags_3,
 	sizeof(asn_DEF_another_name_tags_3)
 		/sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
@@ -292,17 +265,8 @@
 asn_TYPE_descriptor_t asn_DEF_one_name_2 = {
 	"one-name",
 	"one-name",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -345,17 +309,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type1 = {
 	"Type1",
 	"Type1",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Type1_tags_1,
 	sizeof(asn_DEF_Type1_tags_1)
 		/sizeof(asn_DEF_Type1_tags_1[0]), /* 1 */
@@ -555,17 +510,8 @@
 asn_TYPE_descriptor_t asn_DEF_another_name_3 = {
 	"another-name",
 	"another-name",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_another_name_tags_3,
 	sizeof(asn_DEF_another_name_tags_3)
 		/sizeof(asn_DEF_another_name_tags_3[0]), /* 1 */
@@ -611,17 +557,8 @@
 asn_TYPE_descriptor_t asn_DEF_one_name_2 = {
 	"one-name",
 	"one-name",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_one_name_tags_2,
 	sizeof(asn_DEF_one_name_tags_2)
 		/sizeof(asn_DEF_one_name_tags_2[0]), /* 1 */
@@ -679,17 +616,8 @@
 asn_TYPE_descriptor_t asn_DEF_another_name_8 = {
 	"another-name",
 	"another-name",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_another_name_tags_8,
 	sizeof(asn_DEF_another_name_tags_8)
 		/sizeof(asn_DEF_another_name_tags_8[0]), /* 1 */
@@ -741,17 +669,8 @@
 asn_TYPE_descriptor_t asn_DEF_two_name_7 = {
 	"two-name",
 	"two-name",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_two_name_tags_7,
 	sizeof(asn_DEF_two_name_tags_7)
 		/sizeof(asn_DEF_two_name_tags_7[0]), /* 1 */
@@ -806,17 +725,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type2 = {
 	"Type2",
 	"Type2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types
index 04afb3c..73d0571 100644
--- a/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/73-circular-OK.asn1.-Pfwide-types
@@ -60,17 +60,8 @@
 asn_TYPE_descriptor_t asn_DEF_data_2 = {
 	"data",
 	"data",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_data_tags_2,
 	sizeof(asn_DEF_data_tags_2)
 		/sizeof(asn_DEF_data_tags_2[0]), /* 1 */
@@ -115,17 +106,8 @@
 asn_TYPE_descriptor_t asn_DEF_Type = {
 	"Type",
 	"Type",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Type_tags_1,
 	sizeof(asn_DEF_Type_tags_1)
 		/sizeof(asn_DEF_Type_tags_1[0]), /* 1 */
@@ -174,17 +156,8 @@
 asn_TYPE_descriptor_t asn_DEF_EpytRef = {
 	"EpytRef",
 	"EpytRef",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_EpytRef_tags_1,
 	sizeof(asn_DEF_EpytRef_tags_1)
 		/sizeof(asn_DEF_EpytRef_tags_1[0]), /* 1 */
@@ -264,17 +237,8 @@
 asn_TYPE_descriptor_t asn_DEF_stype_2 = {
 	"stype",
 	"stype",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_stype_tags_2,
 	sizeof(asn_DEF_stype_tags_2)
 		/sizeof(asn_DEF_stype_tags_2[0]), /* 1 */
@@ -343,17 +307,8 @@
 asn_TYPE_descriptor_t asn_DEF_Epyt = {
 	"Epyt",
 	"Epyt",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Epyt_tags_1,
 	sizeof(asn_DEF_Epyt_tags_1)
 		/sizeof(asn_DEF_Epyt_tags_1[0]), /* 1 */
@@ -554,17 +509,8 @@
 asn_TYPE_descriptor_t asn_DEF_senums_4 = {
 	"senums",
 	"senums",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_senums_tags_4,
 	sizeof(asn_DEF_senums_tags_4)
 		/sizeof(asn_DEF_senums_tags_4[0]), /* 1 */
@@ -662,17 +608,8 @@
 asn_TYPE_descriptor_t asn_DEF_Ypet = {
 	"Ypet",
 	"Ypet",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Ypet_tags_1,
 	sizeof(asn_DEF_Ypet_tags_1)
 		/sizeof(asn_DEF_Ypet_tags_1[0]), /* 1 */
@@ -746,17 +683,8 @@
 asn_TYPE_descriptor_t asn_DEF_EnumType = {
 	"EnumType",
 	"EnumType",
-	ENUMERATED_free,
-	ENUMERATED_print,
-	ENUMERATED_compare,
+	&asn_OP_ENUMERATED,
 	ENUMERATED_constraint,
-	ENUMERATED_decode_ber,
-	ENUMERATED_encode_der,
-	ENUMERATED_decode_xer,
-	ENUMERATED_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 */
 	asn_DEF_EnumType_tags_1,
 	sizeof(asn_DEF_EnumType_tags_1)
 		/sizeof(asn_DEF_EnumType_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types
index a3e0184..7ca216b 100644
--- a/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/84-param-tags-OK.asn1.-Pfwide-types
@@ -108,17 +108,8 @@
 asn_TYPE_descriptor_t asn_DEF_TestType_16P0 = {
 	"TestType",
 	"TestType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_TestType_16P0_tags_1,
 	sizeof(asn_DEF_TestType_16P0_tags_1)
 		/sizeof(asn_DEF_TestType_16P0_tags_1[0]), /* 1 */
@@ -181,17 +172,8 @@
 asn_TYPE_descriptor_t asn_DEF_TestType_16P1 = {
 	"TestType",
 	"TestType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_TestType_16P1_tags_3,
 	sizeof(asn_DEF_TestType_16P1_tags_3)
 		/sizeof(asn_DEF_TestType_16P1_tags_3[0]), /* 1 */
@@ -279,17 +261,8 @@
 asn_TYPE_descriptor_t asn_DEF_TestChoice = {
 	"TestChoice",
 	"TestChoice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -418,17 +391,8 @@
 asn_TYPE_descriptor_t asn_DEF_AutoType_34P0 = {
 	"AutoType",
 	"AutoType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_AutoType_34P0_tags_1,
 	sizeof(asn_DEF_AutoType_34P0_tags_1)
 		/sizeof(asn_DEF_AutoType_34P0_tags_1[0]), /* 1 */
@@ -473,17 +437,8 @@
 asn_TYPE_descriptor_t asn_DEF_AutoType_34P1 = {
 	"AutoType",
 	"AutoType",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_AutoType_34P1_tags_3,
 	sizeof(asn_DEF_AutoType_34P1_tags_3)
 		/sizeof(asn_DEF_AutoType_34P1_tags_3[0]), /* 1 */
@@ -571,17 +526,8 @@
 asn_TYPE_descriptor_t asn_DEF_AutoChoice = {
 	"AutoChoice",
 	"AutoChoice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types
index f29777d..e687f89 100644
--- a/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/88-integer-enum-OK.asn1.-Pfwide-types
@@ -40,17 +40,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_T_tags_1,
 	sizeof(asn_DEF_T_tags_1)
 		/sizeof(asn_DEF_T_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names
index 1b6d8b0..648a67c 100644
--- a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names
+++ b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfcompound-names
@@ -62,17 +62,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types
index ea81fe0..b87202d 100644
--- a/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/89-bit-string-enum-OK.asn1.-Pfwide-types
@@ -62,17 +62,8 @@
 asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	"T",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P
index decff2b..7b28052 100644
--- a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-P
@@ -33,17 +33,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
 	"CN-IntegerUnlimited",
 	"CN-IntegerUnlimited",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_CN_IntegerUnlimited_tags_1,
 	sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
 		/sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
@@ -95,8 +86,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -112,17 +102,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
 	"CN-IntegerMinMax",
 	"CN-IntegerMinMax",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerMinMax_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_CN_IntegerMinMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
@@ -195,17 +176,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
 	"CN-IntegerMinLow",
 	"CN-IntegerMinLow",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerMinLow_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_CN_IntegerMinLow_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
@@ -284,17 +256,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
 	"NO-IntegerMinHigh",
 	"NO-IntegerMinHigh",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerMinHigh_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerMinHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
@@ -372,17 +335,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
 	"NO-IntegerLowHigh",
 	"NO-IntegerLowHigh",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerLowHigh_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerLowHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
@@ -455,17 +409,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
 	"CN-IntegerLowMax",
 	"CN-IntegerLowMax",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerLowMax_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_CN_IntegerLowMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
@@ -544,17 +489,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
 	"NO-IntegerHighMax",
 	"NO-IntegerHighMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerHighMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerHighMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
@@ -633,17 +569,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
 	"NO-IntegerLowestMax",
 	"NO-IntegerLowestMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerLowestMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerLowestMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
@@ -721,17 +648,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
 	"NO-IntegerOutRange",
 	"NO-IntegerOutRange",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutRange_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerOutRange_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
@@ -809,17 +727,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
 	"NO-IntegerOutValue",
 	"NO-IntegerOutValue",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutValue_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerOutValue_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
@@ -892,17 +801,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
 	"OK-IntegerInRange1",
 	"OK-IntegerInRange1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange1_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange1_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
@@ -975,17 +875,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
 	"OK-IntegerInRange2",
 	"OK-IntegerInRange2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange2_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
@@ -1058,17 +949,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
 	"OK-IntegerInRange3",
 	"OK-IntegerInRange3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange3_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
@@ -1141,17 +1023,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
 	"OK-IntegerInRange4",
 	"OK-IntegerInRange4",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange4_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
@@ -1224,17 +1097,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
 	"OK-IntegerInRange5",
 	"OK-IntegerInRange5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange5_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
@@ -1303,17 +1167,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
 	"NO-IntegerInRange6",
 	"NO-IntegerInRange6",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerInRange6_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerInRange6_tags_1,
 	sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
 		/sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
@@ -1368,17 +1223,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
 	"CN-IntegerEnumerated1",
 	"CN-IntegerEnumerated1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_CN_IntegerEnumerated1_tags_1,
 	sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
 		/sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
@@ -1433,17 +1279,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
 	"NO-IntegerEnumerated2",
 	"NO-IntegerEnumerated2",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerEnumerated2_tags_1,
 	sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
 		/sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
index a13c18b..85146a2 100644
--- a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pfwide-types
@@ -33,17 +33,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
 	"CN-IntegerUnlimited",
 	"CN-IntegerUnlimited",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_CN_IntegerUnlimited_tags_1,
 	sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
 		/sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
@@ -97,8 +88,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_INTEGER.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -114,17 +104,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
 	"CN-IntegerMinMax",
 	"CN-IntegerMinMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	CN_IntegerMinMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_CN_IntegerMinMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
@@ -203,17 +184,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
 	"CN-IntegerMinLow",
 	"CN-IntegerMinLow",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	CN_IntegerMinLow_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_CN_IntegerMinLow_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
@@ -292,17 +264,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
 	"NO-IntegerMinHigh",
 	"NO-IntegerMinHigh",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerMinHigh_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerMinHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
@@ -380,17 +343,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
 	"NO-IntegerLowHigh",
 	"NO-IntegerLowHigh",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerLowHigh_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerLowHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
@@ -469,17 +423,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
 	"CN-IntegerLowMax",
 	"CN-IntegerLowMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	CN_IntegerLowMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_CN_IntegerLowMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
@@ -558,17 +503,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
 	"NO-IntegerHighMax",
 	"NO-IntegerHighMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerHighMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerHighMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
@@ -647,17 +583,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
 	"NO-IntegerLowestMax",
 	"NO-IntegerLowestMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerLowestMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerLowestMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
@@ -735,17 +662,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
 	"NO-IntegerOutRange",
 	"NO-IntegerOutRange",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutRange_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerOutRange_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
@@ -823,17 +741,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
 	"NO-IntegerOutValue",
 	"NO-IntegerOutValue",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutValue_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerOutValue_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
@@ -906,17 +815,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
 	"OK-IntegerInRange1",
 	"OK-IntegerInRange1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange1_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange1_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
@@ -989,17 +889,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
 	"OK-IntegerInRange2",
 	"OK-IntegerInRange2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange2_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
@@ -1072,17 +963,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
 	"OK-IntegerInRange3",
 	"OK-IntegerInRange3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange3_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
@@ -1155,17 +1037,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
 	"OK-IntegerInRange4",
 	"OK-IntegerInRange4",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_IntegerInRange4_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
@@ -1244,17 +1117,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
 	"OK-IntegerInRange5",
 	"OK-IntegerInRange5",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	OK_IntegerInRange5_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_OK_IntegerInRange5_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
@@ -1323,17 +1187,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
 	"NO-IntegerInRange6",
 	"NO-IntegerInRange6",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerInRange6_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_IntegerInRange6_tags_1,
 	sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
 		/sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
@@ -1388,17 +1243,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
 	"CN-IntegerEnumerated1",
 	"CN-IntegerEnumerated1",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_CN_IntegerEnumerated1_tags_1,
 	sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
 		/sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
@@ -1453,17 +1299,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
 	"NO-IntegerEnumerated2",
 	"NO-IntegerEnumerated2",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_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 */
 	asn_DEF_NO_IntegerEnumerated2_tags_1,
 	sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
 		/sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER
index c1d4927..6810188 100644
--- a/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/90-cond-int-type-OK.asn1.-Pgen-PER
@@ -35,18 +35,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerUnlimited = {
 	"CN-IntegerUnlimited",
 	"CN-IntegerUnlimited",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_CN_IntegerUnlimited_tags_1,
 	sizeof(asn_DEF_CN_IntegerUnlimited_tags_1)
 		/sizeof(asn_DEF_CN_IntegerUnlimited_tags_1[0]), /* 1 */
@@ -100,8 +90,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -125,18 +114,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinMax = {
 	"CN-IntegerMinMax",
 	"CN-IntegerMinMax",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerMinMax_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_CN_IntegerMinMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinMax_tags_1[0]), /* 1 */
@@ -219,18 +198,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerMinLow = {
 	"CN-IntegerMinLow",
 	"CN-IntegerMinLow",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerMinLow_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_CN_IntegerMinLow_tags_1,
 	sizeof(asn_DEF_CN_IntegerMinLow_tags_1)
 		/sizeof(asn_DEF_CN_IntegerMinLow_tags_1[0]), /* 1 */
@@ -319,18 +288,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerMinHigh = {
 	"NO-IntegerMinHigh",
 	"NO-IntegerMinHigh",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerMinHigh_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	INTEGER_decode_uper,
-	INTEGER_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerMinHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerMinHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerMinHigh_tags_1[0]), /* 1 */
@@ -418,18 +377,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowHigh = {
 	"NO-IntegerLowHigh",
 	"NO-IntegerLowHigh",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerLowHigh_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerLowHigh_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowHigh_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowHigh_tags_1[0]), /* 1 */
@@ -512,18 +461,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerLowMax = {
 	"CN-IntegerLowMax",
 	"CN-IntegerLowMax",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	CN_IntegerLowMax_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_CN_IntegerLowMax_tags_1,
 	sizeof(asn_DEF_CN_IntegerLowMax_tags_1)
 		/sizeof(asn_DEF_CN_IntegerLowMax_tags_1[0]), /* 1 */
@@ -612,18 +551,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerHighMax = {
 	"NO-IntegerHighMax",
 	"NO-IntegerHighMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerHighMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	INTEGER_decode_uper,
-	INTEGER_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerHighMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerHighMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerHighMax_tags_1[0]), /* 1 */
@@ -712,18 +641,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerLowestMax = {
 	"NO-IntegerLowestMax",
 	"NO-IntegerLowestMax",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	NO_IntegerLowestMax_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	INTEGER_decode_uper,
-	INTEGER_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerLowestMax_tags_1,
 	sizeof(asn_DEF_NO_IntegerLowestMax_tags_1)
 		/sizeof(asn_DEF_NO_IntegerLowestMax_tags_1[0]), /* 1 */
@@ -811,18 +730,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutRange = {
 	"NO-IntegerOutRange",
 	"NO-IntegerOutRange",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutRange_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerOutRange_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutRange_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutRange_tags_1[0]), /* 1 */
@@ -910,18 +819,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerOutValue = {
 	"NO-IntegerOutValue",
 	"NO-IntegerOutValue",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerOutValue_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerOutValue_tags_1,
 	sizeof(asn_DEF_NO_IntegerOutValue_tags_1)
 		/sizeof(asn_DEF_NO_IntegerOutValue_tags_1[0]), /* 1 */
@@ -1004,18 +903,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange1 = {
 	"OK-IntegerInRange1",
 	"OK-IntegerInRange1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange1_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_OK_IntegerInRange1_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange1_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange1_tags_1[0]), /* 1 */
@@ -1098,18 +987,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange2 = {
 	"OK-IntegerInRange2",
 	"OK-IntegerInRange2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_OK_IntegerInRange2_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange2_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange2_tags_1[0]), /* 1 */
@@ -1192,18 +1071,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange3 = {
 	"OK-IntegerInRange3",
 	"OK-IntegerInRange3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_OK_IntegerInRange3_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange3_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange3_tags_1[0]), /* 1 */
@@ -1286,18 +1155,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange4 = {
 	"OK-IntegerInRange4",
 	"OK-IntegerInRange4",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_OK_IntegerInRange4_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange4_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange4_tags_1[0]), /* 1 */
@@ -1380,18 +1239,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_IntegerInRange5 = {
 	"OK-IntegerInRange5",
 	"OK-IntegerInRange5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_IntegerInRange5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_OK_IntegerInRange5_tags_1,
 	sizeof(asn_DEF_OK_IntegerInRange5_tags_1)
 		/sizeof(asn_DEF_OK_IntegerInRange5_tags_1[0]), /* 1 */
@@ -1470,18 +1319,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerInRange6 = {
 	"NO-IntegerInRange6",
 	"NO-IntegerInRange6",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_IntegerInRange6_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerInRange6_tags_1,
 	sizeof(asn_DEF_NO_IntegerInRange6_tags_1)
 		/sizeof(asn_DEF_NO_IntegerInRange6_tags_1[0]), /* 1 */
@@ -1538,18 +1377,8 @@
 asn_TYPE_descriptor_t asn_DEF_CN_IntegerEnumerated1 = {
 	"CN-IntegerEnumerated1",
 	"CN-IntegerEnumerated1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NativeInteger_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	NativeInteger_decode_uper,
-	NativeInteger_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_CN_IntegerEnumerated1_tags_1,
 	sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1)
 		/sizeof(asn_DEF_CN_IntegerEnumerated1_tags_1[0]), /* 1 */
@@ -1606,18 +1435,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_IntegerEnumerated2 = {
 	"NO-IntegerEnumerated2",
 	"NO-IntegerEnumerated2",
-	INTEGER_free,
-	INTEGER_print,
-	INTEGER_compare,
+	&asn_OP_INTEGER,
 	INTEGER_constraint,
-	INTEGER_decode_ber,
-	INTEGER_encode_der,
-	INTEGER_decode_xer,
-	INTEGER_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	INTEGER_decode_uper,
-	INTEGER_encode_uper,
-	0,	/* Use generic outmost tag fetcher */
 	asn_DEF_NO_IntegerEnumerated2_tags_1,
 	sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1)
 		/sizeof(asn_DEF_NO_IntegerEnumerated2_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE b/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE
index c504ce2..ba327b8 100644
--- a/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE
+++ b/tests/tests-asn1c-compiler/91-cond-int-blessSize-OK.asn1.-Pfbless-SIZE
@@ -37,8 +37,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -54,17 +53,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_Integer1 = {
 	"OK-Integer1",
 	"OK-Integer1",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_Integer1_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_Integer1_tags_1,
 	sizeof(asn_DEF_OK_Integer1_tags_1)
 		/sizeof(asn_DEF_OK_Integer1_tags_1[0]), /* 1 */
@@ -116,8 +106,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -133,17 +122,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_Integer2 = {
 	"OK-Integer2",
 	"OK-Integer2",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_Integer2_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_Integer2_tags_1,
 	sizeof(asn_DEF_OK_Integer2_tags_1)
 		/sizeof(asn_DEF_OK_Integer2_tags_1[0]), /* 1 */
@@ -195,8 +175,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -212,17 +191,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_Integer3 = {
 	"OK-Integer3",
 	"OK-Integer3",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_Integer3_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_Integer3_tags_1,
 	sizeof(asn_DEF_OK_Integer3_tags_1)
 		/sizeof(asn_DEF_OK_Integer3_tags_1[0]), /* 1 */
@@ -274,8 +244,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -291,17 +260,8 @@
 asn_TYPE_descriptor_t asn_DEF_OK_Integer4 = {
 	"OK-Integer4",
 	"OK-Integer4",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	OK_Integer4_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_OK_Integer4_tags_1,
 	sizeof(asn_DEF_OK_Integer4_tags_1)
 		/sizeof(asn_DEF_OK_Integer4_tags_1[0]), /* 1 */
@@ -353,8 +313,7 @@
 	}
 	
 	/* Replace with underlying type checker */
-	td->check_constraints = asn_DEF_NativeInteger.check_constraints;
-	return td->check_constraints(td, sptr, ctfailcb, app_key);
+	return td->op->check_constraints(td, sptr, ctfailcb, app_key);
 }
 
 /*
@@ -370,17 +329,8 @@
 asn_TYPE_descriptor_t asn_DEF_NO_Integer5 = {
 	"NO-Integer5",
 	"NO-Integer5",
-	NativeInteger_free,
-	NativeInteger_print,
-	NativeInteger_compare,
+	&asn_OP_NativeInteger,
 	NO_Integer5_constraint,
-	NativeInteger_decode_ber,
-	NativeInteger_encode_der,
-	NativeInteger_decode_xer,
-	NativeInteger_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 */
 	asn_DEF_NO_Integer5_tags_1,
 	sizeof(asn_DEF_NO_Integer5_tags_1)
 		/sizeof(asn_DEF_NO_Integer5_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice
index 5679887..b4d1ff6 100644
--- a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice
+++ b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfindirect-choice
@@ -187,17 +187,8 @@
 asn_TYPE_descriptor_t asn_DEF_Everything = {
 	"Everything",
 	"Everything",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Everything_tags_1,
 	sizeof(asn_DEF_Everything_tags_1)
 		/sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
@@ -299,17 +290,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice1 = {
 	"Choice1",
 	"Choice1",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -411,17 +393,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice2 = {
 	"Choice2",
 	"Choice2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -525,17 +498,8 @@
 asn_TYPE_descriptor_t asn_DEF_a_2 = {
 	"a",
 	"a",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_a_tags_2,
 	sizeof(asn_DEF_a_tags_2)
 		/sizeof(asn_DEF_a_tags_2[0]) - 1, /* 1 */
@@ -575,17 +539,8 @@
 asn_TYPE_descriptor_t asn_DEF_c_5 = {
 	"c",
 	"c",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_c_tags_5,
 	sizeof(asn_DEF_c_tags_5)
 		/sizeof(asn_DEF_c_tags_5[0]) - 1, /* 1 */
@@ -652,17 +607,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice3 = {
 	"Choice3",
 	"Choice3",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -806,17 +752,8 @@
 asn_TYPE_descriptor_t asn_DEF_Member_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Member_tags_2,
 	sizeof(asn_DEF_Member_tags_2)
 		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
@@ -854,17 +791,8 @@
 asn_TYPE_descriptor_t asn_DEF_Set = {
 	"Set",
 	"Set",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Set_tags_1,
 	sizeof(asn_DEF_Set_tags_1)
 		/sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
@@ -985,17 +913,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -1044,17 +963,8 @@
 asn_TYPE_descriptor_t asn_DEF_TypeRef = {
 	"TypeRef",
 	"TypeRef",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_TypeRef_tags_1,
 	sizeof(asn_DEF_TypeRef_tags_1)
 		/sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
@@ -1137,17 +1047,8 @@
 asn_TYPE_descriptor_t asn_DEF_b_3 = {
 	"b",
 	"b",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_b_tags_3,
 	sizeof(asn_DEF_b_tags_3)
 		/sizeof(asn_DEF_b_tags_3[0]) - 1, /* 1 */
@@ -1204,17 +1105,8 @@
 asn_TYPE_descriptor_t asn_DEF_Alpha = {
 	"Alpha",
 	"Alpha",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Alpha_tags_1,
 	sizeof(asn_DEF_Alpha_tags_1)
 		/sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
@@ -1304,17 +1196,8 @@
 asn_TYPE_descriptor_t asn_DEF_Beta = {
 	"Beta",
 	"Beta",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Beta_tags_1,
 	sizeof(asn_DEF_Beta_tags_1)
 		/sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
@@ -1419,17 +1302,8 @@
 asn_TYPE_descriptor_t asn_DEF_Gamma = {
 	"Gamma",
 	"Gamma",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Gamma_tags_1,
 	sizeof(asn_DEF_Gamma_tags_1)
 		/sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
@@ -1523,17 +1397,8 @@
 asn_TYPE_descriptor_t asn_DEF_OneTwo = {
 	"OneTwo",
 	"OneTwo",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_OneTwo_tags_1,
 	sizeof(asn_DEF_OneTwo_tags_1)
 		/sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
@@ -1627,17 +1492,8 @@
 asn_TYPE_descriptor_t asn_DEF_TwoThree = {
 	"TwoThree",
 	"TwoThree",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_TwoThree_tags_1,
 	sizeof(asn_DEF_TwoThree_tags_1)
 		/sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
@@ -1747,17 +1603,8 @@
 asn_TYPE_descriptor_t asn_DEF_ThreeOne = {
 	"ThreeOne",
 	"ThreeOne",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_ThreeOne_tags_1,
 	sizeof(asn_DEF_ThreeOne_tags_1)
 		/sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types
index 499c570..6e33241 100644
--- a/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/92-circular-loops-OK.asn1.-Pfwide-types
@@ -187,17 +187,8 @@
 asn_TYPE_descriptor_t asn_DEF_Everything = {
 	"Everything",
 	"Everything",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Everything_tags_1,
 	sizeof(asn_DEF_Everything_tags_1)
 		/sizeof(asn_DEF_Everything_tags_1[0]), /* 1 */
@@ -299,17 +290,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice1 = {
 	"Choice1",
 	"Choice1",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -410,17 +392,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice2 = {
 	"Choice2",
 	"Choice2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -524,17 +497,8 @@
 asn_TYPE_descriptor_t asn_DEF_a_2 = {
 	"a",
 	"a",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_a_tags_2,
 	sizeof(asn_DEF_a_tags_2)
 		/sizeof(asn_DEF_a_tags_2[0]) - 1, /* 1 */
@@ -574,17 +538,8 @@
 asn_TYPE_descriptor_t asn_DEF_c_5 = {
 	"c",
 	"c",
-	SEQUENCE_OF_free,
-	SEQUENCE_OF_print,
-	SEQUENCE_OF_compare,
+	&asn_OP_SEQUENCE_OF,
 	SEQUENCE_OF_constraint,
-	SEQUENCE_OF_decode_ber,
-	SEQUENCE_OF_encode_der,
-	SEQUENCE_OF_decode_xer,
-	SEQUENCE_OF_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 */
 	asn_DEF_c_tags_5,
 	sizeof(asn_DEF_c_tags_5)
 		/sizeof(asn_DEF_c_tags_5[0]) - 1, /* 1 */
@@ -651,17 +606,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice3 = {
 	"Choice3",
 	"Choice3",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -805,17 +751,8 @@
 asn_TYPE_descriptor_t asn_DEF_Member_2 = {
 	"SEQUENCE",
 	"SEQUENCE",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Member_tags_2,
 	sizeof(asn_DEF_Member_tags_2)
 		/sizeof(asn_DEF_Member_tags_2[0]), /* 1 */
@@ -853,17 +790,8 @@
 asn_TYPE_descriptor_t asn_DEF_Set = {
 	"Set",
 	"Set",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_Set_tags_1,
 	sizeof(asn_DEF_Set_tags_1)
 		/sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
@@ -984,17 +912,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -1043,17 +962,8 @@
 asn_TYPE_descriptor_t asn_DEF_TypeRef = {
 	"TypeRef",
 	"TypeRef",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_TypeRef_tags_1,
 	sizeof(asn_DEF_TypeRef_tags_1)
 		/sizeof(asn_DEF_TypeRef_tags_1[0]), /* 1 */
@@ -1136,17 +1046,8 @@
 asn_TYPE_descriptor_t asn_DEF_b_3 = {
 	"b",
 	"b",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_b_tags_3,
 	sizeof(asn_DEF_b_tags_3)
 		/sizeof(asn_DEF_b_tags_3[0]) - 1, /* 1 */
@@ -1203,17 +1104,8 @@
 asn_TYPE_descriptor_t asn_DEF_Alpha = {
 	"Alpha",
 	"Alpha",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Alpha_tags_1,
 	sizeof(asn_DEF_Alpha_tags_1)
 		/sizeof(asn_DEF_Alpha_tags_1[0]), /* 1 */
@@ -1303,17 +1195,8 @@
 asn_TYPE_descriptor_t asn_DEF_Beta = {
 	"Beta",
 	"Beta",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Beta_tags_1,
 	sizeof(asn_DEF_Beta_tags_1)
 		/sizeof(asn_DEF_Beta_tags_1[0]), /* 1 */
@@ -1418,17 +1301,8 @@
 asn_TYPE_descriptor_t asn_DEF_Gamma = {
 	"Gamma",
 	"Gamma",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Gamma_tags_1,
 	sizeof(asn_DEF_Gamma_tags_1)
 		/sizeof(asn_DEF_Gamma_tags_1[0]), /* 1 */
@@ -1522,17 +1396,8 @@
 asn_TYPE_descriptor_t asn_DEF_OneTwo = {
 	"OneTwo",
 	"OneTwo",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_OneTwo_tags_1,
 	sizeof(asn_DEF_OneTwo_tags_1)
 		/sizeof(asn_DEF_OneTwo_tags_1[0]), /* 1 */
@@ -1626,17 +1491,8 @@
 asn_TYPE_descriptor_t asn_DEF_TwoThree = {
 	"TwoThree",
 	"TwoThree",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_TwoThree_tags_1,
 	sizeof(asn_DEF_TwoThree_tags_1)
 		/sizeof(asn_DEF_TwoThree_tags_1[0]), /* 1 */
@@ -1746,17 +1602,8 @@
 asn_TYPE_descriptor_t asn_DEF_ThreeOne = {
 	"ThreeOne",
 	"ThreeOne",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_ThreeOne_tags_1,
 	sizeof(asn_DEF_ThreeOne_tags_1)
 		/sizeof(asn_DEF_ThreeOne_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types
index 9257ff4..5c8c27e 100644
--- a/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/93-asn1c-controls-OK.asn1.-Pfwide-types
@@ -65,17 +65,8 @@
 asn_TYPE_descriptor_t asn_DEF_Sequence = {
 	"Sequence",
 	"Sequence",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Sequence_tags_1,
 	sizeof(asn_DEF_Sequence_tags_1)
 		/sizeof(asn_DEF_Sequence_tags_1[0]), /* 1 */
@@ -183,17 +174,8 @@
 asn_TYPE_descriptor_t asn_DEF_Set = {
 	"Set",
 	"Set",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_Set_tags_1,
 	sizeof(asn_DEF_Set_tags_1)
 		/sizeof(asn_DEF_Set_tags_1[0]), /* 1 */
@@ -284,17 +266,8 @@
 asn_TYPE_descriptor_t asn_DEF_setof_2 = {
 	"setof",
 	"setof",
-	SET_OF_free,
-	SET_OF_print,
-	SET_OF_compare,
+	&asn_OP_SET_OF,
 	SET_OF_constraint,
-	SET_OF_decode_ber,
-	SET_OF_encode_der,
-	SET_OF_decode_xer,
-	SET_OF_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 */
 	asn_DEF_setof_tags_2,
 	sizeof(asn_DEF_setof_tags_2)
 		/sizeof(asn_DEF_setof_tags_2[0]) - 1, /* 1 */
@@ -361,17 +334,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice = {
 	"Choice",
 	"Choice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P b/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P
index fd3574b..21a28ef 100644
--- a/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/94-set-optionals-OK.asn1.-P
@@ -201,17 +201,8 @@
 asn_TYPE_descriptor_t asn_DEF_TestSet = {
 	"TestSet",
 	"TestSet",
-	SET_free,
-	SET_print,
-	SET_compare,
+	&asn_OP_SET,
 	SET_constraint,
-	SET_decode_ber,
-	SET_encode_der,
-	SET_decode_xer,
-	SET_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 */
 	asn_DEF_TestSet_tags_1,
 	sizeof(asn_DEF_TestSet_tags_1)
 		/sizeof(asn_DEF_TestSet_tags_1[0]), /* 1 */
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types
index 0af0251..69d0d67 100644
--- a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types
+++ b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pfwide-types
@@ -100,17 +100,8 @@
 asn_TYPE_descriptor_t asn_DEF_ch_4 = {
 	"ch",
 	"ch",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -188,17 +179,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice = {
 	"Choice",
 	"Choice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -285,17 +267,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice2 = {
 	"Choice2",
 	"Choice2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	0, 0,	/* No PER support, use "-gen-PER" to enable */
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER
index 8d49825..e3d73f2 100644
--- a/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER
+++ b/tests/tests-asn1c-compiler/95-choice-per-order-OK.asn1.-Pgen-PER
@@ -114,18 +114,8 @@
 asn_TYPE_descriptor_t asn_DEF_ch_4 = {
 	"ch",
 	"ch",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	CHOICE_decode_uper,
-	CHOICE_encode_uper,
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -204,18 +194,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice = {
 	"Choice",
 	"Choice",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	CHOICE_decode_uper,
-	CHOICE_encode_uper,
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
@@ -310,18 +290,8 @@
 asn_TYPE_descriptor_t asn_DEF_Choice2 = {
 	"Choice2",
 	"Choice2",
-	CHOICE_free,
-	CHOICE_print,
-	CHOICE_compare,
+	&asn_OP_CHOICE,
 	CHOICE_constraint,
-	CHOICE_decode_ber,
-	CHOICE_encode_der,
-	CHOICE_decode_xer,
-	CHOICE_encode_xer,
-	0, 0,	/* No OER support, use "-gen-OER" to enable */
-	CHOICE_decode_uper,
-	CHOICE_encode_uper,
-	CHOICE_outmost_tag,
 	0,	/* No effective tags (pointer) */
 	0,	/* No effective tags (count) */
 	0,	/* No tags (pointer) */
diff --git a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P
index 7118321..0d0feb0 100644
--- a/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P
+++ b/tests/tests-asn1c-compiler/98-attribute-class-OK.asn1.-P
@@ -99,17 +99,8 @@
 asn_TYPE_descriptor_t asn_DEF_Attribute = {
 	"Attribute",
 	"Attribute",
-	SEQUENCE_free,
-	SEQUENCE_print,
-	SEQUENCE_compare,
+	&asn_OP_SEQUENCE,
 	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 */
 	asn_DEF_Attribute_tags_1,
 	sizeof(asn_DEF_Attribute_tags_1)
 		/sizeof(asn_DEF_Attribute_tags_1[0]), /* 1 */
diff --git a/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c b/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c
index ebfb4f4..f0edbb4 100644
--- a/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c
+++ b/tests/tests-c-compiler/check-src/check-119.-fwide-types.-gen-PER.c
@@ -129,7 +129,7 @@
 			" chunks %zd\n",
 			size, fname, how==AS_PER?"PER":"XER", csize);
 
-		if(st) asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
 		st = 0;
 
 		do {
@@ -200,7 +200,7 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+			ASN_STRUCT_FREE(asn_DEF_PDU, st);
 			st = 0;	/* ignore leak for now */
 		}
 	}
@@ -289,7 +289,7 @@
 		break;
 	}
 
-	asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_PDU, st);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-119.-gen-PER.c b/tests/tests-c-compiler/check-src/check-119.-gen-PER.c
index bb52eac..96ccc9f 100644
--- a/tests/tests-c-compiler/check-src/check-119.-gen-PER.c
+++ b/tests/tests-c-compiler/check-src/check-119.-gen-PER.c
@@ -129,7 +129,7 @@
 			" chunks %zd\n",
 			size, fname, how==AS_PER?"PER":"XER", csize);
 
-		if(st) asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
 		st = 0;
 
 		do {
@@ -200,7 +200,7 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+			ASN_STRUCT_FREE(asn_DEF_PDU, st);
 			st = 0;	/* ignore leak for now */
 		}
 	}
@@ -291,7 +291,7 @@
 		break;
 	}
 
-	asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_PDU, st);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-126.-gen-PER.c b/tests/tests-c-compiler/check-src/check-126.-gen-PER.c
index 5b62087..9c08827 100644
--- a/tests/tests-c-compiler/check-src/check-126.-gen-PER.c
+++ b/tests/tests-c-compiler/check-src/check-126.-gen-PER.c
@@ -110,7 +110,7 @@
 			" chunks %zd\n",
 			size, fname, how==AS_PER?"PER":"XER", csize);
 
-		if(st) asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
 		st = 0;
 
 		do {
@@ -308,7 +308,7 @@
 	else
 		assert(xer_encoding_equal((char *)fbuf, size, (char *)buf, buf_offset));
 
-	asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_PDU, st);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-25.-fwide-types.c b/tests/tests-c-compiler/check-src/check-25.-fwide-types.c
index 5564445..090c652 100644
--- a/tests/tests-c-compiler/check-src/check-25.-fwide-types.c
+++ b/tests/tests-c-compiler/check-src/check-25.-fwide-types.c
@@ -136,7 +136,7 @@
 		assert(rval.consumed <= consumed);
 	}
 
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 }
 
 static void
@@ -237,7 +237,7 @@
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 		}
 	}
 }
diff --git a/tests/tests-c-compiler/check-src/check-31.-fwide-types.c b/tests/tests-c-compiler/check-src/check-31.-fwide-types.c
index 2777d0b..55ccbc0 100644
--- a/tests/tests-c-compiler/check-src/check-31.-fwide-types.c
+++ b/tests/tests-c-compiler/check-src/check-31.-fwide-types.c
@@ -138,7 +138,7 @@
 	asn_fprint(stderr, &asn_DEF_Forest, &t);
 	xer_fprint(stderr, &asn_DEF_Forest, &t);
 
-	asn_DEF_Forest.free_struct(&asn_DEF_Forest, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_Forest, &t);
 }
 
 static char xer_buf[512];
diff --git a/tests/tests-c-compiler/check-src/check-35.c b/tests/tests-c-compiler/check-src/check-35.c
index 23ed327..0c20adf 100644
--- a/tests/tests-c-compiler/check-src/check-35.c
+++ b/tests/tests-c-compiler/check-src/check-35.c
@@ -265,7 +265,7 @@
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 		}
 	}
 }
@@ -315,12 +315,12 @@
 
 	check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 	check_xer(buf1, sizeof(buf1), "<T><c><false/></c><b><b2>z</b2></b><a>=&lt;&amp;&gt;</a><d><r-oid>85.79</r-oid></d></T>");
 
 	check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 	check_xer(buf2, sizeof(buf2), "<T><c><true/></c><b><b1>z</b1></b><a>=&lt;&amp;&gt;</a><d><oid>2.1</oid></d></T>");
 
 	/* Split the buffer in parts and check decoder restartability */
diff --git a/tests/tests-c-compiler/check-src/check-41.-fwide-types.c b/tests/tests-c-compiler/check-src/check-41.-fwide-types.c
index 4dca1e6..bc4efa3 100644
--- a/tests/tests-c-compiler/check-src/check-41.-fwide-types.c
+++ b/tests/tests-c-compiler/check-src/check-41.-fwide-types.c
@@ -281,7 +281,7 @@
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 		}
 	}
 }
@@ -293,27 +293,27 @@
 	/* Check exact buf0 */
 	check(&t, buf0, sizeof(buf0), sizeof(buf0));
 	compare(&t, buf0_reconstr, sizeof(buf0_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Check exact buf1 */
 	check(&t, buf1, sizeof(buf1), sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Check slightly more than buf1 */
 	check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Check exact buf2 */
 	check(&t, buf2, sizeof(buf2), sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Check slightly more than buf2 */
 	check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Split the buffer in parts and check decoder restartability */
 	partial_read(buf0, sizeof(buf0));
diff --git a/tests/tests-c-compiler/check-src/check-41.c b/tests/tests-c-compiler/check-src/check-41.c
index 1c1b907..c1efbd2 100644
--- a/tests/tests-c-compiler/check-src/check-41.c
+++ b/tests/tests-c-compiler/check-src/check-41.c
@@ -188,7 +188,7 @@
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+			ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 		}
 	}
 }
@@ -204,13 +204,13 @@
 	check(&t, buf1, sizeof(buf1), sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
 	asn_fprint(stderr, &asn_DEF_T, &t);
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Check slightly more than buf1 */
 	check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
 	asn_fprint(stderr, &asn_DEF_T, &t);
-	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_T, &t);
 
 	/* Split the buffer in parts and check decoder restartability */
 	partial_read(buf1, sizeof(buf1));
diff --git a/tests/tests-c-compiler/check-src/check-42.c b/tests/tests-c-compiler/check-src/check-42.c
index db4ccb7..174f1c2 100644
--- a/tests/tests-c-compiler/check-src/check-42.c
+++ b/tests/tests-c-compiler/check-src/check-42.c
@@ -66,7 +66,7 @@
 	assert(rval.code == RC_OK);
 	assert(rval.consumed == consumed);
 	asn_fprint(stderr, &asn_DEF_LogLine, tp);
-	asn_DEF_LogLine.free_struct(&asn_DEF_LogLine, tp, 1);
+	ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_LogLine, tp);
 }
 
 uint8_t *buf;
diff --git a/tests/tests-c-compiler/check-src/check-62.c b/tests/tests-c-compiler/check-src/check-62.c
index 7c1864b..560929c 100644
--- a/tests/tests-c-compiler/check-src/check-62.c
+++ b/tests/tests-c-compiler/check-src/check-62.c
@@ -78,7 +78,7 @@
 		int fbuf_left = size;
 		int fbuf_chunk = csize;
 
-		if(st) asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_T, st);
 		st = 0;
 
 		do {
@@ -102,7 +102,7 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
+			ASN_STRUCT_FREE(asn_DEF_T, st);
 			st = 0;	/* ignore leak for now */
 		}
 	}
@@ -142,7 +142,7 @@
 		break;
 	}
 
-	asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_T, st);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-70.-fwide-types.c b/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
index bd96978..377663c 100644
--- a/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
+++ b/tests/tests-c-compiler/check-src/check-70.-fwide-types.c
@@ -121,7 +121,7 @@
 		fprintf(stderr, "LOADING OBJECT OF SIZE %zd, chunks %zd\n",
 			size, csize);
 
-		if(st) asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
 		st = 0;
 
 		do {
@@ -165,7 +165,7 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+			ASN_STRUCT_FREE(asn_DEF_PDU, st);
 			st = 0;	/* ignore leak for now */
 		}
 	}
@@ -252,7 +252,7 @@
 		break;
 	}
 
-	asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_PDU, st);
 }
 
 /*
diff --git a/tests/tests-c-compiler/check-src/check-70.c b/tests/tests-c-compiler/check-src/check-70.c
index d844f08..6c10f09 100644
--- a/tests/tests-c-compiler/check-src/check-70.c
+++ b/tests/tests-c-compiler/check-src/check-70.c
@@ -110,7 +110,7 @@
 		fprintf(stderr, "LOADING OBJECT OF SIZE %zd, chunks %zd\n",
 			size, csize);
 
-		if(st) asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+		if(st) ASN_STRUCT_FREE(asn_DEF_PDU, st);
 		st = 0;
 
 		do {
@@ -154,7 +154,7 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+			ASN_STRUCT_FREE(asn_DEF_PDU, st);
 			st = 0;	/* ignore leak for now */
 		}
 	}
@@ -228,7 +228,7 @@
 		break;
 	}
 
-	asn_DEF_PDU.free_struct(&asn_DEF_PDU, st, 0);
+	ASN_STRUCT_FREE(asn_DEF_PDU, st);
 }
 
 /*