diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index 7799145..b136065 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -673,7 +673,8 @@
 				continue;
 			}
 			/* Fall through */
-		case XCT_UNEXPECTED:
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
 
 			if(ctx->phase != 1)
 				break;	/* Really unexpected */
@@ -693,9 +694,9 @@
 					ctx->step = edx;
 					ctx->phase = 2;
 					break;
-				case XCT_UNEXPECTED:
+				case XCT_UNKNOWN_OP:
+				case XCT_UNKNOWN_BO:
 					continue;
-				case XCT_CLOSING:
 				default:
 					edx = td->elements_count;
 					break;	/* Phase out */
@@ -704,6 +705,16 @@
 			}
 			if(edx != td->elements_count)
 				continue;
+
+			/* It is expected extension */
+			if(specs->extensible) {
+				ASN_DEBUG("Got anticipated extension, "
+					"but NOT IMPLEMENTED YET");
+				/*
+				 * TODO: implement skipping of extensions
+				 */
+			}
+
 			/* Fall through */
 		default:
 			break;
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index d7352c6..1430946 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -623,6 +623,7 @@
 	ssize_t consumed_myself = 0;	/* Consumed bytes from ptr */
 	int xer_state;			/* XER low level parsing context */
 	int edx;			/* Element index */
+	int edx_end;
 
 	/*
 	 * Create the target structure if it is not present already.
@@ -649,6 +650,7 @@
 		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.
@@ -740,9 +742,8 @@
 				continue;
 			}
 			/* Fall through */
-		case XCT_UNEXPECTED: {
-			int edx_end;
-			int n;
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
 
 			ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d",
 				tcv, ctx->phase);
@@ -754,6 +755,8 @@
 			 * Search which member corresponds to this tag.
 			 */
 			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++) {
 				elm = &td->elements[n];
 				tcv = xer_check_tag(buf_ptr,ch_size,elm->name);
@@ -766,18 +769,29 @@
 					ctx->step = edx = n;
 					ctx->phase = 2;
 					break;
-				case XCT_UNEXPECTED:
+				case XCT_UNKNOWN_OP:
+				case XCT_UNKNOWN_BO:
 					continue;
-				case XCT_CLOSING:
 				default:
 					n = edx_end;
 					break;	/* Phase out */
 				}
 				break;
 			}
-			if(n == edx_end) break;
-			continue;
-		  }
+			if(n != edx_end)
+				continue;
+
+			/* It is expected extension */
+			if(IN_EXTENSION_GROUP(specs,
+				edx + elements[edx].optional)) {
+				ASN_DEBUG("Got anticipated extension at %d, "
+					"but NOT IMPLEMENTED YET", edx);
+				/*
+				 * TODO: implement skipping of extensions
+				 */
+			}
+
+			/* Fall through */
 		default:
 			break;
 		}
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index 53a9e61..120acb2 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -714,7 +714,8 @@
 				continue;
 			}
 			/* Fall through */
-		case XCT_UNEXPECTED:
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
 
 			ASN_DEBUG("XER/SET: tcv=%d, ph=%d", tcv, ctx->phase);
 			if(ctx->phase != 1)
@@ -735,9 +736,9 @@
 					ctx->step = edx;
 					ctx->phase = 2;
 					break;
-				case XCT_UNEXPECTED:
+				case XCT_UNKNOWN_OP:
+				case XCT_UNKNOWN_BO:
 					continue;
-				case XCT_CLOSING:
 				default:
 					edx = td->elements_count;
 					break;	/* Phase out */
@@ -746,6 +747,16 @@
 			}
 			if(edx != td->elements_count)
 				continue;
+
+			/* It is expected extension */
+			if(specs->extensible) {
+				ASN_DEBUG("Got anticipated extension, "
+					"but NOT IMPLEMENTED YET");
+				/*
+				 * TODO: implement skipping of extensions
+				 */
+			}
+
 			/* Fall through */
 		default:
 			break;
diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c
index 01328b4..eed604e 100644
--- a/skeletons/constr_SET_OF.c
+++ b/skeletons/constr_SET_OF.c
@@ -577,7 +577,8 @@
 				continue;
 			}
 			/* Fall through */
-		case XCT_UNEXPECTED:
+		case XCT_UNKNOWN_OP:
+		case XCT_UNKNOWN_BO:
 
 			ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase);
 			if(ctx->phase != 1)
@@ -595,8 +596,6 @@
 				 */
 				ctx->phase = 2;
 				continue;
-			case XCT_UNEXPECTED:
-			case XCT_CLOSING:
 			default:
 				break;	/* Phase out */
 			}
diff --git a/skeletons/xer_decoder.c b/skeletons/xer_decoder.c
index 97e0d39..e81d7de 100644
--- a/skeletons/xer_decoder.c
+++ b/skeletons/xer_decoder.c
@@ -137,12 +137,13 @@
 					return ct;
 				}
 			}
-			return XCT_UNEXPECTED;
+			return (XCT__UNK__MASK | ct);
 		}
 		if(b == 0)
 			return XCT_BROKEN;	/* Embedded 0 in buf?! */
 	}
-	if(*need_tag) return XCT_UNEXPECTED;
+	if(*need_tag)
+		return (XCT__UNK__MASK | ct);
 
 	return ct;
 }
@@ -272,7 +273,7 @@
 			ADVANCE(ch_size);
 			ctx->phase = 2;	/* Phase out */
 			RETURN(RC_OK);
-		case XCT_UNEXPECTED:
+		case XCT_UNKNOWN_BO:
 			if(!ctx->phase) break;
 			/*
 			 * Certain tags in the body may be expected.
diff --git a/skeletons/xer_decoder.h b/skeletons/xer_decoder.h
index 1c26ef7..c3df005 100644
--- a/skeletons/xer_decoder.h
+++ b/skeletons/xer_decoder.h
@@ -70,11 +70,14 @@
  * This function checks the buffer against the tag name is expected to occur.
  */
   typedef enum xer_check_tag {
-	XCT_BROKEN,	/* The tag is broken */
-	XCT_UNEXPECTED,	/* The tag is fine, but unexpected */
-	XCT_OPENING,	/* This is the opening <tag> */
-	XCT_CLOSING,	/* This is the closing </tag> */
-	XCT_BOTH,	/* This is the opening and closing tag <tag/> */
+	XCT_BROKEN	= 0,	/* The tag is broken */
+	XCT_OPENING	= 1,	/* This is the <opening> tag */
+	XCT_CLOSING	= 2,	/* This is the </closing> tag */
+	XCT_BOTH	= 3,	/* This is the <modified/> tag */
+	XCT__UNK__MASK	= 4,	/* Mask of everything unexpected */
+	XCT_UNKNOWN_OP	= 5,	/* Unexpected <opening> tag */
+	XCT_UNKNOWN_CL	= 6,	/* Unexpected </closing> tag */
+	XCT_UNKNOWN_BO	= 7,	/* Unexpected <modified/> tag */
   } xer_check_tag_e;
 xer_check_tag_e xer_check_tag(const void *buf_ptr, int size,
 		const char *need_tag);
