diff --git a/tests/50-constraint-OK.asn1.-P b/tests/50-constraint-OK.asn1.-P
index 9bf780e..38416db 100644
--- a/tests/50-constraint-OK.asn1.-P
+++ b/tests/50-constraint-OK.asn1.-P
@@ -8,7 +8,6 @@
 
 typedef INTEGER_t	 Int1_t;
 
-
 /*** <<< FUNC-DECLS [Int1] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Int1;
@@ -109,7 +108,6 @@
 
 typedef Int1_t	 Int2_t;
 
-
 /*** <<< FUNC-DECLS [Int2] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Int2;
@@ -125,7 +123,7 @@
 Int2_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Int2_t *st = sptr;
+	const Int1_t *st = sptr;
 	long value;
 	
 	if(!sptr) {
@@ -229,7 +227,6 @@
 
 typedef Int2_t	 Int3_t;
 
-
 /*** <<< FUNC-DECLS [Int3] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Int3;
@@ -245,7 +242,7 @@
 Int3_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Int3_t *st = sptr;
+	const Int2_t *st = sptr;
 	long value;
 	
 	if(!sptr) {
@@ -349,7 +346,6 @@
 
 typedef Int3_t	 Int4_t;
 
-
 /*** <<< FUNC-DECLS [Int4] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Int4;
@@ -365,7 +361,7 @@
 Int4_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Int4_t *st = sptr;
+	const Int3_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -463,7 +459,6 @@
 
 typedef Int4_t	 Int5_t;
 
-
 /*** <<< FUNC-DECLS [Int5] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Int5;
@@ -479,7 +474,7 @@
 Int5_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Int5_t *st = sptr;
+	const Int4_t *st = sptr;
 	long value;
 	
 	if(!sptr) {
@@ -583,7 +578,6 @@
 
 typedef INTEGER_t	 ExtensibleExtensions_t;
 
-
 /*** <<< FUNC-DECLS [ExtensibleExtensions] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_ExtensibleExtensions;
@@ -599,7 +593,7 @@
 ExtensibleExtensions_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const ExtensibleExtensions_t *st = sptr;
+	const INTEGER_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -697,7 +691,6 @@
 
 typedef IA5String_t	 Str1_t;
 
-
 /*** <<< FUNC-DECLS [Str1] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Str1;
@@ -798,7 +791,6 @@
 
 typedef Str1_t	 Str2_t;
 
-
 /*** <<< FUNC-DECLS [Str2] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Str2;
@@ -812,9 +804,9 @@
 
 static int check_permitted_alphabet_1(const void *sptr) {
 	/* The underlying type is IA5String */
-	const Str1_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -830,7 +822,7 @@
 Str2_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Str2_t *st = sptr;
+	const Str1_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -931,7 +923,6 @@
 
 typedef Str2_t	 Str3_t;
 
-
 /*** <<< FUNC-DECLS [Str3] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Str3;
@@ -956,9 +947,9 @@
 static int check_permitted_alphabet_2(const void *sptr) {
 	int *table = permitted_alphabet_table_2;
 	/* The underlying type is IA5String */
-	const Str2_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -974,7 +965,7 @@
 Str3_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Str3_t *st = sptr;
+	const Str2_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -1075,7 +1066,6 @@
 
 typedef IA5String_t	 PER_Visible_t;
 
-
 /*** <<< FUNC-DECLS [PER-Visible] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_PER_Visible;
@@ -1090,8 +1080,8 @@
 static int check_permitted_alphabet_3(const void *sptr) {
 	/* The underlying type is IA5String */
 	const IA5String_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1107,7 +1097,7 @@
 PER_Visible_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const PER_Visible_t *st = sptr;
+	const IA5String_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -1205,7 +1195,6 @@
 
 typedef PER_Visible_t	 PER_Visible_2_t;
 
-
 /*** <<< FUNC-DECLS [PER-Visible-2] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_PER_Visible_2;
@@ -1219,9 +1208,9 @@
 
 static int check_permitted_alphabet_4(const void *sptr) {
 	/* The underlying type is IA5String */
-	const PER_Visible_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1237,7 +1226,7 @@
 PER_Visible_2_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const PER_Visible_2_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -1335,7 +1324,6 @@
 
 typedef PER_Visible_t	 Not_PER_Visible_1_t;
 
-
 /*** <<< FUNC-DECLS [Not-PER-Visible-1] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Not_PER_Visible_1;
@@ -1349,9 +1337,9 @@
 
 static int check_permitted_alphabet_5(const void *sptr) {
 	/* The underlying type is IA5String */
