diff --git a/skeletons/asn-decoder-template.c b/skeletons/asn-decoder-template.c
index 348c373..c50d8b9 100644
--- a/skeletons/asn-decoder-template.c
+++ b/skeletons/asn-decoder-template.c
@@ -21,7 +21,9 @@
 #include <asn_application.h>
 
 extern asn_TYPE_descriptor_t asn_DEF;	/* ASN.1 type to be decoded */
-static asn_TYPE_descriptor_t *pduType = &asn_DEF;
+#ifdef	ASN_PDU_COLLECTION		/* Generated by asn1c: -pdu=... */
+extern asn_TYPE_descriptor_t *asn_pdu_collection[];
+#endif
 
 /*
  * Open file and parse its contens.
@@ -37,7 +39,8 @@
 /* Input data format selector */
 static enum input_format {
 	INP_BER,	/* -iber: BER input */
-	INP_XER		/* -ixer: XER input */
+	INP_XER,	/* -ixer: XER input */
+	INP_PER		/* -iper: Unaligned PER input */
 } iform;	/* -i<format> */
 
 /* Output data format selector */
@@ -56,19 +59,26 @@
 
 int
 main(int ac, char **av) {
+	static asn_TYPE_descriptor_t *pduType = &asn_DEF;
 	ssize_t suggested_bufsize = 8192;  /* close or equal to stdio buffer */
 	int number_of_iterations = 1;
 	int num;
 	int ch;
 
+	/* Figure out if Unaligned PER needs to be default */
+	if(pduType->uper_decoder)
+		iform = INP_PER;
+
 	/*
 	 * Pocess the command-line argments.
 	 */
-	while((ch = getopt(ac, av, "i:o:b:cdn:hs:")) != -1)
+	while((ch = getopt(ac, av, "i:o:b:cdn:p:hs:")) != -1)
 	switch(ch) {
 	case 'i':
 		if(optarg[0] == 'b') { iform = INP_BER; break; }
 		if(optarg[0] == 'x') { iform = INP_XER; break; }
+		if(pduType->uper_decoder
+		&& optarg[0] == 'p') { iform = INP_PER; break; }
 		fprintf(stderr, "-i<format>: '%s': improper format selector",
 			optarg);
 		exit(EX_UNAVAILABLE);
@@ -80,6 +90,21 @@
 		fprintf(stderr, "-o<format>: '%s': improper format selector",
 			optarg);
 		exit(EX_UNAVAILABLE);
+	case 'p':
+#ifdef	ASN_PDU_COLLECTION
+		{
+			asn_TYPE_descriptor_t **pdu = asn_pdu_collection;
+			if(optarg[0] < 'A' || optarg[0] > 'Z') {
+				fprintf(stderr, "Available PDU types:\n");
+				for(; *pdu; pdu++) printf("%s\n", (*pdu)->name);
+				exit(0);
+			}
+			while(*pdu && strcmp((*pdu)->name, optarg)) pdu++;
+			if(*pdu) { pduType = *pdu; break; }
+		}
+#endif	/* ASN_PDU_COLLECTION */
+		fprintf(stderr, "-p %s: Unrecognized PDU\n", optarg);
+		exit(EX_UNAVAILABLE);
 	case 'b':
 		suggested_bufsize = atoi(optarg);
 		if(suggested_bufsize < 1
@@ -115,21 +140,32 @@
 		break;
 	case 'h':
 	default:
+		fprintf(stderr, "Usage: %s [options] <data.ber> ...\n", av[0]);
+		fprintf(stderr, "Where options are:\n");
+		if(pduType->uper_decoder)
 		fprintf(stderr,
-		"Usage: %s [options] <data.ber> ...\n"
-		"Where options are:\n"
-		"  -iber   (I)  Input is in BER (Basic Encoding Rules)\n"
+		"  -iper   (I)  Input is in Unaligned PER (Packed Encoding Rules)\n");
+		fprintf(stderr,
+		"  -iber   %s  Input is in BER (Basic Encoding Rules)\n",
+			iform == INP_PER ? "   " : "(I)");
+		fprintf(stderr,
 		"  -ixer        Input is in XER (XML Encoding Rules)\n"
 		"  -oder        Output in DER (Distinguished Encoding Rules)\n"
 		"  -oxer   (O)  Output in XER (XML Encoding Rules)\n"
 		"  -otext       Output in plain semi-structured text (dump)\n"
-		"  -onull       Verify (decode) input, but do not output\n"
+		"  -onull       Verify (decode) input, but do not output\n");
+#ifdef	ASN_PDU_COLLECTION
+		fprintf(stderr,
+		"  -p <PDU>     Specify PDU type to decode\n"
+		"  -p list      List available PDUs\n");
+#endif	/* ASN_PDU_COLLECTION */
+		fprintf(stderr,
 		"  -b <size>    Set the i/o buffer size (default is %ld)\n"
 		"  -c           Check ASN.1 constraints after decoding\n"
 		"  -d           Enable debugging (-dd is even better)\n"
 		"  -n <num>     Process files <num> times\n"
 		"  -s <size>    Set the stack usage limit\n"
-		, av[0], (long)suggested_bufsize);
+		, (long)suggested_bufsize);
 		exit(EX_USAGE);
 	}
 
@@ -210,7 +246,8 @@
 
 /* Dump the buffer */
 static int write_out(const void *buffer, size_t size, void *key) {
-	return (fwrite(buffer, 1, size, key) == size) ? 0 : -1;
+	FILE *fp = (FILE *)key;
+	return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1;
 }
 
 static char *buffer;
@@ -302,6 +339,7 @@
 	rval.consumed = 0;
 
 	while((rd = fread(fbuf, 1, fbuf_size, fp)) || !feof(fp)) {
+		asn_per_data_t pd;
 		char  *i_bptr;
 		size_t i_size;
 
@@ -330,6 +368,13 @@
 			rval = xer_decode(opt_codec_ctx, pduType,
 				(void **)&structure, i_bptr, i_size);
 			break;
+		case INP_PER:
+			pd.buffer = (uint8_t *)i_bptr;
+			pd.nboff  = 0;
+			pd.nbits  = i_size * 8;
+			rval = pduType->uper_decoder(opt_codec_ctx, pduType, 0,
+				(void **)&structure, &pd);
+			break;
 		}
 		DEBUG("decode(%ld) consumed %ld, code %d",
 			(long)buf_len, (long)rval.consumed, rval.code);
