diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 1037bdd..e855a4a 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -180,12 +180,13 @@
  * Decode the chunk of XML text encoding INTEGER.
  */
 static ssize_t
-INTEGER__xer_body_decode(INTEGER_t *st, void *chunk_buf, size_t chunk_size) {
+INTEGER__xer_body_decode(void *sptr, void *chunk_buf, size_t chunk_size) {
+	INTEGER_t *st = (INTEGER_t *)sptr;
 	long sign = 1;
 	long value;
 	char *lp;
 	char *lstart = (char *)chunk_buf;
-	char *lstop = chunk_buf + chunk_size;
+	char *lstop = lstart + chunk_size;
 	enum {
 		ST_SKIPSPACE,
 		ST_WAITDIGITS,
@@ -231,7 +232,8 @@
 			if(value < 0) {
 				/* Check whether it is a LONG_MIN */
 				if(sign == -1
-				&& value == ~((unsigned long)-1 >> 1)) {
+				&& (unsigned long)value
+						== ~((unsigned long)-1 >> 1)) {
 					sign = 1;
 				} else {
 					/* Overflow */
@@ -261,7 +263,7 @@
 		void *buf_ptr, size_t size) {
 
 	return xer_decode_primitive(opt_codec_ctx, td,
-		(ASN__PRIMITIVE_TYPE_t **)sptr, opt_mname,
+		sptr, sizeof(INTEGER_t), opt_mname,
 		buf_ptr, size, INTEGER__xer_body_decode);
 }
 
@@ -356,7 +358,7 @@
 		return -1;
 	}
 
-	buf = MALLOC(sizeof(value));
+	buf = (uint8_t *)MALLOC(sizeof(value));
 	if(!buf) return -1;
 
 	pstart = (uint8_t *)&value;
diff --git a/skeletons/NativeReal.c b/skeletons/NativeReal.c
index b8a4926..09d3e2c 100644
--- a/skeletons/NativeReal.c
+++ b/skeletons/NativeReal.c
@@ -28,7 +28,7 @@
 	asn_generic_no_constraint,
 	NativeReal_decode_ber,
 	NativeReal_encode_der,
-	0,				/* Not implemented yet */
+	NativeReal_decode_xer,
 	NativeReal_encode_xer,
 	0, /* Use generic outmost tag fetcher */
 	asn_DEF_NativeReal_tags,
@@ -143,6 +143,41 @@
 }
 
 
+
+/*
+ * Decode the chunk of XML text encoding REAL.
+ */
+asn_dec_rval_t
+NativeReal_decode_xer(asn_codec_ctx_t *opt_codec_ctx,
+	asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname,
+		void *buf_ptr, size_t size) {
+	asn_dec_rval_t rval;
+	REAL_t *st = 0;
+	double *Dbl = (double *)*sptr;
+
+	if(!Dbl) {
+		(void *)Dbl = *sptr = CALLOC(1, sizeof(double));
+		if(!Dbl) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+			return rval;
+		}
+	}
+
+	rval = REAL_decode_xer(opt_codec_ctx, td, (void **)&st, opt_mname,
+		buf_ptr, size);
+	if(rval.code == RC_OK) {
+		if(asn_REAL2double(st, Dbl)) {
+			rval.code = RC_FAIL;
+			rval.consumed = 0;
+		}
+	} else {
+		rval.consumed = 0;
+	}
+	asn_DEF_REAL.free_struct(&asn_DEF_REAL, st, 0);
+	return rval;
+}
+
 asn_enc_rval_t
 NativeReal_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
 	int ilevel, enum xer_encoder_flags_e flags,
diff --git a/skeletons/NativeReal.h b/skeletons/NativeReal.h
index b1c58bf..32dd7f6 100644
--- a/skeletons/NativeReal.h
+++ b/skeletons/NativeReal.h
@@ -19,6 +19,7 @@
 asn_struct_print_f NativeReal_print;
 ber_type_decoder_f NativeReal_decode_ber;
 der_type_encoder_f NativeReal_encode_der;
+xer_type_decoder_f NativeReal_decode_xer;
 xer_type_encoder_f NativeReal_encode_xer;
 
 #endif	/* ASN_TYPE_NativeReal_H */
diff --git a/skeletons/REAL.c b/skeletons/REAL.c
index ace2f14..a1608ee 100644
--- a/skeletons/REAL.c
+++ b/skeletons/REAL.c
@@ -49,7 +49,7 @@
 } specialRealValue_e;
 static struct specialRealValue_s {
 	char *string;
-	int length;
+	size_t length;
 	double dv;
 } specialRealValue[] = {
 #define	SRV_SET(foo, val)	{ foo, sizeof(foo) - 1, val }
@@ -248,7 +248,8 @@
  * Decode the chunk of XML text encoding REAL.
  */
 static ssize_t
-REAL__xer_body_decode(REAL_t *st, void *chunk_buf, size_t chunk_size) {
+REAL__xer_body_decode(void *sptr, void *chunk_buf, size_t chunk_size) {
+	REAL_t *st = (REAL_t *)sptr;
 	double value;
 	char *xerdata = (char *)chunk_buf;
 	char *endptr = 0;
@@ -280,10 +281,10 @@
 	/*
 	 * Copy chunk into the nul-terminated string, and run strtod.
 	 */
-	b = MALLOC(chunk_size + 1);
+	b = (char *)MALLOC(chunk_size + 1);
 	if(!b) return -1;
 	memcpy(b, chunk_buf, chunk_size);
-	b[chunk_size] = 0;
+	b[chunk_size] = 0;	/* nul-terminate */
 
 	value = strtod(b, &endptr);
 	free(b);
@@ -301,7 +302,7 @@
 		void *buf_ptr, size_t size) {
 
 	return xer_decode_primitive(opt_codec_ctx, td,
-		(ASN__PRIMITIVE_TYPE_t **)sptr, opt_mname,
+		sptr, sizeof(REAL_t), opt_mname,
 		buf_ptr, size, REAL__xer_body_decode);
 }
 
diff --git a/skeletons/asn_codecs_prim.c b/skeletons/asn_codecs_prim.c
index 8791475..e6725b3 100644
--- a/skeletons/asn_codecs_prim.c
+++ b/skeletons/asn_codecs_prim.c
@@ -136,8 +136,8 @@
  * Local internal type passed around as an argument.
  */
 struct xdp_arg_s {
-	ASN__PRIMITIVE_TYPE_t *sptr;
-	ssize_t (*prim_body_decode)(ASN__PRIMITIVE_TYPE_t *sptr,
+	void *struct_key;
+	ssize_t (*prim_body_decode)(void *struct_key,
 		void *chunk_buf, size_t chunk_size);
 	int decoded_something;
 	int want_more;
@@ -181,7 +181,7 @@
 		return -1;
 	}
 
-	decoded = arg->prim_body_decode(arg->sptr, chunk_buf, chunk_size);
+	decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
 	if(decoded < 0) {
 		return -1;
 	} else {
@@ -218,7 +218,7 @@
 		return -1;
 	}
 
-	decoded = arg->prim_body_decode(arg->sptr, chunk_buf, chunk_size);
+	decoded = arg->prim_body_decode(arg->struct_key, chunk_buf, chunk_size);
 	if(decoded < 0) {
 		return -1;
 	} else {
@@ -231,10 +231,11 @@
 asn_dec_rval_t
 xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx,
 	asn_TYPE_descriptor_t *td,
-	ASN__PRIMITIVE_TYPE_t **sptr,
+	void **sptr,
+	size_t struct_size,
 	const char *opt_mname,
 	void *buf_ptr, size_t size,
-	ssize_t (*prim_body_decode)(ASN__PRIMITIVE_TYPE_t *sptr,
+	ssize_t (*prim_body_decode)(void *struct_key,
 		void *chunk_buf, size_t chunk_size)
 ) {
 	const char *xml_tag = opt_mname ? opt_mname : td->xml_tag;
@@ -246,7 +247,7 @@
 	 * Create the structure if does not exist.
 	 */
 	if(!*sptr) {
-		*sptr = CALLOC(1, sizeof(ASN__PRIMITIVE_TYPE_t));
+		*sptr = CALLOC(1, struct_size);
 		if(!*sptr) {
 			asn_dec_rval_t rval;
 			rval.code = RC_FAIL;
@@ -256,7 +257,7 @@
 	}
 
 	memset(&s_ctx, 0, sizeof(s_ctx));
-	s_arg.sptr = *sptr;
+	s_arg.struct_key = *sptr;
 	s_arg.prim_body_decode = prim_body_decode;
 	s_arg.decoded_something = 0;
 	s_arg.want_more = 0;
diff --git a/skeletons/asn_codecs_prim.h b/skeletons/asn_codecs_prim.h
index 69ee106..c235f35 100644
--- a/skeletons/asn_codecs_prim.h
+++ b/skeletons/asn_codecs_prim.h
@@ -17,16 +17,15 @@
 der_type_encoder_f der_encode_primitive;
 
 /*
- * Specific function to decode simple primitive values
- * (INTEGER, ENUMERATED, REAL, OBJECT IDENTIFIER, etc).
+ * Specific function to decode simple primitive types.
  * Also see xer_decode_general() in xer_decoder.h
  */
 asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx,
 	asn_TYPE_descriptor_t *type_descriptor,
-	ASN__PRIMITIVE_TYPE_t **struct_ptr,
+	void **struct_ptr, size_t struct_size,
 	const char *opt_mname,
 	void *buf_ptr, size_t size,
-	ssize_t (*prim_body_decode)(ASN__PRIMITIVE_TYPE_t *struct_ptr,
+	ssize_t (*prim_body_decode)(void *struct_ptr,
 		void *chunk_buf, size_t chunk_size)
 	);
 
