diff --git a/asn1c/tests/check-22.c b/asn1c/tests/check-22.c
index 6a35380..95f0c4a 100644
--- a/asn1c/tests/check-22.c
+++ b/asn1c/tests/check-22.c
@@ -55,7 +55,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_T1, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T1, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
@@ -87,7 +87,7 @@
 	 * Try to re-create using DER encoding.
 	 */
 	buf2_pos = 0;
-	erval = der_encode(&asn1_DEF_T1, tp, buf2_fill, 0);
+	erval = der_encode(&asn_DEF_T1, tp, buf2_fill, 0);
 	assert(erval.encoded != -1);
 	if(erval.encoded != sizeof(buf1)) {
 		printf("%d != %d\n", (int)erval.encoded, (int)sizeof(buf1));
@@ -106,10 +106,10 @@
 	}
 
 	fprintf(stderr, "=== asn_fprint() ===\n");
-	ret = asn_fprint(stderr, &asn1_DEF_T1, tp);
+	ret = asn_fprint(stderr, &asn_DEF_T1, tp);
 	assert(ret == 0);
 	fprintf(stderr, "=== xer_fprint() ===\n");
-	ret = xer_fprint(stderr, &asn1_DEF_T1, tp);
+	ret = xer_fprint(stderr, &asn_DEF_T1, tp);
 	assert(ret == 0);
 	fprintf(stderr, "=== EOF ===\n");
 }
diff --git a/asn1c/tests/check-24.c b/asn1c/tests/check-24.c
index 79de911..f50cbf6 100644
--- a/asn1c/tests/check-24.c
+++ b/asn1c/tests/check-24.c
@@ -41,7 +41,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
diff --git a/asn1c/tests/check-25.c b/asn1c/tests/check-25.c
index 782fc86..9352a80 100644
--- a/asn1c/tests/check-25.c
+++ b/asn1c/tests/check-25.c
@@ -94,7 +94,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p (%d)\n", buf, (int)size);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d, expected %d\n",
 		(int)rval.code, (int)rval.consumed, (int)consumed);
 
@@ -136,7 +136,7 @@
 		assert(rval.consumed <= consumed);
 	}
 
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 }
 
 static void
@@ -208,7 +208,7 @@
 			tp = memset(&t, 0, sizeof(t));
 
 			fprintf(stderr, "=> Chunk 1 (%d):\n", (int)size1);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				tbuf1, size1);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size1);
@@ -220,7 +220,7 @@
 			}
 
 			fprintf(stderr, "=> Chunk 2 (%d):\n", (int)size2);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				tbuf2, size2);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size2);
@@ -232,12 +232,12 @@
 			}
 
 			fprintf(stderr, "=> Chunk 3 (%d):\n", (int)size3);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				tbuf3, size3);
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 		}
 	}
 }
diff --git a/asn1c/tests/check-30.c b/asn1c/tests/check-30.c
index 014a9f0..3389d53 100644
--- a/asn1c/tests/check-30.c
+++ b/asn1c/tests/check-30.c
@@ -151,7 +151,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d (out of %d)\n",
 		(int)rval.code, (int)rval.consumed, size);
 
diff --git a/asn1c/tests/check-31.c b/asn1c/tests/check-31.c
index b0a47b9..06ad6b5 100644
--- a/asn1c/tests/check-31.c
+++ b/asn1c/tests/check-31.c
@@ -101,7 +101,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_Forest, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_Forest, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
@@ -131,14 +131,14 @@
 	 * Try to re-create the buffer.
 	 */
 	buf_pos = 0;
