diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c
index 0511868..8d2317f 100644
--- a/libasn1fix/asn1fix.c
+++ b/libasn1fix/asn1fix.c
@@ -385,7 +385,7 @@
 	}
 
 	/* Check identifier distinctness */
-	ret = asn1f_check_unique_expr(arg, NULL);
+	ret = asn1f_check_unique_expr(arg);
 	RET2RVAL(ret, rvalue);
 
 	/* Fix extensibility */
diff --git a/libasn1fix/asn1fix_bitstring.c b/libasn1fix/asn1fix_bitstring.c
index f3d5ad7..5f30ea4 100644
--- a/libasn1fix/asn1fix_bitstring.c
+++ b/libasn1fix/asn1fix_bitstring.c
@@ -32,6 +32,10 @@
 	return r_value;
 }
 
+static int _compare_value(asn1p_expr_t *expr1, asn1p_expr_t *expr2) {
+	return expr2->value->value.v_integer - expr1->value->value.v_integer;
+}
+
 static int
 asn1f_fix_bit_string_type(arg_t *arg) {
 	asn1p_expr_t *expr = arg->expr;
@@ -40,10 +44,6 @@
 	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 ",
@@ -74,6 +74,14 @@
 				v->_lineno);
 			return -1;
 		}
+
+		/* Check value uniqueness as per 21.4 */
+		ret = asn1f_check_unique_expr_child(arg, v,
+				_compare_value, "value");
+		RET2RVAL(ret, r_value);
+		/* Check identifier uniqueness as per 21.5 */
+		ret = asn1f_check_unique_expr_child(arg, v, 0, "identifier");
+		RET2RVAL(ret, r_value);
 	}
 
 	return r_value;
diff --git a/libasn1fix/asn1fix_enum.c b/libasn1fix/asn1fix_enum.c
index cf03914..570d23a 100644
--- a/libasn1fix/asn1fix_enum.c
+++ b/libasn1fix/asn1fix_enum.c
@@ -119,7 +119,7 @@
 		 * 1.4 Check that all identifiers before the current one
 		 * differs from it.
 		 */
-		ret = asn1f_check_unique_expr_child(arg, ev, NULL);
+		ret = asn1f_check_unique_expr_child(arg, ev, 0, "identifier");
 		RET2RVAL(ret, rvalue);
 	}
 
diff --git a/libasn1fix/asn1fix_integer.c b/libasn1fix/asn1fix_integer.c
index 0302acd..a5d0b6e 100644
--- a/libasn1fix/asn1fix_integer.c
+++ b/libasn1fix/asn1fix_integer.c
@@ -92,12 +92,13 @@
 		/*
 		 * Check that all identifiers are distinct.
 		 */
-		ret = asn1f_check_unique_expr_child(arg, iv, NULL);
+		ret = asn1f_check_unique_expr_child(arg, iv, 0, "identifier");
 		RET2RVAL(ret, rvalue);
 		/*
 		 * Check that all values are distinct.
 		 */
-		ret = asn1f_check_unique_expr_child(arg, iv, _compare_value);
+		ret = asn1f_check_unique_expr_child(arg, iv,
+				_compare_value, "value");
 		RET2RVAL(ret, rvalue);
 	}
 
diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c
index 9e8cc07..4af0fd8 100644
--- a/libasn1fix/asn1fix_misc.c
+++ b/libasn1fix/asn1fix_misc.c
@@ -236,15 +236,14 @@
  * Check that every child of a given expr has unique name or does not have any.
  */
 int
-asn1f_check_unique_expr(arg_t *arg,
-		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b)) {
+asn1f_check_unique_expr(arg_t *arg) {
 	asn1p_expr_t *expr;
 	int rvalue = 0;
 
 	TQ_FOR(expr, &(arg->expr->members), next) {
 		if(expr->Identifier) {
 			int ret = asn1f_check_unique_expr_child(arg, expr,
-				opt_compare);
+				0, "identifier");
 			if(ret) rvalue = -1;
 		} else {
 			/*
@@ -263,9 +262,11 @@
  */
 int
 asn1f_check_unique_expr_child(arg_t *arg, asn1p_expr_t *child,
-		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b)) {
+		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b),
+		const char *opt_property_name) {
 	asn1p_expr_t *expr;
-	int rvalue = 0;
+
+	if(!opt_property_name) opt_property_name = "property";
 
 	assert(child);
 	assert(opt_compare || child->Identifier);
@@ -290,26 +291,20 @@
 		}
 
 		if(ret == 0) {
-			char *msg;
-			msg = opt_compare
-				?"Expressions clash"
-				:"Identifiers name clash";
-			FATAL("%s: "
+			FATAL("Clash detected: "
 				"\"%s\" at line %d has similar %s with "
 				"\"%s\" at line %d",
-				msg,
 				expr->Identifier,
 				expr->_lineno,
-				opt_compare?"property":"name",
+				opt_property_name,
 				child->Identifier,
 				child->_lineno
 			);
-
-			rvalue = -1;
+			return -1;
 		}
 	}
 
-	return rvalue;
+	return 0;
 }
 
 int
diff --git a/libasn1fix/asn1fix_misc.h b/libasn1fix/asn1fix_misc.h
index a90c5be..6dcd220 100644
--- a/libasn1fix/asn1fix_misc.h
+++ b/libasn1fix/asn1fix_misc.h
@@ -11,12 +11,9 @@
 int asn1f_recurse_expr(arg_t *arg, int (*f)(arg_t *arg));
 
 /*
- * Check that every child of a given expr has unique name or does not have any.
- * If opt_compare == NULL, the default comparison of the argument's
- * names (identifiers) will be performed.
+ * Check that every child of a given expr has unique identifier.
  */
-int asn1f_check_unique_expr(arg_t *arg,
-		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b));
+int asn1f_check_unique_expr(arg_t *arg);
 
 /*
  * Check that every preceeding child of the given expr is not
@@ -25,7 +22,8 @@
  * names (identifiers) will be performed.
  */
 int asn1f_check_unique_expr_child(arg_t *arg, asn1p_expr_t *child,
-		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b));
+		int (*opt_compare)(asn1p_expr_t *a, asn1p_expr_t *b),
+		const char *opt_property_name);
 
 /*
  * Return number of children.
diff --git a/tests/116-bit-string-SE.asn1 b/tests/116-bit-string-SE.asn1
new file mode 100644
index 0000000..f5967c0
--- /dev/null
+++ b/tests/116-bit-string-SE.asn1
@@ -0,0 +1,16 @@
+
+-- SE: Semantic error
+
+-- iso.org.dod.internet.private.enterprise (1.3.6.1.4.1)
+-- .spelio.software.asn1c.test (9363.1.5.1)
+-- .116
+
+ModuleBitStringSameValues
+	{ iso org(3) dod(6) internet (1) private(4) enterprise(1)
+		spelio(9363) software(1) asn1c(5) test(1) 116 }
+	DEFINITIONS ::=
+BEGIN
+
+	T ::= BIT STRING { one(1), another(1) }
+
+END