-	const PER_Visible_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1367,7 +1355,7 @@
 Not_PER_Visible_1_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Not_PER_Visible_1_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -1465,7 +1453,6 @@
 
 typedef PER_Visible_t	 Not_PER_Visible_2_t;
 
-
 /*** <<< FUNC-DECLS [Not-PER-Visible-2] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Not_PER_Visible_2;
@@ -1481,7 +1468,7 @@
 Not_PER_Visible_2_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Not_PER_Visible_2_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -1579,7 +1566,6 @@
 
 typedef PER_Visible_t	 Not_PER_Visible_3_t;
 
-
 /*** <<< FUNC-DECLS [Not-PER-Visible-3] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Not_PER_Visible_3;
@@ -1595,7 +1581,7 @@
 Not_PER_Visible_3_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Not_PER_Visible_3_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -1693,7 +1679,6 @@
 
 typedef PER_Visible_t	 SIZE_but_not_FROM_t;
 
-
 /*** <<< FUNC-DECLS [SIZE-but-not-FROM] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_SIZE_but_not_FROM;
@@ -1707,9 +1692,9 @@
 
 static int check_permitted_alphabet_6(const void *sptr) {
 	/* The underlying type is IA5String */
-	const PER_Visible_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1725,7 +1710,7 @@
 SIZE_but_not_FROM_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const SIZE_but_not_FROM_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -1826,7 +1811,6 @@
 
 typedef PER_Visible_t	 SIZE_and_FROM_t;
 
-
 /*** <<< FUNC-DECLS [SIZE-and-FROM] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_SIZE_and_FROM;
@@ -1840,9 +1824,9 @@
 
 static int check_permitted_alphabet_7(const void *sptr) {
 	/* The underlying type is IA5String */
-	const PER_Visible_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1858,7 +1842,7 @@
 SIZE_and_FROM_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const SIZE_and_FROM_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -1959,7 +1943,6 @@
 
 typedef PER_Visible_t	 Neither_SIZE_nor_FROM_t;
 
-
 /*** <<< FUNC-DECLS [Neither-SIZE-nor-FROM] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Neither_SIZE_nor_FROM;
@@ -1973,9 +1956,9 @@
 
 static int check_permitted_alphabet_8(const void *sptr) {
 	/* The underlying type is IA5String */
-	const PER_Visible_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const IA5String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -1991,7 +1974,7 @@
 Neither_SIZE_nor_FROM_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Neither_SIZE_nor_FROM_t *st = sptr;
+	const PER_Visible_t *st = sptr;
 	
 	if(!sptr) {
 		_ASN_ERRLOG(app_errlog, app_key,
@@ -2089,7 +2072,6 @@
 
 typedef Utf8_2_t	 Utf8_3_t;
 
-
 /*** <<< FUNC-DECLS [Utf8-3] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Utf8_3;
@@ -2115,9 +2097,9 @@
 static int check_permitted_alphabet_9(const void *sptr) {
 	int *table = permitted_alphabet_table_9;
 	/* The underlying type is UTF8String */
-	const Utf8_2_t *st = sptr;
-	uint8_t *ch = st->buf;
-	uint8_t *end = ch + st->size;
+	const UTF8String_t *st = sptr;
+	const uint8_t *ch = st->buf;
+	const uint8_t *end = ch + st->size;
 	
 	for(; ch < end; ch++) {
 		uint8_t cv = *ch;
@@ -2134,7 +2116,7 @@
 Utf8_3_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Utf8_3_t *st = sptr;
+	const Utf8_2_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -2236,7 +2218,6 @@
 
 typedef Utf8_1_t	 Utf8_2_t;
 
-
 /*** <<< FUNC-DECLS [Utf8-2] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Utf8_2;
@@ -2252,7 +2233,7 @@
 Utf8_2_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
 			asn_app_consume_bytes_f *app_errlog, void *app_key) {
 	
-	const Utf8_2_t *st = sptr;
+	const Utf8_1_t *st = sptr;
 	size_t size;
 	
 	if(!sptr) {
@@ -2353,7 +2334,6 @@
 
 typedef UTF8String_t	 Utf8_1_t;
 
-
 /*** <<< FUNC-DECLS [Utf8-1] >>> ***/
 
 extern asn1_TYPE_descriptor_t asn1_DEF_Utf8_1;
