diff --git a/skeletons/converter-sample.c b/skeletons/converter-sample.c
index de42326..5133114 100644
--- a/skeletons/converter-sample.c
+++ b/skeletons/converter-sample.c
@@ -1,6 +1,6 @@
 /*
  * Generic converter template for a selected ASN.1 type.
- * Copyright (c) 2005, 2006, 2007 Lev Walkin <vlm@lionet.info>.
+ * Copyright (c) 2005-2017 Lev Walkin <vlm@lionet.info>.
  * All rights reserved.
  * 
  * To compile with your own ASN.1 type, please redefine the PDU as shown:
@@ -50,6 +50,7 @@
 static enum input_format {
 	INP_BER,	/* -iber: BER input */
 	INP_XER,	/* -ixer: XER input */
+	INP_OER,	/* -ioer: OER input */
 	INP_PER		/* -iper: Unaligned PER input */
 } iform;	/* -i<format> */
 
@@ -57,6 +58,7 @@
 static enum output_format {
 	OUT_XER,	/* -oxer: XER (XML) output */
 	OUT_DER,	/* -oder: DER (BER) output */
+	OUT_OER,	/* -ooer: Canonical OER output */
 	OUT_PER,	/* -oper: Unaligned PER output */
 	OUT_TEXT,	/* -otext: semi-structured text */
 	OUT_NULL	/* -onull: No pretty-printing */
@@ -91,8 +93,10 @@
 	int num;
 	int ch;
 
-	/* Figure out if Unaligned PER needs to be default */
-	if(pduType->uper_decoder)
+	/* Figure out if specialty decoder needs to be default */
+	if(pduType->oer_decoder)
+		iform = INP_OER;
+	else if(pduType->uper_decoder)
 		iform = INP_PER;
 
 	/*
@@ -103,6 +107,8 @@
 	case 'i':
 		if(optarg[0] == 'b') { iform = INP_BER; break; }
 		if(optarg[0] == 'x') { iform = INP_XER; break; }
+		if(pduType->oer_decoder
+		&& optarg[0] == 'p') { iform = INP_OER; break; }
 		if(pduType->uper_decoder
 		&& optarg[0] == 'p') { iform = INP_PER; break; }
 		fprintf(stderr, "-i<format>: '%s': improper format selector\n",
@@ -110,6 +116,8 @@
 		exit(EX_UNAVAILABLE);
 	case 'o':
 		if(optarg[0] == 'd') { oform = OUT_DER; break; }
+		if(pduType->oer_encoder
+		&& optarg[0] == 'o') { oform = OUT_OER; break; }
 		if(pduType->uper_encoder
 		&& optarg[0] == 'p') { oform = OUT_PER; break; }
 		if(optarg[0] == 'x') { oform = OUT_XER; break; }
@@ -194,14 +202,22 @@
 #endif
 		fprintf(stderr, "Usage: %s [options] <data.ber> ...\n", av[0]);
 		fprintf(stderr, "Where options are:\n");
+		if(pduType->oer_decoder)
+		fprintf(stderr,
+		"  -ioer        Input is in OER (Octet Encoding Rules)%s\n",
+			iform == INP_OER ? " (DEFAULT)" : "");
 		if(pduType->uper_decoder)
 		fprintf(stderr,
-		"  -iper        Input is in Unaligned PER (Packed Encoding Rules) (DEFAULT)\n");
+		"  -iper        Input is in Unaligned PER (Packed Encoding Rules)%s\n",
+			iform == INP_PER ? " (DEFAULT)" : "");
 		fprintf(stderr,
 		"  -iber        Input is in BER (Basic Encoding Rules)%s\n",
-			iform == INP_PER ? "" : " (DEFAULT)");
+			iform == INP_BER ? " (DEFAULT)" : "");
 		fprintf(stderr,
 		"  -ixer        Input is in XER (XML Encoding Rules)\n");
+		if(pduType->oer_encoder)
+		fprintf(stderr,
+		"  -ooer        Output in Canonical OER (Octet Encoding Rules)\n");
 		if(pduType->uper_encoder)
 		fprintf(stderr,
 		"  -oper        Output in Unaligned PER (Packed Encoding Rules)\n");
@@ -312,6 +328,16 @@
 			}
 			DEBUG("Encoded in %ld bytes of DER", (long)erv.encoded);
 			break;
+		case OUT_OER:
+			erv = oer_encode(pduType, structure, write_out, stdout);
+			if(erv.encoded < 0) {
+				fprintf(stderr,
+					"%s: Cannot convert %s into oER\n",
+					name, pduType->name);
+				exit(EX_UNAVAILABLE);
+			}
+			DEBUG("Encoded in %ld bytes of OER", (long)erv.encoded);
+			break;
 		case OUT_PER:
 			erv = uper_encode(pduType, structure, write_out, stdout);
 			if(erv.encoded < 0) {
@@ -631,6 +657,10 @@
 			rval = ber_decode(opt_codec_ctx, pduType,
 				(void **)&structure, i_bptr, i_size);
 			break;
+		case INP_OER:
+			rval = oer_decode(opt_codec_ctx, pduType,
+				(void **)&structure, i_bptr, i_size);
+			break;
 		case INP_XER:
 			rval = xer_decode(opt_codec_ctx, pduType,
 				(void **)&structure, i_bptr, i_size);
