diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
index 7473b62..6a4cdc7 100644
--- a/skeletons/BOOLEAN.c
+++ b/skeletons/BOOLEAN.c
@@ -146,7 +146,7 @@
 			/* "<false/>" */
 			*st = 0;
 			break;
-		case XCT_UNEXPECTED:
+		case XCT_UNKNOWN_BO:
 			if(xer_check_tag(chunk_buf, chunk_size, "true")
 					!= XCT_BOTH)
 				return -1;
diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index 49bd06c..4e90bbd 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -639,7 +639,7 @@
 		/*
 		 * Get the next part of the XML stream.
 		 */
-		ch_size = xer_next_token(buf_ptr, size, &ch_type);
+		ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type);
 		switch(ch_size) {
 		case -1: RETURN(RC_FAIL);
 		case 0:  RETURN(RC_WMORE);
@@ -667,6 +667,7 @@
 				continue;
 			case 1:
 				ctx->phase = 3;
+				/* Fall through */
 			case 0:
 				XER_ADVANCE(ch_size);
 				continue;
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index 31f0c42..459de4c 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -689,7 +689,8 @@
 		/*
 		 * Get the next part of the XML stream.
 		 */
-		ch_size = xer_next_token(buf_ptr, size, &ch_type);
+		ch_size = xer_next_token(&ctx->context, buf_ptr, size,
+			&ch_type);
 		switch(ch_size) {
 		case -1: RETURN(RC_FAIL);
 		case 0:  RETURN(RC_WMORE);
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index c5bb201..2ee3b81 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -671,7 +671,8 @@
 		/*
 		 * Get the next part of the XML stream.
 		 */
-		ch_size = xer_next_token(buf_ptr, size, &ch_type);
+		ch_size = xer_next_token(&ctx->context,
+			buf_ptr, size, &ch_type);
 		switch(ch_size) {
 		case -1: RETURN(RC_FAIL);
 		case 0:  RETURN(RC_WMORE);
@@ -695,13 +696,12 @@
 			case -1:
 				ctx->phase = 4;
 				RETURN(RC_FAIL);
+			case 1:
+				ctx->phase = 1;
+				/* Fall through */
 			case 0:
 				XER_ADVANCE(ch_size);
 				continue;
-			case 1:
-				XER_ADVANCE(ch_size);
-				ctx->phase = 1;
-				continue;
 			case 2:
 				ctx->phase = 1;
 				break;
diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c
index 7df1e5c..37268dc 100644
--- a/skeletons/constr_SET_OF.c
+++ b/skeletons/constr_SET_OF.c
@@ -536,7 +536,8 @@
 		/*
 		 * Get the next part of the XML stream.
 		 */
-		ch_size = xer_next_token(buf_ptr, size, &ch_type);
+		ch_size = xer_next_token(&ctx->context,
+			buf_ptr, size, &ch_type);
 		switch(ch_size) {
 		case -1: RETURN(RC_FAIL);
 		case 0:  RETURN(RC_WMORE);
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index 79bd0a2..e36f293 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -23,10 +23,11 @@
  * included into certain target language's structures, such as compound types.
  */
 typedef struct asn_struct_ctx_s {
-	int phase;		/* Decoding phase */
-	int step;		/* Elementary step of a phase */
-	ber_tlv_len_t left;	/* Number of bytes left, -1 for indefinite */
+	short phase;		/* Decoding phase */
+	short step;		/* Elementary step of a phase */
+	int context;		/* Other context information */
 	void *ptr;		/* Decoder-specific stuff (stack elements) */
+	ber_tlv_len_t left;	/* Number of bytes left, -1 for indefinite */
 } asn_struct_ctx_t;
 
 #include <ber_decoder.h>	/* Basic Encoding Rules decoder */
diff --git a/skeletons/tests/check-XER.c b/skeletons/tests/check-XER.c
index 5c7e69c..9254dbc 100644
--- a/skeletons/tests/check-XER.c
+++ b/skeletons/tests/check-XER.c
@@ -17,10 +17,11 @@
 	int xerbuf_len = strlen(xerbuf);
 	pxer_chunk_type_e ch_type;
 	ssize_t ch_size;
+	int state = 0;
 
 	if(expected_chunk_size == -1)
 		expected_chunk_size = xerbuf_len;
-	ch_size = xer_next_token(xerbuf, xerbuf_len, &ch_type);
+	ch_size = xer_next_token(&state, xerbuf, xerbuf_len, &ch_type);
 
 	printf("[%s]:%d\n", xerbuf, xerbuf_len);
 	printf("chunk sizes: %d vs %d, chunk types: %d vs %d\n",
diff --git a/skeletons/xer_decoder.c b/skeletons/xer_decoder.c
index ed1fff4..9127679 100644
--- a/skeletons/xer_decoder.c
+++ b/skeletons/xer_decoder.c
@@ -51,13 +51,13 @@
  * Fetch the next token from the XER/XML stream.
  */
 ssize_t
-xer_next_token(void *buffer, size_t size, pxer_chunk_type_e *ch_type) {
+xer_next_token(int *stateContext, void *buffer, size_t size, pxer_chunk_type_e *ch_type) {
 	struct xer__cb_arg arg;
-	int stateContext = 0;
+	int new_stateContext = *stateContext;
 	ssize_t ret;
 
 	arg.callback_not_invoked = 1;
-	ret = pxml_parse(&stateContext, buffer, size, xer__token_cb, &arg);
+	ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg);
 	if(ret < 0) return -1;
 	if(arg.callback_not_invoked) {
 		assert(ret == 0);	/* No data was consumed */
@@ -65,7 +65,6 @@
 	} else {
 		assert(arg.chunk_size);
 		assert(arg.chunk_buf == buffer);
-		assert(stateContext == 0);
 	}
 
 	/*
@@ -85,6 +84,7 @@
 		break;
 	}
 
+	*stateContext = new_stateContext;
 	return arg.chunk_size;
 }
 
@@ -136,13 +136,13 @@
 					return ct;
 				}
 			}
-			return (XCT__UNK__MASK | ct);
+			return (xer_check_tag_e)(XCT__UNK__MASK | ct);
 		}
 		if(b == 0)
 			return XCT_BROKEN;	/* Embedded 0 in buf?! */
 	}
 	if(*need_tag)
-		return (XCT__UNK__MASK | ct);
+		return (xer_check_tag_e)(XCT__UNK__MASK | ct);
 
 	return ct;
 }
@@ -168,7 +168,8 @@
 			(struct_key, chunk_buf, chunk_size,	\
 				(size_t)chunk_size < size);	\
 		if(converted_size == -1) RETURN(RC_FAIL);	\
-		if(converted_size == 0 && size == chunk_size)	\
+		if(converted_size == 0				\
+			&& size == (size_t)chunk_size)		\
 			RETURN(RC_WMORE);			\
 		chunk_size = converted_size;			\
 	} while(0)
@@ -212,7 +213,8 @@
 		/*
 		 * Get the next part of the XML stream.
 		 */
-		ch_size = xer_next_token(buf_ptr, size, &ch_type);
+		ch_size = xer_next_token(&ctx->context, buf_ptr, size,
+			&ch_type);
 		switch(ch_size) {
 		case -1: RETURN(RC_FAIL);
 		case 0:
diff --git a/skeletons/xer_decoder.h b/skeletons/xer_decoder.h
index c0e23b9..fa8c3c6 100644
--- a/skeletons/xer_decoder.h
+++ b/skeletons/xer_decoder.h
@@ -63,7 +63,8 @@
 	PXER_TEXT,	/* Plain text between XER tags */
 	PXER_COMMENT,	/* A comment, may be part of */
   } pxer_chunk_type_e;
-ssize_t xer_next_token(void *buffer, size_t size, pxer_chunk_type_e *_ch_type);
+ssize_t xer_next_token(int *stateContext,
+	void *buffer, size_t size, pxer_chunk_type_e *_ch_type);
 
 /*
  * This function checks the buffer against the tag name is expected to occur.
