diff --git a/skeletons/constr_CHOICE.c b/skeletons/constr_CHOICE.c
index e49bc1a..b3af333 100644
--- a/skeletons/constr_CHOICE.c
+++ b/skeletons/constr_CHOICE.c
@@ -353,8 +353,7 @@
 }
 
 asn_enc_rval_t
-CHOICE_encode_der(asn_TYPE_descriptor_t *td,
-		void *struct_ptr,
+CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr,
 		int tag_mode, ber_tlv_tag_t tag,
 		asn_app_consume_bytes_f *cb, void *app_key) {
 	asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
@@ -367,7 +366,7 @@
 	ASN_DEBUG("%s %s as CHOICE",
 		cb?"Encoding":"Estimating", td->name);
 
-	present = _fetch_present_idx(struct_ptr,
+	present = _fetch_present_idx(sptr,
 		specs->pres_offset, specs->pres_size);
 
 	/*
@@ -380,10 +379,7 @@
 			erval.encoded = 0;
 			return erval;
 		}
-		erval.encoded = -1;
-		erval.failed_type = td;
-		erval.structure_ptr = struct_ptr;
-		return erval;
+		_ASN_ENCODE_FAILED;
 	}
 
 	/*
@@ -391,20 +387,17 @@
 	 */
 	elm = &td->elements[present-1];
 	if(elm->flags & ATF_POINTER) {
-		memb_ptr = *(void **)((char *)struct_ptr + elm->memb_offset);
+		memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
 		if(memb_ptr == 0) {
 			if(elm->optional) {
 				erval.encoded = 0;
-			} else {
-				/* Mandatory element absent */
-				erval.encoded = -1;
-				erval.failed_type = td;
-				erval.structure_ptr = struct_ptr;
+				return erval;
 			}
-			return erval;
+			/* Mandatory element absent */
+			_ASN_ENCODE_FAILED;
 		}
 	} else {
-		memb_ptr = (void *)((char *)struct_ptr + elm->memb_offset);
+		memb_ptr = (void *)((char *)sptr + elm->memb_offset);
 	}
 
 	/*
@@ -427,12 +420,8 @@
 		/* Encode CHOICE with parent or my own tag */
 		ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag,
 			cb, app_key);
-		if(ret == -1) {
-			erval.encoded = -1;
-			erval.failed_type = td;
-			erval.structure_ptr = struct_ptr;
-			return erval;
-		}
+		if(ret == -1)
+			_ASN_ENCODE_FAILED;
 		computed_size += ret;
 	}
 
diff --git a/skeletons/constr_SEQUENCE.c b/skeletons/constr_SEQUENCE.c
index aefd94b..7dcb5da 100644
--- a/skeletons/constr_SEQUENCE.c
+++ b/skeletons/constr_SEQUENCE.c
@@ -506,7 +506,7 @@
  */
 asn_enc_rval_t
 SEQUENCE_encode_der(asn_TYPE_descriptor_t *td,
-	void *ptr, int tag_mode, ber_tlv_tag_t tag,
+	void *sptr, int tag_mode, ber_tlv_tag_t tag,
 	asn_app_consume_bytes_f *cb, void *app_key) {
 	size_t computed_size = 0;
 	asn_enc_rval_t erval;
@@ -523,10 +523,14 @@
 		asn_TYPE_member_t *elm = &td->elements[edx];
 		void *memb_ptr;
 		if(elm->flags & ATF_POINTER) {
-			memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
-			if(!memb_ptr) continue;
+			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
+			if(!memb_ptr) {
+				if(elm->optional) continue;
+				/* Mandatory element is missing */
+				_ASN_ENCODE_FAILED;
+			}
 		} else {
-			memb_ptr = (void *)((char *)ptr + elm->memb_offset);
+			memb_ptr = (void *)((char *)sptr + elm->memb_offset);
 		}
 		erval = elm->type->der_encoder(elm->type, memb_ptr,
 			elm->tag_mode, elm->tag,
@@ -543,12 +547,8 @@
 	 */
 	ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key);
 	ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size);
