diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c
index 3e779cc..bdbd40d 100644
--- a/skeletons/BMPString.c
+++ b/skeletons/BMPString.c
@@ -2,6 +2,7 @@
  * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
  * Redistribution and modifications are permitted subject to BSD license.
  */
+#include <asn_internal.h>
 #include <BMPString.h>
 
 /*
@@ -13,11 +14,13 @@
 };
 asn1_TYPE_descriptor_t asn1_DEF_BMPString = {
 	"BMPString",
+	OCTET_STRING_free,          /* Implemented in terms of OCTET STRING */
+	BMPString_print,
 	asn_generic_no_constraint,  /* No constraint by default */
 	OCTET_STRING_decode_ber,    /* Implemented in terms of OCTET STRING */
 	OCTET_STRING_encode_der,    /* Implemented in terms of OCTET STRING */
-	BMPString_print,
-	OCTET_STRING_free,          /* -//- */
+	0,				/* Not implemented yet */
+	BMPString_encode_xer,		/* Conver to UTF8 */
 	0, /* Use generic outmost tag fetcher */
 	asn1_DEF_BMPString_tags,
 	sizeof(asn1_DEF_BMPString_tags)
@@ -33,27 +36,22 @@
 /*
  * BMPString specific contents printer.
  */
-int
-BMPString_print(asn1_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+static ssize_t
+BMPString__dump(const BMPString_t *st,
 		asn_app_consume_bytes_f *cb, void *app_key) {
-	const BMPString_t *st = (const BMPString_t *)sptr;
-	uint16_t *wchar;
-	uint16_t *wend;
 	char scratch[128];			/* Scratchpad buffer */
-	char *p;
+	char *p = scratch;
+	ssize_t wrote = 0;
+	uint8_t *ch;
+	uint8_t *end;
 
-	(void)td;	/* Unused argument */
-	(void)ilevel;	/* Unused argument */
-
-	if(!st || !st->buf) return cb("<absent>", 8, app_key);
-
-	wchar = (uint16_t *)st->buf;
-	wend = (uint16_t *)(st->buf + st->size);
-	for(p = scratch; wchar < wend; wchar++) {
-		uint16_t wc = (((uint8_t *)wchar)[0] << 8)
-				| ((uint8_t *)wchar)[1];	/* 2 bytes */
+	ch = st->buf;
+	end = (st->buf + st->size);
+	for(end--; ch < end; ch += 2) {
+		uint16_t wc = (ch[0] << 8) | ch[1];	/* 2 bytes */
 		if(sizeof(scratch) - (p - scratch) < 3) {
-			if(cb(scratch, p - scratch, app_key))
+			wrote += p - scratch;
+			if(cb(scratch, p - scratch, app_key) < 0)
 				return -1;
 			p = scratch;
 		}
@@ -69,5 +67,45 @@
 		}
 	}
 
-	return cb(scratch, p - scratch, app_key);
+	wrote += p - scratch;
+	if(cb(scratch, p - scratch, app_key) < 0)
+		return -1;
+
+	return wrote;
 }
+
+asn_enc_rval_t
+BMPString_encode_xer(asn1_TYPE_descriptor_t *td, void *sptr,
+	int ilevel, enum xer_encoder_flags_e flags,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	const BMPString_t *st = (const BMPString_t *)sptr;
+	asn_enc_rval_t er;
+
+	(void)ilevel;
+	(void)flags;
+
+	if(!st || !st->buf)
+		_ASN_ENCODE_FAILED;
+
+	er.encoded = BMPString__dump(st, cb, app_key);
+	if(er.encoded < 0) _ASN_ENCODE_FAILED;
+
+	return er;
+}
+
+int
+BMPString_print(asn1_TYPE_descriptor_t *td, const void *sptr, int ilevel,
+		asn_app_consume_bytes_f *cb, void *app_key) {
+	const BMPString_t *st = (const BMPString_t *)sptr;
+
+	(void)td;	/* Unused argument */
+	(void)ilevel;	/* Unused argument */
+
+	if(!st || !st->buf) return cb("<absent>", 8, app_key);
+
+	if(BMPString__dump(st, cb, app_key) < 0)
+		return -1;
+
+	return 0;
+}
+
