diff --git a/skeletons/BMPString.c b/skeletons/BMPString.c
index cca6e3c..3dd01d5 100644
--- a/skeletons/BMPString.c
+++ b/skeletons/BMPString.c
@@ -1,9 +1,11 @@
 /*-
- * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
  * Redistribution and modifications are permitted subject to BSD license.
  */
 #include <asn_internal.h>
 #include <BMPString.h>
+#include <UTF8String.h>
+#include <assert.h>
 
 /*
  * BMPString basic type description.
@@ -18,10 +20,10 @@
 	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 */
-	0,				/* Not implemented yet */
-	BMPString_encode_xer,		/* Convert to UTF8 */
+	OCTET_STRING_decode_ber,
+	OCTET_STRING_encode_der,
+	BMPString_decode_xer,		/* Convert from UTF-8 */
+	BMPString_encode_xer,		/* Convert to UTF-8 */
 	0, /* Use generic outmost tag fetcher */
 	asn_DEF_BMPString_tags,
 	sizeof(asn_DEF_BMPString_tags)
@@ -74,6 +76,71 @@
 	return wrote;
 }
 
+asn_dec_rval_t
+BMPString_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 rc;
+
+	rc = OCTET_STRING_decode_xer_utf8(opt_codec_ctx, td, sptr, opt_mname,
+		buf_ptr, size);
+	if(rc.code == RC_OK) {
+		/*
+		 * Now we have a whole string in UTF-8 format.
+		 * Convert it into UCS-2.
+		 */
+		uint32_t *wcs;
+		size_t wcs_len;
+		UTF8String_t *st;
+
+		assert(*sptr);
+		st = (UTF8String_t *)*sptr;
+		assert(st->buf);
+		wcs_len = UTF8String_to_wcs(st, 0, 0);
+
+		wcs = (uint32_t *)MALLOC(4 * (wcs_len + 1));
+		if(wcs == 0 || UTF8String_to_wcs(st, wcs, wcs_len) != wcs_len) {
+			rc.code = RC_FAIL;
+			rc.consumed = 0;
+			return rc;
+		} else {
+			wcs[wcs_len] = 0;	/* nul-terminate */
+		}
+
+		if(1) {
+			/* Swap byte order and trim encoding to 2 bytes */
+			uint32_t *wc = wcs;
+			uint32_t *wc_end = wcs + wcs_len + 1;
+			uint16_t *dstwc = (uint16_t *)wcs;
+			for(; wc < wc_end; wc++, dstwc++) {
+				uint32_t wch = *wc;
+				if(wch > 0xffff) {
+					FREEMEM(wcs);
+					rc.code = RC_FAIL;
+					rc.consumed = 0;
+					return rc;
+				}
+				*((uint8_t *)dstwc + 0) = wch >> 8;
+				*((uint8_t *)dstwc + 1) = wch;
+			}
+			dstwc = (uint16_t)REALLOC(wcs, 2 * (wcs_len + 1));
+			if(!dstwc) {
+				FREEMEM(wcs);
+				rc.code = RC_FAIL;
+				rc.consumed = 0;
+				return rc;
+			} else {
+				wcs = (uint32_t *)dstwc;
+			}
+		}
+
+		FREEMEM(st->buf);
+		st->buf = (uint8_t *)wcs;
+		st->size = 2 * wcs_len;
+	}
+	return rc;
+}
+
 asn_enc_rval_t
 BMPString_encode_xer(asn_TYPE_descriptor_t *td, void *sptr,
 	int ilevel, enum xer_encoder_flags_e flags,