-	if(ret == -1) {
-		erval.encoded = -1;
-		erval.failed_type = td;
-		erval.structure_ptr = ptr;
-		return erval;
-	}
+	if(ret == -1)
+		_ASN_ENCODE_FAILED;
 	erval.encoded = computed_size + ret;
 
 	if(!cb) return erval;
@@ -562,10 +562,10 @@
 		void *memb_ptr;
 
 		if(elm->flags & ATF_POINTER) {
-			memb_ptr = *(void **)((char *)ptr + elm->memb_offset);
+			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
 			if(!memb_ptr) continue;
 		} else {
-			memb_ptr = (void *)((char *)ptr + elm->memb_offset);
+			memb_ptr = (void *)((char *)sptr + elm->memb_offset);
 		}
 		tmperval = elm->type->der_encoder(elm->type, memb_ptr,
 			elm->tag_mode, elm->tag,
@@ -577,14 +577,11 @@
 			edx, elm->name, td->name, (long)tmperval.encoded);
 	}
 
-	if(computed_size != 0) {
+	if(computed_size != 0)
 		/*
 		 * Encoded size is not equal to the computed size.
 		 */
-		erval.encoded = -1;
-		erval.failed_type = td;
-		erval.structure_ptr = ptr;
-	}
+		_ASN_ENCODE_FAILED;
 
 	return erval;
 }
@@ -862,7 +859,12 @@
 
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
-			if(!memb_ptr) continue;	/* OPTIONAL element? */
+			if(!memb_ptr) {
+				if(elm->optional)
+					continue;
+				/* Mandatory element is missing */
+				_ASN_ENCODE_FAILED;
+			}
 		} else {
 			memb_ptr = (void *)((char *)sptr + elm->memb_offset);
 		}
@@ -905,7 +907,11 @@
 
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
-			if(!memb_ptr) continue;
+			if(!memb_ptr) {
+				if(elm->optional) continue;
+				/* Print <absent> line */
+				/* Fall through */
+			}
 		} else {
 			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
 		}
@@ -978,7 +984,14 @@
 
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
-			if(!memb_ptr) continue;
+			if(!memb_ptr) {
+				if(elm->optional)
+					continue;
+				_ASN_ERRLOG(app_errlog, app_key,
+				"%s: mandatory element %s absent (%s:%d)",
+				td->name, elm->name, __FILE__, __LINE__);
+				return -1;
+			}
 		} else {
 			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
 		}
diff --git a/skeletons/constr_SET.c b/skeletons/constr_SET.c
index a45d7f9..f99d66f 100644
--- a/skeletons/constr_SET.c
+++ b/skeletons/constr_SET.c
@@ -1,5 +1,6 @@
 /*-
- * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
+ * Copyright (c) 2003, 2004, 2005 Lev Walkin <vlm@lionet.info>.
+ * All rights reserved.
  * Redistribution and modifications are permitted subject to BSD license.
  */
 #include <asn_internal.h>
@@ -477,6 +478,9 @@
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
 			if(!memb_ptr) {
+				if(!elm->optional)
+					/* Mandatory elements missing */
+					_ASN_ENCODE_FAILED;
 				if(t2m_build_own) {
 					t2m[t2m_count].el_no = edx;
 					t2m[t2m_count].el_tag = 0;
@@ -827,7 +831,12 @@
 
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(void **)((char *)sptr + elm->memb_offset);
-			if(!memb_ptr) continue;	/* OPTIONAL element? */
+			if(!memb_ptr) {
+				if(elm->optional)
+					continue;
+				/* Mandatory element missing */
+				_ASN_ENCODE_FAILED;
+			}
 		} else {
 			memb_ptr = (void *)((char *)sptr + elm->memb_offset);
 		}
@@ -872,7 +881,11 @@
 
 		if(elm->flags & ATF_POINTER) {
 			memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset);
-			if(!memb_ptr) continue;
+			if(!memb_ptr) {
+				if(elm->optional) continue;
+				/* Print <absent> line */
+				/* Fall through */
+			}
 		} else {
 			memb_ptr = (const void *)((const char *)sptr + elm->memb_offset);
 		}
