extensions support

diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index 175ef24..49bd06c 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -590,9 +590,11 @@
 	 * Phase 0: Check that the opening tag matches our expectations.
 	 * Phase 1: Processing body and reacting on closing tag.
 	 * Phase 2: Processing inner type.
-	 * Phase 3: Only waiting for closing tag
+	 * Phase 3: Only waiting for closing tag.
+	 * Phase 4: Skipping unknown extensions.
+	 * Phase 5: PHASED OUT
 	 */
-	for(edx = ctx->step; ctx->phase <= 3;) {
+	for(edx = ctx->step; ctx->phase <= 4;) {
 		pxer_chunk_type_e ch_type;	/* XER chunk type */
 		ssize_t ch_size;		/* Chunk size */
 		xer_check_tag_e tcv;		/* Tag check value */
@@ -653,6 +655,27 @@
 		}
 
 		tcv = xer_check_tag(buf_ptr, ch_size, xml_tag);
+
+		/* Skip the extensions section */
+		if(ctx->phase == 4) {
+			ASN_DEBUG("skip_unknown(%d, %ld)",
+				tcv, (long)ctx->left);
+			switch(xer_skip_unknown(tcv, &ctx->left)) {
+			case -1:
+				ctx->phase = 5;
+				RETURN(RC_FAIL);
+				continue;
+			case 1:
+				ctx->phase = 3;
+			case 0:
+				XER_ADVANCE(ch_size);
+				continue;
+			case 2:
+				ctx->phase = 3;
+				break;
+			}
+		}
+
 		switch(tcv) {
 		case XCT_BOTH:
 			break;	/* No CHOICE? */
@@ -660,7 +683,7 @@
 			if(ctx->phase != 3)
 				break;
 			XER_ADVANCE(ch_size);
-			ctx->phase = 4;	/* Phase out */
+			ctx->phase = 5;	/* Phase out */
 			RETURN(RC_OK);
 		case XCT_OPENING:
 			if(ctx->phase == 0) {
@@ -704,11 +727,21 @@
 
 			/* It is expected extension */
 			if(specs->extensible) {
-				ASN_DEBUG("Got anticipated extension, "
-					"but NOT IMPLEMENTED YET");
+				ASN_DEBUG("Got anticipated extension");
 				/*
-				 * TODO: implement skipping of extensions
+				 * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
+				 * By using a mask. Only record a pure
+				 * <opening> tags.
 				 */
+				if(tcv & XCT_CLOSING) {
+					/* Found </extension> without body */
+					ctx->phase = 3; /* Terminating */
+				} else {
+					ctx->left = 1;
+					ctx->phase = 4; /* Skip ...'s */
+				}
+				XER_ADVANCE(ch_size);
+				continue;
 			}
 
 			/* Fall through */
@@ -720,7 +753,7 @@
 		break;
 	}
 
-	ctx->phase = 4;	/* Phase out, just in case */
+	ctx->phase = 5;	/* Phase out, just in case */
 	RETURN(RC_FAIL);
 }