diff --git a/skeletons/ANY.c b/skeletons/ANY.c
index e0add1c..3c82561 100644
--- a/skeletons/ANY.c
+++ b/skeletons/ANY.c
@@ -181,7 +181,7 @@
 
 asn_dec_rval_t
 ANY_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-                asn_per_constraints_t *constraints, void **sptr,
+                const asn_per_constraints_t *constraints, void **sptr,
                 asn_per_data_t *pd) {
     asn_OCTET_STRING_specifics_t *specs =
         td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics
@@ -236,8 +236,9 @@
 }
 
 asn_enc_rval_t
-ANY_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
-                void *sptr, asn_per_outp_t *po) {
+ANY_encode_uper(asn_TYPE_descriptor_t *td,
+                const asn_per_constraints_t *constraints, void *sptr,
+                asn_per_outp_t *po) {
     const ANY_t *st = (const ANY_t *)sptr;
     asn_enc_rval_t er = {0, 0, 0};
     const uint8_t *buf;
diff --git a/skeletons/BIT_STRING.h b/skeletons/BIT_STRING.h
index ffca5f7..f74c433 100644
--- a/skeletons/BIT_STRING.h
+++ b/skeletons/BIT_STRING.h
@@ -13,7 +13,7 @@
 
 typedef struct BIT_STRING_s {
 	uint8_t *buf;	/* BIT STRING body */
-	int size;	/* Size of the above buffer */
+	size_t size;	/* Size of the above buffer */
 
 	int bits_unused;/* Unused trailing bits in the last octet (0..7) */
 
diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
index a9ac6c4..735a907 100644
--- a/skeletons/BOOLEAN.c
+++ b/skeletons/BOOLEAN.c
@@ -249,8 +249,9 @@
 
 asn_dec_rval_t
 BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_dec_rval_t rv;
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
 	BOOLEAN_t *st = (BOOLEAN_t *)*sptr;
 
 	(void)opt_codec_ctx;
@@ -281,8 +282,9 @@
 
 asn_enc_rval_t
 BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
+                    const asn_per_constraints_t *constraints, void *sptr,
+                    asn_per_outp_t *po) {
+    const BOOLEAN_t *st = (const BOOLEAN_t *)sptr;
 	asn_enc_rval_t er = { 0, 0, 0 };
 
 	(void)constraints;
diff --git a/skeletons/ENUMERATED.c b/skeletons/ENUMERATED.c
index ea89745..34bb9bd 100644
--- a/skeletons/ENUMERATED.c
+++ b/skeletons/ENUMERATED.c
@@ -50,9 +50,11 @@
 };
 
 asn_dec_rval_t
-ENUMERATED_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_dec_rval_t rval;
+ENUMERATED_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
+                       asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **sptr,
+                       asn_per_data_t *pd) {
+    asn_dec_rval_t rval;
 	ENUMERATED_t *st = (ENUMERATED_t *)*sptr;
 	long value;
 	void *vptr = &value;
@@ -72,8 +74,9 @@
 
 asn_enc_rval_t
 ENUMERATED_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	ENUMERATED_t *st = (ENUMERATED_t *)sptr;
+                       const asn_per_constraints_t *constraints, void *sptr,
+                       asn_per_outp_t *po) {
+    ENUMERATED_t *st = (ENUMERATED_t *)sptr;
 	long value;
 
 	if(asn_INTEGER2long(st, &value))
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 81e7964..4e085fb 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -565,11 +565,12 @@
 
 asn_dec_rval_t
 INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
+                    const asn_per_constraints_t *constraints, void **sptr,
+                    asn_per_data_t *pd) {
+    asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
 	asn_dec_rval_t rval = { RC_OK, 0 };
 	INTEGER_t *st = (INTEGER_t *)*sptr;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	int repeat;
 
 	(void)opt_codec_ctx;
@@ -676,13 +677,14 @@
 
 asn_enc_rval_t
 INTEGER_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
+                    const asn_per_constraints_t *constraints, void *sptr,
+                    asn_per_outp_t *po) {
+    asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
 	asn_enc_rval_t er;
 	INTEGER_t *st = (INTEGER_t *)sptr;
 	const uint8_t *buf;
 	const uint8_t *end;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	long value = 0;
 	unsigned long v = 0;
 
diff --git a/skeletons/INTEGER_oer.c b/skeletons/INTEGER_oer.c
index b90698f..3462f7c 100644
--- a/skeletons/INTEGER_oer.c
+++ b/skeletons/INTEGER_oer.c
@@ -11,7 +11,7 @@
 
 asn_dec_rval_t
 INTEGER_decode_oer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void **sptr,
+                   const asn_oer_constraints_t *constraints, void **sptr,
                    const void *ptr, size_t size) {
     asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
     asn_dec_rval_t rval = {RC_OK, 0};
@@ -99,7 +99,7 @@
  */
 asn_enc_rval_t
 INTEGER_encode_oer(asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void *sptr,
+                   const asn_oer_constraints_t *constraints, void *sptr,
                    asn_app_consume_bytes_f *cb, void *app_key) {
     const INTEGER_t *st = sptr;
     asn_enc_rval_t er;
diff --git a/skeletons/NULL.c b/skeletons/NULL.c
index 2482eb7..2a88e7e 100644
--- a/skeletons/NULL.c
+++ b/skeletons/NULL.c
@@ -123,8 +123,9 @@
 
 asn_dec_rval_t
 NULL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_dec_rval_t rv;
+                 const asn_per_constraints_t *constraints, void **sptr,
+                 asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
 
 	(void)opt_codec_ctx;
 	(void)td;
@@ -150,9 +151,10 @@
 }
 
 asn_enc_rval_t
-NULL_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
-		void *sptr, asn_per_outp_t *po) {
-	asn_enc_rval_t er;
+NULL_encode_uper(asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void *sptr,
+                 asn_per_outp_t *po) {
+    asn_enc_rval_t er;
 
 	(void)td;
 	(void)constraints;
diff --git a/skeletons/NativeEnumerated.c b/skeletons/NativeEnumerated.c
index e9ce38f..9de6dbf 100644
--- a/skeletons/NativeEnumerated.c
+++ b/skeletons/NativeEnumerated.c
@@ -85,12 +85,12 @@
 
 asn_dec_rval_t
 NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
-	asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
+	asn_TYPE_descriptor_t *td, const asn_per_constraints_t *constraints,
 	void **sptr, asn_per_data_t *pd) {
 	asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
 	asn_dec_rval_t rval = { RC_OK, 0 };
 	long *native = (long *)*sptr;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	long value;
 
 	(void)opt_codec_ctx;
@@ -151,11 +151,12 @@
 
 asn_enc_rval_t
 NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
+                             const asn_per_constraints_t *constraints,
+                             void *sptr, asn_per_outp_t *po) {
+    asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
 	asn_enc_rval_t er;
 	long native, value;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	int inext = 0;
 	asn_INTEGER_enum_map_t key;
 	const asn_INTEGER_enum_map_t *kf;
diff --git a/skeletons/NativeInteger.c b/skeletons/NativeInteger.c
index fea9b9f..c49c6d2 100644
--- a/skeletons/NativeInteger.c
+++ b/skeletons/NativeInteger.c
@@ -248,10 +248,10 @@
 
 asn_dec_rval_t
 NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
-	asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-
-	asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
+                          asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void **sptr,
+                          asn_per_data_t *pd) {
+    asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
 	asn_dec_rval_t rval;
 	long *native = (long *)*sptr;
 	INTEGER_t tmpint;
@@ -284,8 +284,9 @@
 
 asn_enc_rval_t
 NativeInteger_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
+                          const asn_per_constraints_t *constraints, void *sptr,
+                          asn_per_outp_t *po) {
+    asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics;
 	asn_enc_rval_t er;
 	long native;
 	INTEGER_t tmpint;
diff --git a/skeletons/NativeInteger_oer.c b/skeletons/NativeInteger_oer.c
index 7633a77..8cd9fec 100644
--- a/skeletons/NativeInteger_oer.c
+++ b/skeletons/NativeInteger_oer.c
@@ -12,8 +12,8 @@
 asn_dec_rval_t
 NativeInteger_decode_oer(asn_codec_ctx_t *opt_codec_ctx,
                          asn_TYPE_descriptor_t *td,
-                         asn_oer_constraints_t *constraints, void **nint_ptr,
-                         const void *ptr, size_t size) {
+                         const asn_oer_constraints_t *constraints,
+                         void **nint_ptr, const void *ptr, size_t size) {
     asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
     asn_dec_rval_t rval = {RC_OK, 0};
     long *native = (long *)*nint_ptr;
@@ -68,8 +68,8 @@
  */
 asn_enc_rval_t
 NativeInteger_encode_oer(asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void *sptr,
-                   asn_app_consume_bytes_f *cb, void *app_key) {
+                         const asn_oer_constraints_t *constraints, void *sptr,
+                         asn_app_consume_bytes_f *cb, void *app_key) {
     asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics;
     INTEGER_t tmpint;
     long native;
diff --git a/skeletons/NativeReal.c b/skeletons/NativeReal.c
index 6297b6b..0278a92 100644
--- a/skeletons/NativeReal.c
+++ b/skeletons/NativeReal.c
@@ -206,9 +206,10 @@
  */
 asn_dec_rval_t
 NativeReal_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
-	asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
-		void **dbl_ptr, asn_per_data_t *pd) {
-	double *Dbl = (double *)*dbl_ptr;
+                       asn_TYPE_descriptor_t *td,
+                       const asn_per_constraints_t *constraints, void **dbl_ptr,
+                       asn_per_data_t *pd) {
+    double *Dbl = (double *)*dbl_ptr;
 	asn_dec_rval_t rval;
 	REAL_t tmp;
 	void *ptmp = &tmp;
@@ -246,8 +247,9 @@
  */
 asn_enc_rval_t
 NativeReal_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	double Dbl = *(const double *)sptr;
+                       const asn_per_constraints_t *constraints, void *sptr,
+                       asn_per_outp_t *po) {
+    double Dbl = *(const double *)sptr;
 	asn_enc_rval_t erval;
 	REAL_t tmp;
 
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index 6e19e0f..a3d9e72 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -237,9 +237,9 @@
 static ssize_t
 OBJECT_IDENTIFIER__dump_body(const OBJECT_IDENTIFIER_t *st, asn_app_consume_bytes_f *cb, void *app_key) {
 	ssize_t wrote_len = 0;
-	int startn;
+	size_t startn;
 	int add = 0;
-	int i;
+	size_t i;
 
 	for(i = 0, startn = 0; i < st->size; i++) {
 		uint8_t b = st->buf[i];
@@ -379,7 +379,7 @@
 	int num_arcs = 0;
 	int startn = 0;
 	int add = 0;
-	int i;
+	size_t i;
 
 	if(!oid || !oid->buf || (arc_slots && arc_type_size <= 1)) {
 		errno = EINVAL;
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index 597d2b3..c145631 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -124,14 +124,14 @@
  * No, I am not going to explain what the following stuff is.
  */
 struct _stack_el {
-	ber_tlv_len_t	left;	/* What's left to read (or -1) */
-	ber_tlv_len_t	got;	/* What was actually processed */
-	int	cont_level;	/* Depth of subcontainment */
-	int	want_nulls;	/* Want null "end of content" octets? */
-	int	bits_chopped;	/* Flag in BIT STRING mode */
-	ber_tlv_tag_t	tag;	/* For debugging purposes */
-	struct _stack_el *prev;
-	struct _stack_el *next;
+    ber_tlv_len_t left;     /* What's left to read (or -1) */
+    ber_tlv_len_t got;      /* What was actually processed */
+    size_t cont_level;      /* Depth of subcontainment */
+    int want_nulls;         /* Want null "end of content" octets? */
+    int bits_chopped;       /* Flag in BIT STRING mode */
+    ber_tlv_tag_t tag;      /* For debugging purposes */
+    struct _stack_el *prev;
+    struct _stack_el *next;
 };
 struct _stack {
 	struct _stack_el *tail;
@@ -344,7 +344,7 @@
 		case ASN_OSUBV_STR:
 		default:
 			if(sel) {
-				int level = sel->cont_level;
+				size_t level = sel->cont_level;
 				if(level < td->all_tags_count) {
 					expected_tag = td->all_tags[level];
 					break;
@@ -801,8 +801,8 @@
 	uint8_t *buf;
 
 	/* Reallocate buffer according to high cap estimation */
-	ssize_t _ns = st->size + (chunk_size + 1) / 2;
-	void *nptr = REALLOC(st->buf, _ns + 1);
+	size_t new_size = st->size + (chunk_size + 1) / 2;
+	void *nptr = REALLOC(st->buf, new_size + 1);
 	if(!nptr) return -1;
 	st->buf = (uint8_t *)nptr;
 	buf = st->buf + st->size;
@@ -859,7 +859,7 @@
 	}
 
 	st->size = buf - st->buf;	/* Adjust the buffer size */
-	assert(st->size <= _ns);
+	assert(st->size <= new_size);
 	st->buf[st->size] = 0;		/* Courtesy termination */
 
 	return (chunk_stop - (const char *)chunk_buf);	/* Converted size */
@@ -876,8 +876,8 @@
 	uint8_t *buf;
 
 	/* Reallocate buffer according to high cap estimation */
-	ssize_t _ns = st->size + (chunk_size + 7) / 8;
-	void *nptr = REALLOC(st->buf, _ns + 1);
+	size_t new_size = st->size + (chunk_size + 7) / 8;
+	void *nptr = REALLOC(st->buf, new_size + 1);
 	if(!nptr) return -1;
 	st->buf = (uint8_t *)nptr;
 	buf = st->buf + st->size;
@@ -921,7 +921,7 @@
 		st->bits_unused = bits_unused;
 	}
 
-	assert(st->size <= _ns);
+	assert(st->size <= new_size);
 	st->buf[st->size] = 0;		/* Courtesy termination */
 
 	return chunk_size;	/* Converted in full */
@@ -977,8 +977,8 @@
 	uint8_t *buf;
 
 	/* Reallocate buffer */
-	ssize_t _ns = st->size + chunk_size;
-	void *nptr = REALLOC(st->buf, _ns + 1);
+	size_t new_size = st->size + chunk_size;
+	void *nptr = REALLOC(st->buf, new_size + 1);
 	if(!nptr) return -1;
 	st->buf = (uint8_t *)nptr;
 	buf = st->buf + st->size;
@@ -1101,7 +1101,7 @@
 	}
 
 	st->size = buf - st->buf;
-	assert(st->size <= _ns);
+	assert(st->size <= new_size);
 	st->buf[st->size] = 0;		/* Courtesy termination */
 
 	return chunk_size;	/* Converted in full */
@@ -1205,7 +1205,7 @@
 static int
 OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf,
 		size_t units, unsigned int bpc, unsigned int unit_bits,
-		long lb, long ub, asn_per_constraints_t *pc) {
+		long lb, long ub, const asn_per_constraints_t *pc) {
 	uint8_t *end = buf + units * bpc;
 
 	ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d",
@@ -1269,7 +1269,7 @@
 static int
 OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf,
 		size_t units, unsigned int bpc, unsigned int unit_bits,
-		long lb, long ub, asn_per_constraints_t *pc) {
+		long lb, long ub, const asn_per_constraints_t *pc) {
 	const uint8_t *end = buf + units * bpc;
 
 	ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)",
@@ -1335,16 +1335,16 @@
 
 asn_dec_rval_t
 OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
-	asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
-	void **sptr, asn_per_data_t *pd) {
-
-	asn_OCTET_STRING_specifics_t *specs = td->specifics
+                         asn_TYPE_descriptor_t *td,
+                         const asn_per_constraints_t *constraints, void **sptr,
+                         asn_per_data_t *pd) {
+    asn_OCTET_STRING_specifics_t *specs = td->specifics
 		? (asn_OCTET_STRING_specifics_t *)td->specifics
 		: &asn_SPC_OCTET_STRING_specs;
-	asn_per_constraints_t *pc = constraints ? constraints
-				: td->per_constraints;
-	asn_per_constraint_t *cval;
-	asn_per_constraint_t *csiz;
+    const asn_per_constraints_t *pc =
+        constraints ? constraints : td->per_constraints;
+    const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
 	asn_dec_rval_t rval = { RC_OK, 0 };
 	BIT_STRING_t *st = (BIT_STRING_t *)*sptr;
 	ssize_t consumed_myself = 0;
@@ -1507,15 +1507,15 @@
 
 asn_enc_rval_t
 OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td,
-        asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-
-	asn_OCTET_STRING_specifics_t *specs = td->specifics
+                         const asn_per_constraints_t *constraints, void *sptr,
+                         asn_per_outp_t *po) {
+    asn_OCTET_STRING_specifics_t *specs = td->specifics
 		? (asn_OCTET_STRING_specifics_t *)td->specifics
 		: &asn_SPC_OCTET_STRING_specs;
-	asn_per_constraints_t *pc = constraints ? constraints
+	const asn_per_constraints_t *pc = constraints ? constraints
 				: td->per_constraints;
-	asn_per_constraint_t *cval;
-	asn_per_constraint_t *csiz;
+	const asn_per_constraint_t *cval;
+	const asn_per_constraint_t *csiz;
 	const BIT_STRING_t *st = (const BIT_STRING_t *)sptr;
 	asn_enc_rval_t er = { 0, 0, 0 };
 	int inext = 0;		/* Lies not within extension root */
diff --git a/skeletons/OCTET_STRING.h b/skeletons/OCTET_STRING.h
index 59f8848..63e7da8 100644
--- a/skeletons/OCTET_STRING.h
+++ b/skeletons/OCTET_STRING.h
@@ -13,7 +13,7 @@
 
 typedef struct OCTET_STRING {
 	uint8_t *buf;	/* Buffer with consecutive OCTET_STRING bits */
-	int size;	/* Size of the buffer */
+	size_t size;	/* Size of the buffer */
 
 	asn_struct_ctx_t _asn_ctx;	/* Parsing across buffer boundaries */
 } OCTET_STRING_t;
diff --git a/skeletons/OCTET_STRING_oer.c b/skeletons/OCTET_STRING_oer.c
index 7fa76c0..b30dbe7 100644
--- a/skeletons/OCTET_STRING_oer.c
+++ b/skeletons/OCTET_STRING_oer.c
@@ -11,15 +11,15 @@
 
 asn_dec_rval_t
 OCTET_STRING_decode_oer(asn_codec_ctx_t *opt_codec_ctx,
-                         asn_TYPE_descriptor_t *td,
-                         asn_oer_constraints_t *constraints, void **sptr,
-                         const void *ptr, size_t size) {
+                        asn_TYPE_descriptor_t *td,
+                        const asn_oer_constraints_t *constraints, void **sptr,
+                        const void *ptr, size_t size) {
     asn_OCTET_STRING_specifics_t *specs =
         td->specifics
             ? (asn_OCTET_STRING_specifics_t *)td->specifics
             : (asn_OCTET_STRING_specifics_t *)&asn_DEF_OCTET_STRING.specifics;
     OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
-    asn_oer_constraints_t *cts =
+    const asn_oer_constraints_t *cts =
         constraints ? constraints : td->oer_constraints;
     ssize_t ct_size = cts ? cts->size : -1;
     asn_dec_rval_t rval = {RC_OK, 0};
@@ -102,14 +102,14 @@
  */
 asn_enc_rval_t
 OCTET_STRING_encode_oer(asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void *sptr,
-                   asn_app_consume_bytes_f *cb, void *app_key) {
+                        const asn_oer_constraints_t *constraints, void *sptr,
+                        asn_app_consume_bytes_f *cb, void *app_key) {
     asn_OCTET_STRING_specifics_t *specs =
         td->specifics
             ? (asn_OCTET_STRING_specifics_t *)td->specifics
             : (asn_OCTET_STRING_specifics_t *)&asn_DEF_OCTET_STRING.specifics;
     OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
-    asn_oer_constraints_t *cts =
+    const asn_oer_constraints_t *cts =
         constraints ? constraints : td->oer_constraints;
     ssize_t ct_size = cts ? cts->size : -1;
     asn_enc_rval_t er = {0, 0, 0};
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index 1204415..4761b6d 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -391,17 +391,18 @@
 }
 
 asn_dec_rval_t
-REAL_decode_uper(asn_codec_ctx_t *opt_codec_ctx,
-	asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints,
-	void **sptr, asn_per_data_t *pd) {
-	(void)constraints;	/* No PER visible constraints */
+REAL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+                 const asn_per_constraints_t *constraints, void **sptr,
+                 asn_per_data_t *pd) {
+    (void)constraints;	/* No PER visible constraints */
 	return OCTET_STRING_decode_uper(opt_codec_ctx, td, 0, sptr, pd);
 }
 
 asn_enc_rval_t
 REAL_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	(void)constraints;	/* No PER visible constraints */
+                 const asn_per_constraints_t *constraints, void *sptr,
+                 asn_per_outp_t *po) {
+    (void)constraints;	/* No PER visible constraints */
 	return OCTET_STRING_encode_uper(td, 0, sptr, po);
 }
 
@@ -538,7 +539,7 @@
 	sign = (octv & 0x40);	/* bit 7 */
 	scaleF = (octv & 0x0C) >> 2;	/* bits 4 to 3 */
 
-	if(st->size <= (int)(1 + (octv & 0x03))) {
+	if(st->size <= 1 + (octv & 0x03)) {
 		errno = EINVAL;
 		return -1;
 	}
@@ -546,7 +547,7 @@
 	elen = (octv & 0x03);	/* bits 2 to 1; 8.5.6.4 */
 	if(elen == 0x03) {	/* bits 2 to 1 = 11; 8.5.6.4, case d) */
 		elen = st->buf[1];	/* unsigned binary number */
-		if(elen == 0 || st->size <= (int)(2 + elen)) {
+		if(elen == 0 || st->size <= (2 + elen)) {
 			errno = EINVAL;
 			return -1;
 		}
diff --git a/skeletons/RELATIVE-OID.c b/skeletons/RELATIVE-OID.c
index 6fc9eac..3d1d415 100644
--- a/skeletons/RELATIVE-OID.c
+++ b/skeletons/RELATIVE-OID.c
@@ -57,8 +57,8 @@
 RELATIVE_OID__dump_body(const RELATIVE_OID_t *st, asn_app_consume_bytes_f *cb, void *app_key) {
 	ssize_t wrote = 0;
 	ssize_t ret;
-	int startn;
-	int i;
+	size_t startn;
+	size_t i;
 
 	for(i = 0, startn = 0; i < st->size; i++) {
 		uint8_t b = st->buf[i];
@@ -179,8 +179,8 @@
 	void *arcs, unsigned int arc_type_size, unsigned int arc_slots) {
 	void *arcs_end = (char *)arcs + (arc_slots * arc_type_size);
 	int num_arcs = 0;
-	int startn = 0;
-	int i;
+	size_t startn = 0;
+	size_t i;
 
 	if(!roid || !roid->buf) {
 		errno = EINVAL;
diff --git a/skeletons/asn_codecs_prim.h b/skeletons/asn_codecs_prim.h
index 0f683fd..7b75029 100644
--- a/skeletons/asn_codecs_prim.h
+++ b/skeletons/asn_codecs_prim.h
@@ -13,7 +13,7 @@
 
 typedef struct ASN__PRIMITIVE_TYPE_s {
 	uint8_t *buf;	/* Buffer with consecutive primitive encoding bytes */
-	int size;	/* Size of the buffer */
+    size_t size;    /* Size of the buffer */
 } ASN__PRIMITIVE_TYPE_t;	/* Do not use this type directly! */
 
 asn_struct_free_f ASN__PRIMITIVE_TYPE_free;
diff --git a/skeletons/ber_decoder.c b/skeletons/ber_decoder.c
index b3a6329..63c65bc 100644
--- a/skeletons/ber_decoder.c
+++ b/skeletons/ber_decoder.c
@@ -112,7 +112,7 @@
 		td->name, (long)size, tag_mode, step, tagno);
 	/* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */
 
-	if(tag_mode == 0 && tagno == td->tags_count) {
+	if(tag_mode == 0 && tagno == (int)td->tags_count) {
 		/*
 		 * This must be the _untagged_ ANY type,
 		 * which outermost tag isn't known in advance.
@@ -134,9 +134,9 @@
 			(long)(tag_len + len_len));
 		ADVANCE(tag_len + len_len);
 	} else {
-		assert(tagno < td->tags_count);	/* At least one loop */
+		assert(tagno < (int)td->tags_count);	/* At least one loop */
 	}
-	for((void)tagno; tagno < td->tags_count; tagno++, step++) {
+	for((void)tagno; tagno < (int)td->tags_count; tagno++, step++) {
 
 		/*
 		 * Fetch and process T from TLV.
@@ -186,7 +186,7 @@
 		 * If this one is the last one, check that the tag form
 		 * matches the one given in descriptor.
 		 */
-		if(tagno < (td->tags_count - 1)) {
+		if(tagno < ((int)td->tags_count - 1)) {
 			if(tlv_constr == 0) {
 				ASN_DEBUG("tlv_constr = %d, expfail",
 					tlv_constr);
diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index 158101b..04cc4b7 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -376,7 +376,7 @@
 	 * If the structure was not initialized, it cannot be encoded:
 	 * can't deduce what to encode in the choice type.
 	 */
-	if(present <= 0 || present > td->elements_count) {
+	if(present <= 0 || (unsigned)present > td->elements_count) {
 		if(present == 0 && td->elements_count == 0) {
 			/* The CHOICE is empty?! */
 			erval.encoded = 0;
@@ -457,7 +457,7 @@
 	 */
 	present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size);
 
-	if(present > 0 || present <= td->elements_count) {
+	if(present > 0 && (unsigned)present <= td->elements_count) {
 		const asn_TYPE_member_t *elm = &td->elements[present-1];
 		const void *memb_ptr;
 
@@ -493,7 +493,7 @@
 	 * Figure out which CHOICE element is encoded.
 	 */
 	present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
-	if(present > 0 && present <= td->elements_count) {
+	if(present > 0 && (unsigned)present <= td->elements_count) {
 		asn_TYPE_member_t *elm = &td->elements[present-1];
 		const void *memb_ptr;
 
@@ -561,7 +561,7 @@
 
 	asn_dec_rval_t rval;		/* Return value of a decoder */
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
-	int edx;			/* Element index */
+	size_t edx;			/* Element index */
 
 	/*
 	 * Create the target structure if it is not present already.
@@ -787,7 +787,7 @@
 	 */
 	present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size);
 
-	if(present <= 0 || present > td->elements_count) {
+	if(present <= 0 || (unsigned)present > td->elements_count) {
 		ASN__ENCODE_FAILED;
 	}  else {
 		asn_enc_rval_t tmper;
@@ -826,10 +826,11 @@
 
 asn_dec_rval_t
 CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
 	asn_dec_rval_t rv;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	asn_TYPE_member_t *elm;	/* CHOICE's element */
 	void *memb_ptr;
 	void **memb_ptr2;
@@ -870,7 +871,7 @@
 		value = uper_get_nsnnwn(pd);
 		if(value < 0) ASN__DECODE_STARVED;
 		value += specs->ext_start;
-		if(value >= td->elements_count)
+		if((unsigned)value >= td->elements_count)
 			ASN__DECODE_FAILED;
 	}
 
@@ -904,13 +905,14 @@
 			elm->name, td->name, rv.code);
 	return rv;
 }
-   
+
 asn_enc_rval_t
 CHOICE_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
+                   const asn_per_constraints_t *constraints, void *sptr,
+                   asn_per_outp_t *po) {
+    asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
 	asn_TYPE_member_t *elm;	/* CHOICE's element */
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	void *memb_ptr;
 	int present;
 	int present_enc;
@@ -930,7 +932,7 @@
 	 * If the structure was not initialized properly, it cannot be encoded:
 	 * can't deduce what to encode in the choice type.
 	 */
-	if(present <= 0 || present > td->elements_count)
+	if(present <= 0 || (unsigned)present > td->elements_count)
 		ASN__ENCODE_FAILED;
 	else
 		present--;
@@ -1005,7 +1007,7 @@
 	/*
 	 * Print that element.
 	 */
-	if(present > 0 && present <= td->elements_count) {
+	if(present > 0 && (unsigned)present <= td->elements_count) {
 		asn_TYPE_member_t *elm = &td->elements[present-1];
 		const void *memb_ptr;
 
@@ -1048,7 +1050,7 @@
 	/*
 	 * Free that element.
 	 */
-	if(present > 0 && present <= td->elements_count) {
+	if(present > 0 && (unsigned)present <= td->elements_count) {
 		asn_TYPE_member_t *elm = &td->elements[present-1];
 		void *memb_ptr;
 
diff --git a/skeletons/constr_CHOICE.h b/skeletons/constr_CHOICE.h
index e824a22..85b06ea 100644
--- a/skeletons/constr_CHOICE.h
+++ b/skeletons/constr_CHOICE.h
@@ -25,15 +25,15 @@
 	 * Tags to members mapping table.
 	 */
 	const asn_TYPE_tag2member_t *tag2el;
-	int tag2el_count;
+    unsigned tag2el_count;
 
-	/* Canonical ordering of CHOICE elements, for PER */
+    /* Canonical ordering of CHOICE elements, for PER */
 	int *canonical_order;
 
 	/*
 	 * Extensions-related stuff.
 	 */
-	int ext_start;		/* First member of extensions, or -1 */
+	signed ext_start;		/* First member of extensions, or -1 */
 } asn_CHOICE_specifics_t;
 
 /*
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index 5923023..15c12e2 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -66,8 +66,8 @@
  * Check whether we are inside the extensions group.
  */
 #define	IN_EXTENSION_GROUP(specs, memb_idx)	\
-	( ((memb_idx) > (specs)->ext_after)	\
-	&&((memb_idx) < (specs)->ext_before))
+	( (((signed)(memb_idx)) > (specs)->ext_after)	\
+	&&(((signed)(memb_idx)) < (specs)->ext_before))
 
 
 /*
@@ -127,7 +127,7 @@
 	asn_dec_rval_t rval;	/* Return code from subparsers */
 
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
-	int edx;			/* SEQUENCE element's index */
+	size_t edx;			/* SEQUENCE element's index */
 
 	ASN_DEBUG("Decoding %s as SEQUENCE", td->name);
 	
@@ -186,14 +186,14 @@
 		 * that member:
 		 * 	step = (<member_number> * 2 + <microphase>).
 		 */
-	  for(edx = (ctx->step >> 1); edx < td->elements_count;
+	  for(edx = ((size_t)ctx->step >> 1); edx < td->elements_count;
 			edx++, ctx->step = (ctx->step & ~1) + 2) {
 		void *memb_ptr;		/* Pointer to the member */
 		void **memb_ptr2;	/* Pointer to that pointer */
 		ssize_t tag_len;	/* Length of TLV's T */
-		int opt_edx_end;	/* Next non-optional element */
+		size_t opt_edx_end;	/* Next non-optional element */
+		size_t n;
 		int use_bsearch;
-		int n;
 
 		if(ctx->step & 1)
 			goto microphase2;
@@ -215,7 +215,7 @@
 			||
 			/* All extensions are optional */
 			(IN_EXTENSION_GROUP(specs, edx)
-				&& specs->ext_before > td->elements_count)
+				&& specs->ext_before > (signed)td->elements_count)
 		   )
 		) {
 			ASN_DEBUG("End of SEQUENCE %s", td->name);
@@ -247,14 +247,14 @@
 				else
 					RETURN(RC_WMORE);
 			} else if(((const uint8_t *)ptr)[1] == 0) {
-			ASN_DEBUG("edx = %d, opt = %d, ec=%d",
+			ASN_DEBUG("edx = %zu, opt = %d, ec=%d",
 				edx, elements[edx].optional,
 				td->elements_count);
 				if((edx + elements[edx].optional
 					== td->elements_count)
 				|| (IN_EXTENSION_GROUP(specs, edx)
 					&& specs->ext_before
-						> td->elements_count)) {
+						> (signed)td->elements_count)) {
 					/*
 					 * Yeah, baby! Found the terminator
 					 * of the indefinite length structure.
@@ -320,7 +320,7 @@
 			if(t2m) {
 				const asn_TYPE_tag2member_t *best = 0;
 				const asn_TYPE_tag2member_t *t2m_f, *t2m_l;
-				int edx_max = edx + elements[edx].optional;
+				size_t edx_max = edx + elements[edx].optional;
 				/*
 				 * Rewind to the first element with that tag,
 				 * `cause bsearch() does not guarantee order.
@@ -516,7 +516,7 @@
 	size_t computed_size = 0;
 	asn_enc_rval_t erval;
 	ssize_t ret;
-	int edx;
+	size_t edx;
 
 	ASN_DEBUG("%s %s as SEQUENCE",
 		cb?"Encoding":"Estimating", td->name);
@@ -623,8 +623,7 @@
 
 	asn_dec_rval_t rval;		/* Return value from a decoder */
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
-	int edx;			/* Element index */
-	int edx_end;
+	size_t edx;			/* Element index */
 
 	/*
 	 * Create the target structure if it is not present already.
@@ -653,7 +652,6 @@
 		ssize_t ch_size;		/* Chunk size */
 		xer_check_tag_e tcv;		/* Tag check value */
 		asn_TYPE_member_t *elm;
-		int n;
 
 		/*
 		 * Go inside the inner member of a sequence.
@@ -746,7 +744,7 @@
 				   /* All extensions are optional */
 				   (IN_EXTENSION_GROUP(specs, edx)
 					&& specs->ext_before
-						> td->elements_count)
+						> (signed)td->elements_count)
 				) {
 					XER_ADVANCE(ch_size);
 					ctx->phase = 4;	/* Phase out */
@@ -777,7 +775,8 @@
 				/*
 				 * Search which member corresponds to this tag.
 				 */
-				edx_end = edx + elements[edx].optional + 1;
+                size_t n;
+                size_t edx_end = edx + elements[edx].optional + 1;
 				if(edx_end > td->elements_count)
 					edx_end = td->elements_count;
 				for(n = edx; n < edx_end; n++) {
@@ -855,7 +854,7 @@
 		asn_app_consume_bytes_f *cb, void *app_key) {
 	asn_enc_rval_t er;
 	int xcan = (flags & XER_F_CANONICAL);
-	int edx;
+	size_t edx;
 
 	if(!sptr)
 		ASN__ENCODE_FAILED;
@@ -903,7 +902,7 @@
 int
 SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
 		asn_app_consume_bytes_f *cb, void *app_key) {
-	int edx;
+	size_t edx;
 	int ret;
 
 	if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
@@ -950,7 +949,7 @@
 
 void
 SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) {
-	int edx;
+	size_t edx;
 
 	if(!td || !sptr)
 		return;
@@ -978,7 +977,7 @@
 int
 SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 		asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	int edx;
+	size_t edx;
 
 	if(!sptr) {
 		ASN__CTFAIL(app_key, td, sptr,
@@ -1029,14 +1028,15 @@
 
 asn_dec_rval_t
 SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
+                     const asn_per_constraints_t *constraints, void **sptr,
+                     asn_per_data_t *pd) {
+    asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
 	void *st = *sptr;	/* Target structure. */
 	int extpresent;		/* Extension additions are present */
 	uint8_t *opres;		/* Presence of optional root members */
 	asn_per_data_t opmd;
 	asn_dec_rval_t rv;
-	int edx;
+	size_t edx;
 
 	(void)constraints;
 
@@ -1249,7 +1249,7 @@
 		= (asn_SEQUENCE_specifics_t *)td->specifics;
 	int exts_present = 0;
 	int exts_count = 0;
-	int edx;
+	size_t edx;
 
 	if(specs->ext_before < 0)
 		return 0;
@@ -1296,13 +1296,14 @@
 
 asn_enc_rval_t
 SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_SEQUENCE_specifics_t *specs
+                     const asn_per_constraints_t *constraints, void *sptr,
+                     asn_per_outp_t *po) {
+    asn_SEQUENCE_specifics_t *specs
 		= (asn_SEQUENCE_specifics_t *)td->specifics;
 	asn_enc_rval_t er;
 	int n_extensions;
-	int edx;
-	int i;
+	size_t edx;
+	size_t i;
 
 	(void)constraints;
 
@@ -1320,7 +1321,10 @@
 	 */
 	if(specs->ext_before >= 0) {
 		n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0);
-		per_put_few_bits(po, n_extensions ? 1 : 0, 1);
+        if(n_extensions < 0)
+			ASN__ENCODE_FAILED;
+		if(per_put_few_bits(po, n_extensions ? 1 : 0, 1))
+			ASN__ENCODE_FAILED;
 	} else {
 		n_extensions = 0;	/* There are no extensions to encode */
 	}
diff --git a/skeletons/constr_SEQUENCE.h b/skeletons/constr_SEQUENCE.h
index fb96734..a9890de 100644
--- a/skeletons/constr_SEQUENCE.h
+++ b/skeletons/constr_SEQUENCE.h
@@ -22,21 +22,21 @@
 	 * Tags to members mapping table (sorted).
 	 */
 	const asn_TYPE_tag2member_t *tag2el;
-	int tag2el_count;
+    unsigned tag2el_count;
 
-	/*
+    /*
 	 * Optional members of the extensions root (roms) or additions (aoms).
 	 * Meaningful for PER.
 	 */
-	const int *oms;		/* Optional MemberS */
-	int  roms_count;	/* Root optional members count */
-	int  aoms_count;	/* Additions optional members count */
+    const int *oms;         /* Optional MemberS */
+    unsigned roms_count;    /* Root optional members count */
+    unsigned aoms_count;    /* Additions optional members count */
 
-	/*
+    /*
 	 * Description of an extensions group.
 	 */
-	int ext_after;		/* Extensions start after this member */
-	int ext_before;		/* Extensions stop before this member */
+    signed ext_after;       /* Extensions start after this member */
+    signed ext_before;      /* Extensions stop before this member */
 } asn_SEQUENCE_specifics_t;
 
 
diff --git a/skeletons/constr_SEQUENCE_OF.c b/skeletons/constr_SEQUENCE_OF.c
index 8a08ee8..73a7258 100644
--- a/skeletons/constr_SEQUENCE_OF.c
+++ b/skeletons/constr_SEQUENCE_OF.c
@@ -142,9 +142,10 @@
 
 asn_enc_rval_t
 SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) {
-	asn_anonymous_sequence_ *list;
-	asn_per_constraint_t *ct;
+                        const asn_per_constraints_t *constraints, void *sptr,
+                        asn_per_outp_t *po) {
+    asn_anonymous_sequence_ *list;
+	const asn_per_constraint_t *ct;
 	asn_enc_rval_t er;
 	asn_TYPE_member_t *elm = td->elements;
 	int seq;
diff --git a/skeletons/constr_SEQUENCE_oer.c b/skeletons/constr_SEQUENCE_oer.c
index bfc48bd..5fb697c 100644
--- a/skeletons/constr_SEQUENCE_oer.c
+++ b/skeletons/constr_SEQUENCE_oer.c
@@ -37,8 +37,8 @@
  * Check whether we are inside the extensions group.
  */
 #define IN_EXTENSION_GROUP(specs, memb_idx)     \
-        ( ((memb_idx) > (specs)->ext_after)     \
-        &&((memb_idx) < (specs)->ext_before))
+        ( (((ssize_t)(memb_idx)) > (specs)->ext_after)     \
+        &&(((ssize_t)(memb_idx)) < (specs)->ext_before))
 
 /*
  * Return a standardized complex structure.
@@ -70,8 +70,8 @@
 
 asn_dec_rval_t
 SEQUENCE_decode_oer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void **struct_ptr,
-                   const void *ptr, size_t size) {
+                    const asn_oer_constraints_t *constraints, void **struct_ptr,
+                    const void *ptr, size_t size) {
     asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
     asn_dec_rval_t rval = {RC_OK, 0};
     void *st = *struct_ptr; /* Target structure */
@@ -80,6 +80,7 @@
 
 
     (void)opt_codec_ctx;
+    (void)constraints;
     (void)specs;
 
     /*
@@ -378,8 +379,8 @@
  */
 asn_enc_rval_t
 SEQUENCE_encode_oer(asn_TYPE_descriptor_t *td,
-                   asn_oer_constraints_t *constraints, void *sptr,
-                   asn_app_consume_bytes_f *cb, void *app_key) {
+                    const asn_oer_constraints_t *constraints, void *sptr,
+                    asn_app_consume_bytes_f *cb, void *app_key) {
     asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics;
     size_t computed_size = 0;
     int has_extensions_bit = (specs->ext_before >= 0);
@@ -388,6 +389,8 @@
     size_t edx;
     int ret;
 
+    (void)constraints;
+
     if(preamble_bits) {
         asn_per_outp_t preamble;
 
@@ -396,8 +399,8 @@
         preamble.op_key = app_key;
 
         if(has_extensions_bit) {
-            for(edx = specs->ext_after + 1; edx < specs->ext_before - 1;
-                edx++) {
+            for(edx = specs->ext_after + 1;
+                (ssize_t)edx < specs->ext_before - 1; edx++) {
                 asn_TYPE_member_t *elm = &td->elements[edx];
                 if(element_ptr(sptr, elm)) {
                     has_extensions = 1;
@@ -491,7 +494,8 @@
         if(ret < 0) ASN__ENCODE_FAILED;
 
         /* Encode presence bitmap #16.4.3 */
-        for(edx = specs->ext_after + 1; edx < specs->ext_before - 1; edx++) {
+        for(edx = specs->ext_after + 1; (ssize_t)edx < specs->ext_before - 1;
+            edx++) {
             asn_TYPE_member_t *elm = &td->elements[edx];
             void *memb_ptr = element_ptr(sptr, elm);
             ret |= per_put_few_bits(&extadds, memb_ptr ? 1 : 0, 1);
@@ -502,7 +506,8 @@
         computed_size += extadds.flushed_bytes;
 
         /* Now, encode extensions */
-        for(edx = specs->ext_after + 1; edx < specs->ext_before - 1; edx++) {
+        for(edx = specs->ext_after + 1; (ssize_t)edx < specs->ext_before - 1;
+            edx++) {
             asn_TYPE_member_t *elm = &td->elements[edx];
             void *memb_ptr = element_ptr(sptr, elm);
 
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index 55a0bad..a4f276a 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -112,7 +112,7 @@
 	asn_dec_rval_t rval;	/* Return code from subparsers */
 
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
-	int edx;			/* SET element's index */
+	size_t edx;			/* SET element's index */
 
 	ASN_DEBUG("Decoding %s as SET", td->name);
 
@@ -394,7 +394,7 @@
 static int
 _SET_is_populated(asn_TYPE_descriptor_t *td, void *st) {
 	asn_SET_specifics_t *specs = (asn_SET_specifics_t *)td->specifics;
-	int edx;
+	size_t edx;
 
 	/*
 	 * Check that all mandatory elements are present.
@@ -441,9 +441,9 @@
 	int t2m_build_own = (specs->tag2el_count != td->elements_count);
 	const asn_TYPE_tag2member_t *t2m;
 	asn_TYPE_tag2member_t *t2m_build;
-	int t2m_count;
+	size_t t2m_count;
 	ssize_t ret;
-	int edx;
+	size_t edx;
 
 	/*
 	 * Use existing, or build our own tags map.
@@ -603,7 +603,7 @@
 
 	asn_dec_rval_t rval;		/* Return value from a decoder */
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
-	int edx;			/* Element index */
+	size_t edx;			/* Element index */
 
 	/*
 	 * Create the target structure if it is not present already.
@@ -808,8 +808,8 @@
 	asn_enc_rval_t er;
 	int xcan = (flags & XER_F_CANONICAL);
 	const asn_TYPE_tag2member_t *t2m = specs->tag2el_cxer;
-	int t2m_count = specs->tag2el_cxer_count;
-	int edx;
+	size_t t2m_count = specs->tag2el_cxer_count;
+	size_t edx;
 
 	if(!sptr)
 		ASN__ENCODE_FAILED;
@@ -865,7 +865,7 @@
 int
 SET_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
 		asn_app_consume_bytes_f *cb, void *app_key) {
-	int edx;
+	size_t edx;
 	int ret;
 
 	if(!sptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0;
@@ -911,7 +911,7 @@
 
 void
 SET_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
-	int edx;
+	size_t edx;
 
 	if(!td || !ptr)
 		return;
@@ -939,7 +939,7 @@
 int
 SET_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
 		asn_app_constraint_failed_f *ctfailcb, void *app_key) {
-	int edx;
+	size_t edx;
 
 	if(!sptr) {
 		ASN__CTFAIL(app_key, td, sptr,
diff --git a/skeletons/constr_SET.h b/skeletons/constr_SET.h
index 6a3a1aa..702bc05 100644
--- a/skeletons/constr_SET.h
+++ b/skeletons/constr_SET.h
@@ -13,33 +13,33 @@
 
 
 typedef const struct asn_SET_specifics_s {
-	/*
-	 * Target structure description.
-	 */
-	int struct_size;	/* Size of the target structure. */
-	int ctx_offset;		/* Offset of the asn_struct_ctx_t member */
-	int pres_offset;	/* Offset of _presence_map member */
+    /*
+     * Target structure description.
+     */
+    unsigned struct_size;       /* Size of the target structure. */
+    unsigned ctx_offset;        /* Offset of the asn_struct_ctx_t member */
+    unsigned pres_offset;       /* Offset of _presence_map member */
 
-	/*
-	 * Tags to members mapping table (sorted).
-	 * Sometimes suitable for DER encoding (untagged CHOICE is present);
-	 * if so, tag2el_count will be greater than td->elements_count.
-	 */
-	const asn_TYPE_tag2member_t *tag2el;
-	int tag2el_count;
+    /*
+     * Tags to members mapping table (sorted).
+     * Sometimes suitable for DER encoding (untagged CHOICE is present);
+     * if so, tag2el_count will be greater than td->elements_count.
+     */
+    const asn_TYPE_tag2member_t *tag2el;
+    unsigned tag2el_count;
 
-	/*
-	 * Tags to members mapping table, second edition.
-	 * Suitable for CANONICAL-XER encoding.
-	 */
-	const asn_TYPE_tag2member_t *tag2el_cxer;
-	int tag2el_cxer_count;
+    /*
+     * Tags to members mapping table, second edition.
+     * Suitable for CANONICAL-XER encoding.
+     */
+    const asn_TYPE_tag2member_t *tag2el_cxer;
+    unsigned tag2el_cxer_count;
 
-	/*
-	 * Extensions-related stuff.
-	 */
-	int extensible;				/* Whether SET is extensible */
-	const unsigned int *_mandatory_elements;	/* Bitmask of mandatory ones */
+    /*
+     * Extensions-related stuff.
+     */
+    int extensible;                             /* Whether SET is extensible */
+    const unsigned int *_mandatory_elements;    /* Bitmask of mandatory ones */
 } asn_SET_specifics_t;
 
 /*
diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c
index 2dbc6e5..51291b8 100644
--- a/skeletons/constr_SET_OF.c
+++ b/skeletons/constr_SET_OF.c
@@ -866,13 +866,14 @@
 
 asn_dec_rval_t
 SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
-        asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-	asn_dec_rval_t rv;
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    asn_dec_rval_t rv;
         asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics;
 	asn_TYPE_member_t *elm = td->elements;	/* Single one */
 	void *st = *sptr;
 	asn_anonymous_set_ *list;
-	asn_per_constraint_t *ct;
+	const asn_per_constraint_t *ct;
 	int repeat = 0;
 	ssize_t nelems;
 
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index b1d4a1a..6fc618b 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -113,9 +113,9 @@
 	 */
 	asn_outmost_tag_f  *outmost_tag;	/* <optional, internal> */
 	const ber_tlv_tag_t *tags;	/* Effective tags sequence for this type */
-	int tags_count;			/* Number of tags which are expected */
+	unsigned tags_count;			/* Number of tags which are expected */
 	const ber_tlv_tag_t *all_tags;	/* Every tag for BER/containment */
-	int all_tags_count;		/* Number of tags */
+	unsigned all_tags_count;		/* Number of tags */
 
 	asn_oer_constraints_t *oer_constraints;	/* OER constraints */
 	asn_per_constraints_t *per_constraints;	/* PER constraints */
@@ -124,7 +124,7 @@
 	 * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE).
 	 */
 	struct asn_TYPE_member_s *elements;
-	int elements_count;
+	unsigned elements_count;
 
 	/*
 	 * Additional information describing the type, used by appropriate
@@ -143,27 +143,27 @@
 	ATF_OPEN_TYPE	= 0x02	/* ANY type, without meaningful tag */
   };
 typedef struct asn_TYPE_member_s {
-	enum asn_TYPE_flags_e flags;	/* Element's presentation flags */
-	int optional;	/* Following optional members, including current */
-	int memb_offset;		/* Offset of the element */
-	ber_tlv_tag_t tag;		/* Outmost (most immediate) tag */
-	int tag_mode;		/* IMPLICIT/no/EXPLICIT tag at current level */
-	asn_TYPE_descriptor_t *type;	/* Member type descriptor */
-	asn_constr_check_f *memb_constraints;	/* Constraints validator */
-	asn_oer_constraints_t *oer_constraints;	/* OER compiled constraints */
-	asn_per_constraints_t *per_constraints;	/* PER compiled constraints */
-	int (*default_value)(int setval, void **sptr);	/* DEFAULT <value> */
-	const char *name;			/* ASN.1 identifier of the element */
+    enum asn_TYPE_flags_e flags; /* Element's presentation flags */
+    unsigned optional;      /* Following optional members, including current */
+    unsigned memb_offset;   /* Offset of the element */
+    ber_tlv_tag_t tag;      /* Outmost (most immediate) tag */
+    int tag_mode;           /* IMPLICIT/no/EXPLICIT tag at current level */
+    asn_TYPE_descriptor_t *type;            /* Member type descriptor */
+    asn_constr_check_f *memb_constraints;   /* Constraints validator */
+    asn_oer_constraints_t *oer_constraints; /* OER compiled constraints */
+    asn_per_constraints_t *per_constraints; /* PER compiled constraints */
+    int (*default_value)(int setval, void **sptr); /* DEFAULT <value> */
+    const char *name; /* ASN.1 identifier of the element */
 } asn_TYPE_member_t;
 
 /*
  * BER tag to element number mapping.
  */
 typedef struct asn_TYPE_tag2member_s {
-	ber_tlv_tag_t el_tag;	/* Outmost tag of the member */
-	int el_no;		/* Index of the associated member, base 0 */
-	int toff_first;		/* First occurence of the el_tag, relative */
-	int toff_last;		/* Last occurence of the el_tag, relatvie */
+    ber_tlv_tag_t el_tag;   /* Outmost tag of the member */
+    unsigned el_no;         /* Index of the associated member, base 0 */
+    unsigned toff_first;    /* First occurence of the el_tag, relative */
+    unsigned toff_last;		/* Last occurence of the el_tag, relative */
 } asn_TYPE_tag2member_t;
 
 /*
diff --git a/skeletons/oer_decoder.h b/skeletons/oer_decoder.h
index 9e1cb00..2b2a619 100644
--- a/skeletons/oer_decoder.h
+++ b/skeletons/oer_decoder.h
@@ -32,7 +32,7 @@
 typedef asn_dec_rval_t(oer_type_decoder_f)(
     struct asn_codec_ctx_s *opt_codec_ctx,
     struct asn_TYPE_descriptor_s *type_descriptor,
-    asn_oer_constraints_t *constraints,
+    const asn_oer_constraints_t *constraints,
     void **struct_ptr,
     const void *buf_ptr,
     size_t size);
diff --git a/skeletons/oer_encoder.c b/skeletons/oer_encoder.c
index 4358a92..490043c 100644
--- a/skeletons/oer_encoder.c
+++ b/skeletons/oer_encoder.c
@@ -47,7 +47,7 @@
  */
 asn_enc_rval_t
 oer_encode_to_buffer(struct asn_TYPE_descriptor_s *type_descriptor,
-                     asn_oer_constraints_t *constraints,
+                     const asn_oer_constraints_t *constraints,
                      void *struct_ptr,  /* Structure to be encoded */
                      void *buffer,      /* Pre-allocated buffer */
                      size_t buffer_size /* Initial buffer size (maximum) */
diff --git a/skeletons/oer_encoder.h b/skeletons/oer_encoder.h
index 6d33f1c..03ddfce 100644
--- a/skeletons/oer_encoder.h
+++ b/skeletons/oer_encoder.h
@@ -26,7 +26,7 @@
 /* A variant of oer_encode() which encodes data into the pre-allocated buffer */
 asn_enc_rval_t oer_encode_to_buffer(
     struct asn_TYPE_descriptor_s *type_descriptor,
-    asn_oer_constraints_t *constraints,
+    const asn_oer_constraints_t *constraints,
     void *struct_ptr,  /* Structure to be encoded */
     void *buffer,      /* Pre-allocated buffer */
     size_t buffer_size /* Initial buffer size (maximum) */
@@ -37,7 +37,7 @@
  */
 typedef asn_enc_rval_t(oer_type_encoder_f)(
     struct asn_TYPE_descriptor_s *type_descriptor,
-    asn_oer_constraints_t *constraints,
+    const asn_oer_constraints_t *constraints,
     void *struct_ptr,                          /* Structure to be encoded */
     asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */
     void *app_key                              /* Arbitrary callback argument */
diff --git a/skeletons/oer_support.c b/skeletons/oer_support.c
index f228f09..78142c2 100644
--- a/skeletons/oer_support.c
+++ b/skeletons/oer_support.c
@@ -47,7 +47,7 @@
         /* Skip the leading 0-bytes */
     }
 
-    if((bend - b) > sizeof(size_t)) {
+    if((bend - b) > (ssize_t)sizeof(size_t)) {
         /* Length is not representable by the native size_t type */
         *len_r = 0;
         return -1;
diff --git a/skeletons/oer_support.h b/skeletons/oer_support.h
index a529254..92ee694 100644
--- a/skeletons/oer_support.h
+++ b/skeletons/oer_support.h
@@ -15,11 +15,11 @@
 /*
  * Pre-computed OER constraints.
  */
-typedef const struct asn_oer_constraint_number_s {
+typedef struct asn_oer_constraint_number_s {
     unsigned width;    /* ±8,4,2,1 fixed bytes */
     unsigned positive; /* 1 for unsigned number, 0 for signed */
 } asn_oer_constraint_number_t;
-typedef const struct asn_oer_constraints_s {
+typedef struct asn_oer_constraints_s {
     asn_oer_constraint_number_t value;
     ssize_t size;    /* -1 (no constraint) or >= 0 */
 } asn_oer_constraints_t;
diff --git a/skeletons/per_decoder.h b/skeletons/per_decoder.h
index 8397a54..803341a 100644
--- a/skeletons/per_decoder.h
+++ b/skeletons/per_decoder.h
@@ -44,7 +44,7 @@
  */
 typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx,
 		struct asn_TYPE_descriptor_s *type_descriptor,
-		asn_per_constraints_t *constraints,
+		const asn_per_constraints_t *constraints,
 		void **struct_ptr,
 		asn_per_data_t *per_data
 	);
diff --git a/skeletons/per_encoder.c b/skeletons/per_encoder.c
index 47f3c91..2ccfdf0 100644
--- a/skeletons/per_encoder.c
+++ b/skeletons/per_encoder.c
@@ -2,7 +2,7 @@
 #include <asn_internal.h>
 #include <per_encoder.h>
 
-static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key);
+static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, const asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key);
 
 asn_enc_rval_t
 uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) {
@@ -65,8 +65,10 @@
 	return 0;
 }
 ssize_t
-uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) {
-	asn_enc_rval_t er;
+uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td,
+                          const asn_per_constraints_t *constraints, void *sptr,
+                          void **buffer_r) {
+    asn_enc_rval_t er;
 	enc_dyn_arg key;
 
 	memset(&key, 0, sizeof(key));
@@ -116,8 +118,10 @@
 }
 
 static asn_enc_rval_t
-uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) {
-	asn_per_outp_t po;
+uper_encode_internal(asn_TYPE_descriptor_t *td,
+                     const asn_per_constraints_t *constraints, void *sptr,
+                     asn_app_consume_bytes_f *cb, void *app_key) {
+    asn_per_outp_t po;
 	asn_enc_rval_t er;
 
 	/*
diff --git a/skeletons/per_encoder.h b/skeletons/per_encoder.h
index 95a6506..fd090ac 100644
--- a/skeletons/per_encoder.h
+++ b/skeletons/per_encoder.h
@@ -47,7 +47,7 @@
  */
 ssize_t uper_encode_to_new_buffer(
 	struct asn_TYPE_descriptor_s *type_descriptor,
-	asn_per_constraints_t *constraints,
+	const asn_per_constraints_t *constraints,
 	void *struct_ptr,	/* Structure to be encoded */
 	void **buffer_r		/* Buffer allocated and returned */
 );
@@ -57,7 +57,7 @@
  */
 typedef asn_enc_rval_t (per_type_encoder_f)(
 	struct asn_TYPE_descriptor_s *type_descriptor,
-	asn_per_constraints_t *constraints,
+	const asn_per_constraints_t *constraints,
 	void *struct_ptr,
 	asn_per_outp_t *per_output
 );
diff --git a/skeletons/per_opentype.c b/skeletons/per_opentype.c
index 404aa72..589bb4a 100644
--- a/skeletons/per_opentype.c
+++ b/skeletons/per_opentype.c
@@ -16,7 +16,10 @@
 
 static int uper_ugot_refill(asn_per_data_t *pd);
 static int per_skip_bits(asn_per_data_t *pd, int skip_nbits);
-static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd);
+static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *,
+                                    asn_TYPE_descriptor_t *td,
+                                    const asn_per_constraints_t *constraints,
+                                    void **sptr, asn_per_data_t *pd);
 
 /*
  * Encode an "open type field".
@@ -55,7 +58,7 @@
 
 static asn_dec_rval_t
 uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
 	asn_dec_rval_t rv;
 	ssize_t chunk_bytes;
 	int repeat;
@@ -243,9 +246,9 @@
 
 asn_dec_rval_t
 uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
-
-	return uper_open_type_get_simple(ctx, td, constraints, sptr, pd);
+                   const asn_per_constraints_t *constraints, void **sptr,
+                   asn_per_data_t *pd) {
+    return uper_open_type_get_simple(ctx, td, constraints, sptr, pd);
 }
 
 int
@@ -269,7 +272,7 @@
 
 static asn_dec_rval_t
 uper_sot_suck(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
-	asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
+	const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) {
 	asn_dec_rval_t rv;
 
 	(void)ctx;
diff --git a/skeletons/per_opentype.h b/skeletons/per_opentype.h
index facfaa6..d34f758 100644
--- a/skeletons/per_opentype.h
+++ b/skeletons/per_opentype.h
@@ -9,7 +9,7 @@
 extern "C" {
 #endif
 
-asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd);
+asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, const asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd);
 
 int uper_open_type_skip(asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd);
 
diff --git a/skeletons/per_support.h b/skeletons/per_support.h
index 0e4e189..4dcc9e6 100644
--- a/skeletons/per_support.h
+++ b/skeletons/per_support.h
@@ -15,7 +15,7 @@
 /*
  * Pre-computed PER constraints.
  */
-typedef const struct asn_per_constraint_s {
+typedef struct asn_per_constraint_s {
 	enum asn_per_constraint_flags {
 		APC_UNCONSTRAINED	= 0x0,	/* No PER visible constraints */
 		APC_SEMI_CONSTRAINED	= 0x1,	/* Constrained at "lb" */
@@ -27,9 +27,9 @@
 	long lower_bound;		/* "lb" value */
 	long upper_bound;		/* "ub" value */
 } asn_per_constraint_t;
-typedef const struct asn_per_constraints_s {
-	struct asn_per_constraint_s value;
-	struct asn_per_constraint_s size;
+typedef struct asn_per_constraints_s {
+	asn_per_constraint_t value;
+	asn_per_constraint_t size;
 	int (*value2code)(unsigned int value);
 	int (*code2value)(unsigned int code);
 } asn_per_constraints_t;
diff --git a/skeletons/tests/check-GeneralizedTime.c b/skeletons/tests/check-GeneralizedTime.c
index 63d2e66..4b1fd18 100644
--- a/skeletons/tests/check-GeneralizedTime.c
+++ b/skeletons/tests/check-GeneralizedTime.c
@@ -54,7 +54,7 @@
 		assert(expect);
 		printf("[%s] vs [%s] (%d)\n",
 			gt->buf, expect, force_gmt);
-		assert(gt->size == (int)strlen((char *)gt->buf));
+		assert(gt->size == strlen((char *)gt->buf));
 		assert(!strcmp((char *)gt->buf, expect));
 	} else {
 		assert(!expect);
diff --git a/skeletons/tests/check-INTEGER.c b/skeletons/tests/check-INTEGER.c
index 4ec9fd5..8c4496c 100644
--- a/skeletons/tests/check-INTEGER.c
+++ b/skeletons/tests/check-INTEGER.c
@@ -14,7 +14,7 @@
 }
 
 static void
-check(uint8_t *buf, int size, long check_long, int check_ret) {
+check(uint8_t *buf, size_t size, long check_long, int check_ret) {
 	char scratch[128];
 	char verify[32];
 	INTEGER_t val;
diff --git a/skeletons/tests/check-OCTET_STRING.c b/skeletons/tests/check-OCTET_STRING.c
index 3aad01a..30564c1 100644
--- a/skeletons/tests/check-OCTET_STRING.c
+++ b/skeletons/tests/check-OCTET_STRING.c
@@ -10,8 +10,8 @@
 
 static void
 check(enum encoding_type type, char *tagname, char *xmlbuf, char *verify) {
-	int xmllen = strlen(xmlbuf);
-	int verlen = verify ? strlen(verify) : 0;
+	size_t xmllen = strlen(xmlbuf);
+	size_t verlen = verify ? strlen(verify) : 0;
 	asn_TYPE_descriptor_t *td = &asn_DEF_OCTET_STRING;
 	OCTET_STRING_t *st = 0;
 	OCTET_STRING_t **stp = &st;
@@ -32,7 +32,7 @@
 	}
 
 	rc = decoder(0, td, (void **)stp, tagname, xmlbuf, xmllen);
-	printf("[%s] => [%s]:%d vs [%s]:%d, code %d\n",
+	printf("[%s] => [%s]:%zu vs [%s]:%zu, code %d\n",
 		xmlbuf,
 		st ? (const char *)st->buf : "", st ? st->size : 0,
 		verify ? verify : "", verlen, rc.code);
diff --git a/skeletons/tests/check-OER-INTEGER.c b/skeletons/tests/check-OER-INTEGER.c
index 314b6b3..f30ea38 100644
--- a/skeletons/tests/check-OER-INTEGER.c
+++ b/skeletons/tests/check-OER-INTEGER.c
@@ -10,11 +10,10 @@
 #define CHECK_ENCODE_BAD(a, b, c) check_encode(__LINE__, 1, a, b, c);
 
 static asn_oer_constraints_t *
-setup_constraints(int lineno, const char *process, unsigned width,
-                  unsigned positive) {
+setup_constraints(unsigned width, unsigned positive) {
     static struct asn_oer_constraints_s empty_constraints;
-    struct asn_oer_constraints_s *constraints = &empty_constraints;
-    struct asn_oer_constraint_number_s *ct_value = &constraints->value;
+    asn_oer_constraints_t *constraints = &empty_constraints;
+    asn_oer_constraint_number_t *ct_value = &constraints->value;
 
     memset(&empty_constraints, 0, sizeof(empty_constraints));
 
@@ -33,8 +32,7 @@
 
     INTEGER_t *st = NULL;
     asn_dec_rval_t ret;
-    asn_oer_constraints_t *constraints =
-        setup_constraints(lineno, "decoding", width, positive);
+    asn_oer_constraints_t *constraints = setup_constraints(width, positive);
 
     fprintf(stderr, "%d: buf[%zu]={%d, %d, ...}\n", lineno, size,
             ((const uint8_t *)buf)[0],
@@ -105,7 +103,7 @@
     asn_enc_rval_t er;
     asn_dec_rval_t ret;
     asn_oer_constraints_t *constraints =
-        setup_constraints(lineno, "encoding", lower_bound, upper_bound);
+        setup_constraints(lower_bound, upper_bound);
 
     if(asn_imax2INTEGER(stOut, value) == -1) {
         assert(!"Unreachable imax2INTEGER failure");
@@ -164,8 +162,7 @@
 
     INTEGER_t *stOut = (INTEGER_t *)calloc(1, sizeof(*stOut));
     asn_enc_rval_t er;
-    asn_oer_constraints_t *constraints =
-        setup_constraints(lineno, "encoding", width, positive);
+    asn_oer_constraints_t *constraints = setup_constraints(width, positive);
 
     if(asn_imax2INTEGER(stOut, value) == -1) {
         assert(!"Unreachable imax2INTEGER failure");
diff --git a/skeletons/tests/check-OIDs.c b/skeletons/tests/check-OIDs.c
index 05b4993..fbb0948 100644
--- a/skeletons/tests/check-OIDs.c
+++ b/skeletons/tests/check-OIDs.c
@@ -30,7 +30,7 @@
 	rval = ber_decode(0, &asn_DEF_OBJECT_IDENTIFIER, (void *)&oid, buf, len);
 	assert(rval.code == RC_OK);
 
-	assert(oid->size == (ssize_t)len - 2);
+	assert((ssize_t)oid->size == (ssize_t)len - 2);
 
 	/*
 	 * Print the contents for visual debugging.
@@ -77,7 +77,7 @@
 	rval = ber_decode(0, &asn_DEF_RELATIVE_OID, (void *)&oid, buf, len);
 	assert(rval.code == RC_OK);
 
-	assert(oid->size == (ssize_t)len - 2);
+	assert((ssize_t)oid->size == (ssize_t)len - 2);
 
 	/*
 	 * Print the contents for visual debugging.
diff --git a/skeletons/tests/check-REAL.c b/skeletons/tests/check-REAL.c
index f50bb82..4251c8a 100644
--- a/skeletons/tests/check-REAL.c
+++ b/skeletons/tests/check-REAL.c
@@ -90,7 +90,7 @@
 	printf("converted into [");
 	for(p = rn->buf, end = p + rn->size; p < end; p++)
 		printf("%02x", *p);
-	printf("]: %d\n", rn->size);
+	printf("]: %zu\n", rn->size);
 
 	ret = asn_REAL2double(rn, &val);
 	assert(ret == 0);
