diff --git a/skeletons/OPEN_TYPE.c b/skeletons/OPEN_TYPE.c
index 72bc88c..fc2571b 100644
--- a/skeletons/OPEN_TYPE.c
+++ b/skeletons/OPEN_TYPE.c
@@ -23,8 +23,8 @@
 	0,	/* Use generic outmost tag fetcher */
 };
 
-#undef  XER_ADVANCE
-#define XER_ADVANCE(num_bytes)           \
+#undef  ADVANCE
+#define ADVANCE(num_bytes)               \
     do {                                 \
         size_t num = num_bytes;          \
         ptr = ((const char *)ptr) + num; \
@@ -33,6 +33,84 @@
     } while(0)
 
 asn_dec_rval_t
+OPEN_TYPE_ber_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
+                  void *sptr, asn_TYPE_member_t *elm, const void *ptr,
+                  size_t size) {
+    size_t consumed_myself = 0;
+    asn_type_selector_result_t selected;
+    void *memb_ptr;   /* Pointer to the member */
+    void **memb_ptr2; /* Pointer to that pointer */
+    void *inner_value;
+    asn_dec_rval_t rv;
+
+    if(!(elm->flags & ATF_OPEN_TYPE) || !elm->type_selector) {
+        ASN__DECODE_FAILED;
+    }
+
+    selected = elm->type_selector(td, sptr);
+    if(!selected.presence_index) {
+        ASN__DECODE_FAILED;
+    }
+
+    /* Fetch the pointer to this member */
+    if(elm->flags & ATF_POINTER) {
+        memb_ptr2 = (void **)((char *)sptr + elm->memb_offset);
+    } else {
+        memb_ptr = (char *)sptr + elm->memb_offset;
+        memb_ptr2 = &memb_ptr;
+    }
+    if(*memb_ptr2 != NULL) {
+        /* Make sure we reset the structure first before encoding */
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2, 0) != 0) {
+            ASN__DECODE_FAILED;
+        }
+    }
+
+    inner_value =
+        (char *)*memb_ptr2
+        + elm->type->elements[selected.presence_index - 1].memb_offset;
+
+    ASN_DEBUG("presence %d\n", selected.presence_index);
+
+    rv = selected.type_descriptor->op->ber_decoder(
+        opt_codec_ctx, selected.type_descriptor, &inner_value, ptr, size,
+        elm->tag_mode);
+    ADVANCE(rv.consumed);
+    rv.consumed = 0;
+    switch(rv.code) {
+    case RC_OK:
+        if(CHOICE_variant_set_presence(elm->type, *memb_ptr2,
+                                       selected.presence_index)
+           == 0) {
+            rv.code = RC_OK;
+            rv.consumed = consumed_myself;
+            return rv;
+        } else {
+            /* Oh, now a full-blown failure failure */
+        }
+        /* Fall through */
+    case RC_FAIL:
+        rv.consumed = consumed_myself;
+        /* Fall through */
+    case RC_WMORE:
+        break;
+    }
+
+    if(*memb_ptr2) {
+        asn_CHOICE_specifics_t *specs = selected.type_descriptor->specifics;
+        if(elm->flags & ATF_POINTER) {
+            ASN_STRUCT_FREE(*selected.type_descriptor, inner_value);
+            *memb_ptr2 = NULL;
+        } else {
+            ASN_STRUCT_FREE_CONTENTS_ONLY(*selected.type_descriptor,
+                                          inner_value);
+            memset(*memb_ptr2, 0, specs->struct_size);
+        }
+    }
+    return rv;
+}
+
+asn_dec_rval_t
 OPEN_TYPE_xer_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
                   void *sptr, asn_TYPE_member_t *elm, const void *ptr,
                   size_t size) {
@@ -86,7 +164,7 @@
                 ASN__DECODE_STARVED;
             case PXER_COMMENT:
             case PXER_TEXT:
-                XER_ADVANCE(ch_size);
+                ADVANCE(ch_size);
                 continue;
             case PXER_TAG:
                 break;
@@ -100,7 +178,7 @@
      */
     switch(xer_check_tag(ptr, ch_size, elm->name)) {
     case XCT_OPENING:
-        XER_ADVANCE(ch_size);
+        ADVANCE(ch_size);
         break;
     case XCT_BROKEN:
     default:
@@ -113,7 +191,7 @@
 
     rv = selected.type_descriptor->op->xer_decoder(
         opt_codec_ctx, selected.type_descriptor, &inner_value, NULL, ptr, size);
-    XER_ADVANCE(rv.consumed);
+    ADVANCE(rv.consumed);
     rv.consumed = 0;
     switch(rv.code) {
     case RC_OK:
@@ -161,7 +239,7 @@
                 ASN__DECODE_STARVED;
             case PXER_COMMENT:
             case PXER_TEXT:
-                XER_ADVANCE(ch_size);
+                ADVANCE(ch_size);
                 continue;
             case PXER_TAG:
                 break;
@@ -175,7 +253,7 @@
      */
     switch(xer_check_tag(ptr, ch_size, elm->name)) {
     case XCT_CLOSING:
-        XER_ADVANCE(ch_size);
+        ADVANCE(ch_size);
         break;
     case XCT_BROKEN:
     default:
diff --git a/skeletons/OPEN_TYPE.h b/skeletons/OPEN_TYPE.h
index d49b3e6..22583b8 100644
--- a/skeletons/OPEN_TYPE.h
+++ b/skeletons/OPEN_TYPE.h
@@ -27,6 +27,12 @@
  * Decode an Open Type which is potentially constraiend
  * by the other members of the parent structure.
  */
+asn_dec_rval_t OPEN_TYPE_ber_get(asn_codec_ctx_t *opt_codec_ctx,
+                                 asn_TYPE_descriptor_t *parent_type,
+                                 void *parent_structure,
+                                 asn_TYPE_member_t *element, const void *ptr,
+                                 size_t size);
+
 asn_dec_rval_t OPEN_TYPE_xer_get(asn_codec_ctx_t *opt_codec_ctx,
                                  asn_TYPE_descriptor_t *parent_type,
                                  void *parent_structure,
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index ba74067..856cc6f 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -410,10 +410,14 @@
 		/*
 		 * Invoke the member fetch routine according to member's type
 		 */
-		rval = elements[edx].type->op->ber_decoder(opt_codec_ctx,
-				elements[edx].type,
-				memb_ptr2, ptr, LEFT,
-				elements[edx].tag_mode);
+		if((elements[edx].flags & ATF_OPEN_TYPE) && elements[edx].type_selector) {
+			rval = OPEN_TYPE_ber_get(opt_codec_ctx, td, st, &elements[edx], ptr, LEFT);
+        } else {
+			rval = elements[edx].type->op->ber_decoder(opt_codec_ctx,
+					elements[edx].type,
+					memb_ptr2, ptr, LEFT,
+					elements[edx].tag_mode);
+		}
 		ASN_DEBUG("In %s SEQUENCE decoded %zu %s of %d "
 			"in %d bytes rval.code %d, size=%d",
 			td->name, edx, elements[edx].type->name,
