identifier name clash

diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
index f8adc75..e2f2434 100644
--- a/libasn1fix/asn1fix_bitstring.c
+++ b/libasn1fix/asn1fix_bitstring.c
@@ -36,17 +36,28 @@
 asn1f_fix_bit_string_type(arg_t *arg) {
 	asn1p_expr_t *expr = arg->expr;
 	asn1p_expr_t *v;
+	int r_value = 0;
+	int ret;
 
 	TQ_FOR(v, &(expr->members), next) {
+		/* Check identifier uniqueness as per 21.4 */
+		ret = asn1f_check_unique_expr_child(arg, v, 0);
+		RET2RVAL(ret, r_value);
+
+		if(v->expr_type == A1TC_EXTENSIBLE) {
+			FATAL("Extension marker (...) is not allowed "
+				"as a BIT STRING NamedBit at line %d ",
+				v->_lineno);
+			return -1;
+		}
 		if(v->expr_type != A1TC_UNIVERVAL) {
 			FATAL("BIT STRING value at line %d "
-				"is not an identifier",
-				v->_lineno);
+				"is not an identifier", v->_lineno);
 			return -1;
 		}
 	}
 
-	return 0;
+	return r_value;
 }
 
 static int
diff --git a/libasn1fix/asn1fix_enum.c b/libasn1fix/asn1fix_enum.c
index ce2fc2f..cf03914 100644
--- a/libasn1fix/asn1fix_enum.c
+++ b/libasn1fix/asn1fix_enum.c
@@ -34,8 +34,7 @@
 		 */
 		if(ev->expr_type == A1TC_EXTENSIBLE) {
 			if(ext_marker) {
-				arg->eh(1,
-				"Enumeration %s at line %d: "
+				FATAL("Enumeration %s at line %d: "
 				"Second extension marker is not allowed",
 				expr->Identifier,
 				ev->_lineno);
diff --git a/libasn1fix/asn1fix_integer.c b/libasn1fix/asn1fix_integer.c
index 8a14491..0302acd 100644
--- a/libasn1fix/asn1fix_integer.c
+++ b/libasn1fix/asn1fix_integer.c
@@ -38,20 +38,17 @@
 		 * Found "...", check correctness.
 		 */
 		if(iv->expr_type == A1TC_EXTENSIBLE) {
-			arg->eh(1,
-				"INTEGER %s at line %d: "
+			FATAL("INTEGER %s at line %d: "
 				"Extension marker is not allowed",
 				expr->Identifier,
-				iv->_lineno
-			);
+				iv->_lineno);
 			rvalue = -1;
 			continue;
 		}
 
 		if(iv->Identifier == NULL
 		|| iv->expr_type != A1TC_UNIVERVAL) {
-			arg->eh(1,
-				"INTEGER %s at line %d: "
+			FATAL("INTEGER %s at line %d: "
 				"Unsupported enumeration element %s",
 				expr->Identifier,
 				iv->_lineno,
@@ -62,8 +59,7 @@
 		}
 
 		if(iv->value == NULL) {
-			arg->eh(1,
-				"INTEGER %s at line %d: "
+			FATAL("INTEGER %s at line %d: "
 				"Value for the identifier %s "
 				"must be set explicitly",
 				expr->Identifier,
@@ -84,8 +80,7 @@
 		}
 
 		if(iv->value->type != ATV_INTEGER) {
-			arg->eh(1,
-				"INTEGER %s at line %d: "
+			FATAL("INTEGER %s at line %d: "
 				"Value for the identifier %s "
 				"is not compatible with INTEGER type",
 				expr->Identifier,
diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c
index 72317aa..9e8cc07 100644
--- a/libasn1fix/asn1fix_misc.c
+++ b/libasn1fix/asn1fix_misc.c
@@ -294,8 +294,7 @@
 			msg = opt_compare
 				?"Expressions clash"
 				:"Identifiers name clash";
-			arg->eh(1,
-				"%s: "
+			FATAL("%s: "
 				"\"%s\" at line %d has similar %s with "
 				"\"%s\" at line %d",
 				msg,