-	der_encode(&asn1_DEF_Forest, &t,
+	der_encode(&asn_DEF_Forest, &t,
 		bytes_compare, buf1_reconstr);
 	assert(buf_pos == sizeof(buf1_reconstr));
 
-	asn_fprint(stderr, &asn1_DEF_Forest, &t);
-	xer_fprint(stderr, &asn1_DEF_Forest, &t);
+	asn_fprint(stderr, &asn_DEF_Forest, &t);
+	xer_fprint(stderr, &asn_DEF_Forest, &t);
 
-	asn1_DEF_Forest.free_struct(&asn1_DEF_Forest, &t, 1);
+	asn_DEF_Forest.free_struct(&asn_DEF_Forest, &t, 1);
 }
 
 static void
diff --git a/asn1c/tests/check-35.c b/asn1c/tests/check-35.c
index bc22394..f540451 100644
--- a/asn1c/tests/check-35.c
+++ b/asn1c/tests/check-35.c
@@ -121,7 +121,7 @@
 	tp = memset(tp, 0, sizeof(*tp));
 
 	fprintf(stderr, "Buf %p (%d)\n", buf, (int)size);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
@@ -132,8 +132,8 @@
 	assert(strcmp(tp->b.choice.b1.buf, "z") == 0
 		&& strcmp(tp->b.choice.b2.buf, "z") == 0);
 
-	asn_fprint(stderr, &asn1_DEF_T, tp);
-	xer_fprint(stderr, &asn1_DEF_T, tp);
+	asn_fprint(stderr, &asn_DEF_T, tp);
+	xer_fprint(stderr, &asn_DEF_T, tp);
 }
 
 size_t buf_pos;
@@ -170,7 +170,7 @@
 	/*
 	 * Try to re-create using DER encoding.
 	 */
-	erval = der_encode(&asn1_DEF_T, tp, buf_fill, 0);
+	erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
 	assert(erval.encoded != -1);
 	if(erval.encoded != cmp_buf_size) {
 		printf("%d != %d\n", erval.encoded, cmp_buf_size);
@@ -228,7 +228,7 @@
 			tp = memset(&t, 0, sizeof(t));
 
 			fprintf(stderr, "=> Chunk 1 (%d):\n", (int)size1);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf1, size1);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size1);
@@ -240,7 +240,7 @@
 			}
 
 			fprintf(stderr, "=> Chunk 2 (%d):\n", (int)size2);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf2, size2);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size2);
@@ -252,12 +252,12 @@
 			}
 
 			fprintf(stderr, "=> Chunk 3 (%d):\n", (int)size3);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf3, size3);
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 		}
 	}
 }
@@ -271,11 +271,11 @@
 
 	check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Split the buffer in parts and check decoder restartability */
 	partial_read(buf1, sizeof(buf1));
diff --git a/asn1c/tests/check-41.c b/asn1c/tests/check-41.c
index 33634e8..be623fc 100644
--- a/asn1c/tests/check-41.c
+++ b/asn1c/tests/check-41.c
@@ -137,7 +137,7 @@
 	tp = memset(tp, 0, sizeof(*tp));
 
 	fprintf(stderr, "Buf %p (%d)\n", (int)buf, (int)size);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
@@ -145,10 +145,10 @@
 	assert(rval.consumed == consumed);
 
 	fprintf(stderr, "=== asn_fprint() ===\n");
-	ret = asn_fprint(stderr, &asn1_DEF_T, tp);
+	ret = asn_fprint(stderr, &asn_DEF_T, tp);
 	assert(ret == 0);
 	fprintf(stderr, "=== xer_fprint() ===\n");
-	ret = xer_fprint(stderr, &asn1_DEF_T, tp);
+	ret = xer_fprint(stderr, &asn_DEF_T, tp);
 	fprintf(stderr, "=== END ===\n");
 	assert(ret == 0);
 
@@ -194,7 +194,7 @@
 	/*
 	 * Try to re-create using DER encoding.
 	 */
