returned per-nopad
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);