diff --git a/tests/46-redefine-OK.asn1.-PR b/tests/46-redefine-OK.asn1.-PR
index 4981e22..92a81ca 100644
--- a/tests/46-redefine-OK.asn1.-PR
+++ b/tests/46-redefine-OK.asn1.-PR
@@ -11,7 +11,7 @@
 /*** <<< FUNC-DECLS [PrimitiveType] >>> ***/
 
 /* This type is equivalent to OCTET_STRING */
-#define	asn1_DEF_PrimitiveType	asn1_DEF_OCTET_STRING
+#define	asn_DEF_PrimitiveType	asn_DEF_OCTET_STRING
 
 /*** <<< CODE [PrimitiveType] >>> ***/
 
@@ -25,7 +25,7 @@
 
 /*** <<< DEPS [ConstructedType] >>> ***/
 
-extern asn1_TYPE_descriptor_t asn1_DEF_ConstructedType;
+extern asn_TYPE_descriptor_t asn_DEF_ConstructedType;
 
 /*** <<< TYPE-DECLS [ConstructedType] >>> ***/
 
@@ -34,35 +34,35 @@
 	PrimitiveType_t	 field;
 	
 	/* Context for parsing across buffer boundaries */
-	ber_dec_ctx_t _ber_dec_ctx;
+	asn_struct_ctx_t _asn_ctx;
 } ConstructedType_t;
 
 /*** <<< STAT-DEFS [ConstructedType] >>> ***/
 
-static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
+static asn_TYPE_member_t asn_MBR_ConstructedType[] = {
 	{ ATF_NOFLAGS, 0, offsetof(struct ConstructedType, field),
 		.tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
 		.tag_mode = -1,	/* IMPLICIT tag at current level */
-		.type = (void *)&asn1_DEF_PrimitiveType,
+		.type = (void *)&asn_DEF_PrimitiveType,
 		.memb_constraints = 0,	/* Defer to actual type */
 		.name = "field"
 		},
 };
