diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index c95b0d0..178264e 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -51,10 +51,11 @@
 static FILE *argument_to_file(char *av[], int idx);
 static char *argument_to_name(char *av[], int idx);
 
-       int opt_debug;    /* -d (or -dd) */
-static int opt_check;    /* -c (constraints checking) */
-static int opt_stack;    /* -s (maximum stack size) */
-static int opt_onepdu;    /* -1 (decode single PDU) */
+       int opt_debug;   /* -d (or -dd) */
+static int opt_check;   /* -c (constraints checking) */
+static int opt_stack;   /* -s (maximum stack size) */
+static int opt_nopad;   /* -per-nopad (PER input is not padded between msgs) */
+static int opt_onepdu;  /* -1 (decode single PDU) */
 
 #ifdef    JUNKTEST        /* Enable -J <probability> */
 #define    JUNKOPT    "J:"
@@ -241,6 +242,10 @@
         }
         break;
     case 'p':
+        if(strcmp(optarg, "er-nopad") == 0) {
+            opt_nopad = 1;
+            break;
+        }
 #ifdef    ASN_PDU_COLLECTION
         if(strcmp(optarg, "list") == 0) {
             asn_TYPE_descriptor_t **pdu = asn_pdu_collection;
@@ -313,6 +318,10 @@
                         (sel->syntax == osyntax) ? " (DEFAULT)" : "");
             }
         }
+        if(pduType->op->uper_decoder) {
+            fprintf(stderr,
+                    "  -per-nopad   Assume PER PDUs are not padded (-iper)\n");
+        }
 #ifdef    ASN_PDU_COLLECTION
         fprintf(stderr,
         "  -p <PDU>     Specify PDU type to decode\n"
@@ -648,11 +657,16 @@
 }
 
 static int
-restartability_supported(enum asn_transfer_syntax syntax) {
+is_syntax_PER(enum asn_transfer_syntax syntax) {
     return (syntax != ATS_UNALIGNED_BASIC_PER
             && syntax != ATS_UNALIGNED_CANONICAL_PER);
 }
 
+static int
+restartability_supported(enum asn_transfer_syntax syntax) {
+    return is_syntax_PER(syntax);
+}
+
 static void *
 data_decode_from_file(enum asn_transfer_syntax isyntax, asn_TYPE_descriptor_t *pduType, FILE *file, const char *name, ssize_t suggested_bufsize, int on_first_pdu) {
     static uint8_t *fbuf;
@@ -732,8 +746,22 @@
         junk_bytes_with_probability(i_bptr, i_size, opt_jprob);
 #endif
 
-        rval = asn_decode(opt_codec_ctx, isyntax, pduType, (void **)&structure,
-                          i_bptr, i_size);
+        if(is_syntax_PER(isyntax) && opt_nopad) {
+#ifdef  ASN_DISABLE_PER_SUPPORT
+            rval.code = RC_FAIL;
+            rval.consumed = 0;
+#else
+            rval = uper_decode(opt_codec_ctx, pduType, (void **)&structure,
+                               i_bptr, i_size, 0, DynamicBuffer.unbits);
+            /* uper_decode() returns bits! */
+            ecbits = rval.consumed % 8; /* Bits consumed from the last byte */
+            rval.consumed >>= 3;    /* Convert bits into bytes. */
+#endif
+            /* Non-padded PER decoder */
+        } else {
+            rval = asn_decode(opt_codec_ctx, isyntax, pduType,
+                              (void **)&structure, i_bptr, i_size);
+        }
         if(rval.code == RC_WMORE && !restartability_supported(isyntax)) {
             /* PER does not support restartability */
             ASN_STRUCT_FREE(*pduType, structure);
