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 bd78c2f..0000241 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
@@ -56,59 +56,33 @@
 	return 0;
 }
 
-enum der_or_xer {
-	AS_DER,
-	AS_XER,
-	AS_CXER,
-};
-
 static void
-save_object_as(PDU_t *st, enum der_or_xer how) {
-	asn_enc_rval_t rval; /* Return value */
+save_object_as(PDU_t *st, enum asn_transfer_syntax syntax) {
+    asn_enc_rval_t rval; /* Return value */
 
-	buf_offset = 0;
+    buf_offset = 0;
 
-	/*
-	 * Save object using specified method.
-	 */
-	switch(how) {
-	case AS_DER:
-		rval = der_encode(&asn_DEF_PDU, st,
-			_buf_writer, 0);
-		break;
-	case AS_XER:
-		rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
-			_buf_writer, 0);
-		break;
-	case AS_CXER:
-		rval = xer_encode(&asn_DEF_PDU, st, XER_F_CANONICAL,
-			_buf_writer, 0);
-		break;
-	}
-	if (rval.encoded == -1) {
-		fprintf(stderr,
-			"Cannot encode %s: %s\n",
-			rval.failed_type->name, strerror(errno));
-		assert(rval.encoded != -1);
-		return;
-	}
+    rval = asn_encode(0, syntax, &asn_DEF_PDU, st, _buf_writer, 0);
 
-	fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+    if (rval.encoded == -1) {
+        fprintf(stderr,
+            "Cannot encode %s: %s\n",
+            rval.failed_type->name, strerror(errno));
+        assert(rval.encoded != -1);
+        return;
+    }
+
+    fprintf(stderr, "SAVED OBJECT IN SIZE %d/%zd\n", buf_offset, rval.encoded);
+
+    // assert(buf_offset == rval.encoded);
 }
 
 static PDU_t *
-load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum der_or_xer how) {
+load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum asn_transfer_syntax syntax) {
 	asn_dec_rval_t rval;
-	asn_dec_rval_t (*zer_decode)(struct asn_codec_ctx_s *,
-		asn_TYPE_descriptor_t *, void **, const void *, size_t);
 	PDU_t *st = 0;
 	size_t csize = 1;
 
-	if(how == AS_DER)
-		zer_decode = ber_decode;
-	else
-		zer_decode = xer_decode;
-
 	if(getenv("INITIAL_CHUNK_SIZE"))
 		csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
 
@@ -137,7 +111,7 @@
 				fprintf(stderr, "=== end ===\n");
 			}
 #endif
