diff --git a/skeletons/OPEN_TYPE.c b/skeletons/OPEN_TYPE.c
index a415ff0..6f90028 100644
--- a/skeletons/OPEN_TYPE.c
+++ b/skeletons/OPEN_TYPE.c
@@ -23,6 +23,8 @@
 	0,	/* Use generic outmost tag fetcher */
 };
 
+#ifndef  ASN_DISABLE_PER_SUPPORT
+
 asn_dec_rval_t
 OPEN_TYPE_uper_get(asn_codec_ctx_t *opt_codec_ctx,
                    asn_TYPE_descriptor_t *td, void *sptr,
@@ -90,79 +92,4 @@
     return rv;
 }
 
-asn_dec_rval_t
-OPEN_TYPE_oer_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) {
-    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;
-    size_t ot_ret;
-
-    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(selected.type_descriptor, *memb_ptr2, 0)
-           != 0) {
-            ASN__DECODE_FAILED;
-        }
-    }
-
-    inner_value =
-        (char *)*memb_ptr2
-        + elm->type->elements[selected.presence_index - 1].memb_offset;
-
-    ot_ret = oer_open_type_get(opt_codec_ctx, selected.type_descriptor, NULL,
-                               &inner_value, ptr, size);
-    switch(ot_ret) {
-    default:
-        if(CHOICE_variant_set_presence(selected.type_descriptor, *memb_ptr2,
-                                       selected.presence_index)
-           == 0) {
-            rv.code = RC_OK;
-            rv.consumed = ot_ret;
-            return rv;
-        } else {
-            /* Oh, now a full-blown failure failure */
-        }
-        /* Fall through */
-    case -1:
-        rv.code = RC_FAIL;
-        rv.consumed = 0;
-        break;
-    case 0:
-        rv.code = RC_WMORE;
-        rv.consumed = 0;
-        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;
-}
+#endif  /* ASN_DISABLE_PER_SUPPORT */
diff --git a/skeletons/OPEN_TYPE_oer.c b/skeletons/OPEN_TYPE_oer.c
index 3de9574..4e54262 100644
--- a/skeletons/OPEN_TYPE_oer.c
+++ b/skeletons/OPEN_TYPE_oer.c
@@ -5,7 +5,6 @@
 #include <asn_internal.h>
 #include <OPEN_TYPE.h>
 #include <constr_CHOICE.h>
-#include <oer_opentype.h>
 #include <errno.h>
 
 asn_dec_rval_t
diff --git a/skeletons/constr_TYPE.h b/skeletons/constr_TYPE.h
index 898c900..e41f0bd 100644
--- a/skeletons/constr_TYPE.h
+++ b/skeletons/constr_TYPE.h
@@ -41,9 +41,16 @@
 #include <xer_encoder.h>	/* Encoder into XER (XML, text) */
 #include <per_decoder.h>	/* Packet Encoding Rules decoder */
 #include <per_encoder.h>	/* Packet Encoding Rules encoder */
+#include <constraints.h>	/* Subtype constraints support */
+
+#ifdef  ASN_DISABLE_OER_SUPPORT
+typedef void (*oer_type_decoder_f)();
+typedef void (*oer_type_encoder_f)();
+typedef struct{} asn_oer_constraints_t;
+#else
 #include <oer_decoder.h>	/* Octet Encoding Rules encoder */
 #include <oer_encoder.h>	/* Octet Encoding Rules encoder */
-#include <constraints.h>	/* Subtype constraints support */
+#endif
 
 /*
  * Free the structure according to its specification.
diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index 8c87030..de5b4a2 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -341,7 +341,11 @@
                 DEBUG("Encoded in %ld bytes of DER", (long)erv.encoded);
                 break;
             case OUT_OER:
+#ifdef  ASN_DISABLE_OER_SUPPORT
+                erv.encoded = -1;
+#else
                 erv = oer_encode(pduType, structure, write_out, stdout);
+#endif
                 if(erv.encoded < 0) {
                     fprintf(stderr, "%s: Cannot convert %s into oER\n", name,
                             pduType->name);
@@ -350,7 +354,11 @@
                 DEBUG("Encoded in %ld bytes of OER", (long)erv.encoded);
                 break;
             case OUT_PER:
+#ifdef  ASN_DISABLE_PER_SUPPORT
+                erv.encoded = -1;
+#else
                 erv = uper_encode(pduType, structure, write_out, stdout);
+#endif
                 if(erv.encoded < 0) {
                     fprintf(stderr,
                             "%s: Cannot convert %s into Unaligned PER\n", name,
@@ -670,14 +678,23 @@
                 (void **)&structure, i_bptr, i_size);
             break;
         case INP_OER:
+#ifdef ASN_DISABLE_OER_SUPPORT
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+#else
             rval = oer_decode(opt_codec_ctx, pduType,
                 (void **)&structure, i_bptr, i_size);
+#endif
             break;
         case INP_XER:
             rval = xer_decode(opt_codec_ctx, pduType,
                 (void **)&structure, i_bptr, i_size);
             break;
         case INP_PER:
+#ifdef ASN_DISABLE_PER_SUPPORT
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+#else
             if(opt_nopad)
             rval = uper_decode(opt_codec_ctx, pduType,
                 (void **)&structure, i_bptr, i_size, 0,
@@ -685,6 +702,7 @@
             else
             rval = uper_decode_complete(opt_codec_ctx, pduType,
                 (void **)&structure, i_bptr, i_size);
+#endif
             switch(rval.code) {
             case RC_OK:
                 /* Fall through */
diff --git a/skeletons/file-dependencies b/skeletons/file-dependencies
index 1a2c79b..0d06b8c 100644
--- a/skeletons/file-dependencies
+++ b/skeletons/file-dependencies
@@ -59,9 +59,6 @@
 xer_support.h xer_support.c	# XML parsing
 xer_decoder.h xer_decoder.c	# XER decoding support
 xer_encoder.h xer_encoder.c	# XER encoding support
-oer_decoder.h oer_decoder.c # OER decoding support
-oer_encoder.h oer_encoder.c # OER encoding support
-oer_support.h oer_support.c # OER support
 per_support.h per_support.c	# PER parsing
 per_decoder.h per_decoder.c	# PER decoding support
 per_encoder.h per_encoder.c	# PER encoding support
@@ -71,6 +68,10 @@
 converter-sample.c		# A default name for sample transcoder
 
 CODEC-OER:			# THIS IS A SPECIAL SECTION
+oer_decoder.h oer_decoder.c # OER decoding support
+oer_encoder.h oer_encoder.c # OER encoding support
+oer_support.h oer_support.c # OER support
+OPEN_TYPE.h OPEN_TYPE_oer.c
 INTEGER_oer.c
 OCTET_STRING_oer.c
 NativeInteger_oer.c