-	erval = der_encode(&asn1_DEF_T, tp, buf_fill, 0);
+	erval = der_encode(&asn_DEF_T, tp, buf_fill, 0);
 	assert(erval.encoded != -1);
 	if(erval.encoded != cmp_buf_size) {
 		printf("%d != %d\n", (int)erval.encoded, (int)cmp_buf_size);
@@ -252,7 +252,7 @@
 			tp = memset(&t, 0, sizeof(t));
 
 			fprintf(stderr, "=> Chunk 1 (%d):\n", (int)size1);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf1, size1);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size1);
@@ -264,7 +264,7 @@
 			}
 
 			fprintf(stderr, "=> Chunk 2 (%d):\n", (int)size2);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf2, size2);
 			assert(rval.code == RC_WMORE);
 			assert(rval.consumed <= size2);
@@ -276,12 +276,12 @@
 			}
 
 			fprintf(stderr, "=> Chunk 3 (%d):\n", (int)size3);
-			rval = ber_decode(&asn1_DEF_T, (void **)&tp,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&tp,
 				buf3, size3);
 			assert(rval.code == RC_OK);
 			assert(rval.consumed == size3);
 
-			asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+			asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 		}
 	}
 }
@@ -293,27 +293,27 @@
 	/* Check exact buf0 */
 	check(&t, buf0, sizeof(buf0), sizeof(buf0));
 	compare(&t, buf0_reconstr, sizeof(buf0_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Check exact buf1 */
 	check(&t, buf1, sizeof(buf1), sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Check slightly more than buf1 */
 	check(&t, buf1, sizeof(buf1) + 10, sizeof(buf1));
 	compare(&t, buf1_reconstr, sizeof(buf1_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Check exact buf2 */
 	check(&t, buf2, sizeof(buf2), sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Check slightly more than buf2 */
 	check(&t, buf2, sizeof(buf2) + 10, sizeof(buf2));
 	compare(&t, buf2_reconstr, sizeof(buf2_reconstr));
-	asn1_DEF_T.free_struct(&asn1_DEF_T, &t, 1);
+	asn_DEF_T.free_struct(&asn_DEF_T, &t, 1);
 
 	/* Split the buffer in parts and check decoder restartability */
 	partial_read(buf0, sizeof(buf0));
diff --git a/asn1c/tests/check-44.c b/asn1c/tests/check-44.c
index a705ef5..3a175b3 100644
--- a/asn1c/tests/check-44.c
+++ b/asn1c/tests/check-44.c
@@ -35,7 +35,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
diff --git a/asn1c/tests/check-46.c b/asn1c/tests/check-46.c
index d2183d3..4e8c33b 100644
--- a/asn1c/tests/check-46.c
+++ b/asn1c/tests/check-46.c
@@ -25,7 +25,7 @@
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(&asn1_DEF_T, (void **)&tp, buf, size);
+	rval = ber_decode(0, &asn_DEF_T, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
diff --git a/asn1c/tests/check-48.c b/asn1c/tests/check-48.c
index 8422768..71dd8b2 100644
--- a/asn1c/tests/check-48.c
+++ b/asn1c/tests/check-48.c
@@ -28,7 +28,7 @@
 }
 
 static int
-save_object(void *bs, asn1_TYPE_descriptor_t *td) {
+save_object(void *bs, asn_TYPE_descriptor_t *td) {
 	asn_enc_rval_t rval; /* Return value */
 	int i;
 	
@@ -55,12 +55,12 @@
 }
 
 static int
-load_object(void *bs, asn1_TYPE_descriptor_t *td) {
+load_object(void *bs, asn_TYPE_descriptor_t *td) {
 	ber_dec_rval_t rval;
 
 	fprintf(stderr, "\nLOADING OBJECT OF SIZE %d\n", buf_offset);
 
-	rval = ber_decode(td, (void **)&bs, buf, buf_offset);
+	rval = ber_decode(0, td, (void **)&bs, buf, buf_offset);
 	assert(rval.code == RC_OK);
 
 	asn_fprint(stderr, td, bs);
@@ -71,7 +71,7 @@
 
 int
 main() {
-	asn1_TYPE_descriptor_t *td = &asn1_DEF_UserIdentifier;
+	asn_TYPE_descriptor_t *td = &asn_DEF_UserIdentifier;
 	UserIdentifier_t user;
 	UserIdentifier_t user_new;
 	int ret;
diff --git a/asn1c/tests/check-62.c b/asn1c/tests/check-62.c
index 06287a8..d9365d8 100644
--- a/asn1c/tests/check-62.c
+++ b/asn1c/tests/check-62.c
@@ -41,7 +41,7 @@
 
 	buf_offset = 0;
 	
-	rval = der_encode(&asn1_DEF_T, st, _buf_writer, 0);
+	rval = der_encode(&asn_DEF_T, st, _buf_writer, 0);
 	if (rval.encoded == -1) {
 		fprintf(stderr,
 			"Cannot encode %s: %s\n",
@@ -69,13 +69,13 @@
 		int fbuf_left = size;
 		int fbuf_chunk = csize;
 
-		if(st) asn1_DEF_T.free_struct(&asn1_DEF_T, st, 0);
+		if(st) asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
 		st = 0;
 
 		do {
 			fprintf(stderr, "Decoding from %d with %d (left %d)\n",
 				fbuf_offset, fbuf_chunk, fbuf_left);
-			rval = ber_decode(&asn1_DEF_T, (void **)&st,
+			rval = ber_decode(0, &asn_DEF_T, (void **)&st,
 				fbuf + fbuf_offset,
 					fbuf_chunk < fbuf_left 
 						? fbuf_chunk : fbuf_left);
@@ -92,12 +92,12 @@
 		} else {
 			assert(rval.code != RC_OK);
 			fprintf(stderr, "Failed, but this was expected\n");
-			asn1_DEF_T.free_struct(&asn1_DEF_T, st, 0);
+			asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
 			st = 0;	/* ignore leak for now */
 		}
 	}
 
-	if(st) asn_fprint(stderr, &asn1_DEF_T, st);
+	if(st) asn_fprint(stderr, &asn_DEF_T, st);
 	return st;
 }
 
@@ -122,7 +122,7 @@
 		assert(memcmp(buf, fbuf, buf_offset) == 0);
 	}
 
-	asn1_DEF_T.free_struct(&asn1_DEF_T, st, 0);
+	asn_DEF_T.free_struct(&asn_DEF_T, st, 0);
 }
 
 /*
diff --git a/asn1c/tests/check-65.c b/asn1c/tests/check-65.c
index 08da99e..76295a7 100644
--- a/asn1c/tests/check-65.c
+++ b/asn1c/tests/check-65.c
@@ -53,14 +53,14 @@
 
 static void
 check_1(int is_ok, uint8_t *buf, int size, size_t consumed) {
-	asn1_TYPE_descriptor_t *td = &asn1_DEF_T1;
+	asn_TYPE_descriptor_t *td = &asn_DEF_T1;
 	ber_dec_rval_t rval;
 	T1_t t, *tp;
 
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(td, (void **)&tp, buf, size);
+	rval = ber_decode(0, td, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
@@ -76,14 +76,14 @@
 
 static void
 check_2(int is_ok, uint8_t *buf, int size, size_t consumed) {
-	asn1_TYPE_descriptor_t *td = &asn1_DEF_T;
+	asn_TYPE_descriptor_t *td = &asn_DEF_T;
 	ber_dec_rval_t rval;
 	T_t t, *tp;
 
 	tp = memset(&t, 0, sizeof(t));
 
 	fprintf(stderr, "Buf %p\n", buf);
-	rval = ber_decode(td, (void **)&tp, buf, size);
+	rval = ber_decode(0, td, (void **)&tp, buf, size);
 	fprintf(stderr, "Returned code %d, consumed %d\n",
 		(int)rval.code, (int)rval.consumed);
 