-			rval = zer_decode(0, &asn_DEF_PDU, (void **)&st,
+			rval = asn_decode(0, syntax, &asn_DEF_PDU, (void **)&st,
 				fbuf + fbuf_offset,
 					fbuf_chunk < fbuf_left 
 					? fbuf_chunk : fbuf_left);
@@ -151,7 +125,7 @@
 
 		if(expectation != EXP_BROKEN) {
 			assert(rval.code == RC_OK);
-			if(how == AS_DER) {
+			if(syntax == ATS_BER) {
 				assert(fbuf_offset == (ssize_t)size);
 			} else {
 				assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
@@ -211,18 +185,18 @@
 process_XER_data(enum expectation expectation, unsigned char *fbuf, size_t size) {
 	PDU_t *st;
 
-	st = load_object_from(expectation, fbuf, size, AS_XER);
+	st = load_object_from(expectation, fbuf, size, ATS_BASIC_XER);
 	if(!st) return;
 
 	/* Save and re-load as DER */
-	save_object_as(st, AS_DER);
-	st = load_object_from(expectation, buf, buf_offset, AS_DER);
+	save_object_as(st, ATS_DER);
+	st = load_object_from(expectation, buf, buf_offset, ATS_BER);
 	assert(st);
 
 	save_object_as(st,
 			(expectation == EXP_CXER_EXACT
 			|| expectation == EXP_CXER_DIFF)
-			? AS_CXER : AS_XER);
+			? ATS_CANONICAL_XER : ATS_BASIC_XER);
 	fprintf(stderr, "=== original ===\n");
 	fwrite(fbuf, 1, size, stderr);
 	fprintf(stderr, "=== re-encoded ===\n");
diff --git a/tests/tests-c-compiler/check-src/check-70.c b/tests/tests-c-compiler/check-src/check-70.c
index 6915163..f5527cb 100644
--- a/tests/tests-c-compiler/check-src/check-70.c
+++ b/tests/tests-c-compiler/check-src/check-70.c
@@ -50,54 +50,33 @@
 	return 0;
 }
 
-enum der_or_xer {
-	AS_DER,
-	AS_XER,
-};
-
 static void
-save_object_as(PDU_t *st, enum der_or_xer how) {
-	asn_enc_rval_t rval; /* Return value */
+save_object_as(PDU_t *st, enum asn_transfer_syntax syntax) {
+    asn_enc_rval_t rval; /* Return value */
 
-	buf_offset = 0;
+    buf_offset = 0;
 
-	/*
-	 * Save object using specified method.
-	 */
-	switch(how) {
-	case AS_DER:
-		rval = der_encode(&asn_DEF_PDU, st,
-			_buf_writer, 0);
-		break;
-	case AS_XER:
-		rval = xer_encode(&asn_DEF_PDU, st, XER_F_BASIC,
-			_buf_writer, 0);
-		break;
-	}
-	if (rval.encoded == -1) {
+    rval = asn_encode(0, syntax, &asn_DEF_PDU, st, _buf_writer, 0);
+
+    if (rval.encoded == -1) {
 		fprintf(stderr,
 			"Cannot encode %s: %s\n",
 			rval.failed_type->name, strerror(errno));
 		assert(rval.encoded != -1);
 		return;
-	}
+    }
 
-	fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+    fprintf(stderr, "SAVED OBJECT IN SIZE %d\n", buf_offset);
+
+    // assert(buf_offset == rval.encoded);
 }
 
 static PDU_t *
-load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum der_or_xer how) {
+load_object_from(enum expectation expectation, unsigned char *fbuf, size_t size, enum asn_transfer_syntax syntax) {
 	asn_dec_rval_t rval;
-	asn_dec_rval_t (*zer_decode)(struct asn_codec_ctx_s *,
-		asn_TYPE_descriptor_t *, void **, const void *, size_t);
 	PDU_t *st = 0;
 	size_t csize = 1;
 
-	if(how == AS_DER)
-		zer_decode = ber_decode;
-	else
-		zer_decode = xer_decode;
-
 	if(getenv("INITIAL_CHUNK_SIZE"))
 		csize = atoi(getenv("INITIAL_CHUNK_SIZE"));
 
@@ -126,7 +105,7 @@
 				fprintf(stderr, "=== end ===\n");
 			}
 #endif
-			rval = zer_decode(0, &asn_DEF_PDU, (void **)&st,
+			rval = asn_decode(0, syntax, &asn_DEF_PDU, (void **)&st,
 				fbuf + fbuf_offset,
 					fbuf_chunk < fbuf_left 
 					? fbuf_chunk : fbuf_left);
@@ -140,7 +119,7 @@
 
 		if(expectation != EXP_BROKEN) {
 			assert(rval.code == RC_OK);
-			if(how == AS_DER) {
+			if(syntax == ATS_BER) {
 				assert(fbuf_offset == (ssize_t)size);
 			} else {
 				assert((fbuf_offset + 1 /* "\n" */  == (ssize_t)size
@@ -200,15 +179,15 @@
 process_XER_data(enum expectation expectation, unsigned char *fbuf, size_t size) {
 	PDU_t *st;
 
-	st = load_object_from(expectation, fbuf, size, AS_XER);
+	st = load_object_from(expectation, fbuf, size, ATS_BASIC_XER);
 	if(!st) return;
 
 	/* Save and re-load as DER */
-	save_object_as(st, AS_DER);
-	st = load_object_from(expectation, buf, buf_offset, AS_DER);
+	save_object_as(st, ATS_DER);
+	st = load_object_from(expectation, buf, buf_offset, ATS_BER);
 	assert(st);
 
-	save_object_as(st, AS_XER);
+	save_object_as(st, ATS_BASIC_XER);
 	fprintf(stderr, "=== original ===\n");
 	fwrite(fbuf, 1, size, stderr);
 	fprintf(stderr, "=== re-encoded ===\n");