-static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
+static ber_tlv_tag_t asn_DEF_ConstructedType_tags[] = {
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-static asn1_TYPE_tag2member_t asn1_DEF_ConstructedType_tag2el[] = {
+static asn_TYPE_tag2member_t asn_DEF_ConstructedType_tag2el[] = {
     { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 0, 0, 0 }, /* field at 18 */
 };
-static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
+static asn_SEQUENCE_specifics_t asn_DEF_ConstructedType_specs = {
 	sizeof(struct ConstructedType),
-	offsetof(struct ConstructedType, _ber_dec_ctx),
-	asn1_DEF_ConstructedType_tag2el,
+	offsetof(struct ConstructedType, _asn_ctx),
+	asn_DEF_ConstructedType_tag2el,
 	1,	/* Count of tags in the map */
 	-1,	/* Start extensions */
 	-1	/* Stop extensions */
 };
-asn1_TYPE_descriptor_t asn1_DEF_ConstructedType = {
+asn_TYPE_descriptor_t asn_DEF_ConstructedType = {
 	"ConstructedType",
 	SEQUENCE_free,
 	SEQUENCE_print,
@@ -72,15 +72,15 @@
 	0,				/* Not implemented yet */
 	SEQUENCE_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_ConstructedType_tags,
-	sizeof(asn1_DEF_ConstructedType_tags)
-		/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
-	asn1_DEF_ConstructedType_tags,	/* Same as above */
-	sizeof(asn1_DEF_ConstructedType_tags)
-		/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
-	asn1_MBR_ConstructedType,
+	asn_DEF_ConstructedType_tags,
+	sizeof(asn_DEF_ConstructedType_tags)
+		/sizeof(asn_DEF_ConstructedType_tags[0]), /* 1 */
+	asn_DEF_ConstructedType_tags,	/* Same as above */
+	sizeof(asn_DEF_ConstructedType_tags)
+		/sizeof(asn_DEF_ConstructedType_tags[0]), /* 1 */
+	asn_MBR_ConstructedType,
 	1,	/* Elements count */
-	&asn1_DEF_ConstructedType_specs	/* Additional specs */
+	&asn_DEF_ConstructedType_specs	/* Additional specs */
 };
 
 
@@ -95,7 +95,7 @@
 
 /*** <<< FUNC-DECLS [T] >>> ***/
 
-extern asn1_TYPE_descriptor_t asn1_DEF_T;
+extern asn_TYPE_descriptor_t asn_DEF_T;
 asn_struct_free_f T_free;
 asn_struct_print_f T_print;
 asn_constr_check_f T_constraint;
@@ -106,10 +106,10 @@
 /*** <<< CODE [T] >>> ***/
 
 int
-T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
+T_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	/* Replace with underlying type checker */
-	td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
+	td->check_constraints = asn_DEF_ConstructedType.check_constraints;
 	return td->check_constraints(td, sptr, app_errlog, app_key);
 }
 
@@ -118,41 +118,41 @@
  * so here we adjust the DEF accordingly.
  */
 static void
-T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
-	td->free_struct    = asn1_DEF_ConstructedType.free_struct;
-	td->print_struct   = asn1_DEF_ConstructedType.print_struct;
-	td->ber_decoder    = asn1_DEF_ConstructedType.ber_decoder;
-	td->der_encoder    = asn1_DEF_ConstructedType.der_encoder;
-	td->xer_decoder    = asn1_DEF_ConstructedType.xer_decoder;
-	td->xer_encoder    = asn1_DEF_ConstructedType.xer_encoder;
-	td->elements       = asn1_DEF_ConstructedType.elements;
-	td->elements_count = asn1_DEF_ConstructedType.elements_count;
-	td->specifics      = asn1_DEF_ConstructedType.specifics;
+T_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) {
+	td->free_struct    = asn_DEF_ConstructedType.free_struct;
+	td->print_struct   = asn_DEF_ConstructedType.print_struct;
+	td->ber_decoder    = asn_DEF_ConstructedType.ber_decoder;
+	td->der_encoder    = asn_DEF_ConstructedType.der_encoder;
+	td->xer_decoder    = asn_DEF_ConstructedType.xer_decoder;
+	td->xer_encoder    = asn_DEF_ConstructedType.xer_encoder;
+	td->elements       = asn_DEF_ConstructedType.elements;
+	td->elements_count = asn_DEF_ConstructedType.elements_count;
+	td->specifics      = asn_DEF_ConstructedType.specifics;
 }
 
 void
-T_free(asn1_TYPE_descriptor_t *td,
+T_free(asn_TYPE_descriptor_t *td,
 		void *struct_ptr, int contents_only) {
 	T_inherit_TYPE_descriptor(td);
 	td->free_struct(td, struct_ptr, contents_only);
 }
 
 int
-T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
+T_print(asn_TYPE_descriptor_t *td, const void *struct_ptr,
 		int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
 	T_inherit_TYPE_descriptor(td);
 	return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
 }
 
 ber_dec_rval_t
-T_decode_ber(asn1_TYPE_descriptor_t *td,
+T_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
 		void **structure, void *bufptr, size_t size, int tag_mode) {
 	T_inherit_TYPE_descriptor(td);
-	return td->ber_decoder(td, structure, bufptr, size, tag_mode);
+	return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode);
 }
 
 asn_enc_rval_t
-T_encode_der(asn1_TYPE_descriptor_t *td,
+T_encode_der(asn_TYPE_descriptor_t *td,
 		void *structure, int tag_mode, ber_tlv_tag_t tag,
 		asn_app_consume_bytes_f *cb, void *app_key) {
 	T_inherit_TYPE_descriptor(td);
@@ -160,7 +160,7 @@
 }
 
 asn_enc_rval_t
-T_encode_xer(asn1_TYPE_descriptor_t *td, void *structure,
+T_encode_xer(asn_TYPE_descriptor_t *td, void *structure,
 		int ilevel, enum xer_encoder_flags_e flags,
 		asn_app_consume_bytes_f *cb, void *app_key) {
 	T_inherit_TYPE_descriptor(td);
@@ -170,11 +170,11 @@
 
 /*** <<< STAT-DEFS [T] >>> ***/
 
-static ber_tlv_tag_t asn1_DEF_T_tags[] = {
+static ber_tlv_tag_t asn_DEF_T_tags[] = {
 	(ASN_TAG_CLASS_CONTEXT | (3 << 2)),
 	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
 };
-asn1_TYPE_descriptor_t asn1_DEF_T = {
+asn_TYPE_descriptor_t asn_DEF_T = {
 	"T",
 	T_free,
 	T_print,
@@ -184,12 +184,12 @@
 	0,				/* Not implemented yet */
 	T_encode_xer,
 	0,	/* Use generic outmost tag fetcher */
-	asn1_DEF_T_tags,
-	sizeof(asn1_DEF_T_tags)
-		/sizeof(asn1_DEF_T_tags[0]) - 1, /* 1 */
-	asn1_DEF_T_tags,	/* Same as above */
-	sizeof(asn1_DEF_T_tags)
-		/sizeof(asn1_DEF_T_tags[0]), /* 2 */
+	asn_DEF_T_tags,
+	sizeof(asn_DEF_T_tags)
+		/sizeof(asn_DEF_T_tags[0]) - 1, /* 1 */
+	asn_DEF_T_tags,	/* Same as above */
+	sizeof(asn_DEF_T_tags)
+		/sizeof(asn_DEF_T_tags[0]), /* 2 */
 	0, 0,	/* Defined elsewhere */
 	0	/* No specifics */
 };
