diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 4cd3879..dbad995 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -132,9 +132,9 @@
 %token	<tv_str>	TOK_bstring
 %token	<tv_opaque>	TOK_cstring
 %token	<tv_str>	TOK_hstring
-%token	<tv_str>	TOK_identifier
-%token	<a_int>		TOK_number
-%token	<a_int>		TOK_number_negative
+%token	<tv_str>	TOK_identifier "identifier"
+%token	<a_int>		TOK_number "number"
+%token	<a_int>		TOK_number_negative "negative number"
 %token	<a_dbl>		TOK_realnumber
 %token	<a_int>		TOK_tuple
 %token	<a_int>		TOK_quadruple
@@ -145,6 +145,11 @@
 %token	<tv_str>	TOK_Literal			/* "BY" */
 
 /*
+ * Tokens available with asn1p_lexer_hack_push_extended_values().
+ */
+%token              TOK_ExtValue_BIT_STRING
+
+/*
  * Token types representing ASN.1 standard keywords.
  */
 %token			TOK_ABSENT
@@ -235,8 +240,8 @@
 %left			'|' TOK_UNION
 
 /* Misc tags */
-%token			TOK_TwoDots		/* .. */
-%token			TOK_ThreeDots		/* ... */
+%token			TOK_TwoDots		".."
+%token			TOK_ThreeDots	"..."
 
 
 /*
@@ -291,8 +296,14 @@
 %type	<a_expr>		ComponentType
 %type	<a_expr>		AlternativeTypeLists
 %type	<a_expr>		AlternativeType
-%type	<a_expr>		UniverationDefinition
 %type	<a_expr>		UniverationList
+%type	<a_expr>		Enumerations
+%type	<a_expr>		NamedBitList
+%type	<a_expr>		NamedBit
+%type	<a_expr>		NamedNumberList
+%type	<a_expr>		NamedNumber
+%type	<a_expr>		IdentifierList
+%type	<a_expr>		IdentifierElement
 %type	<a_expr>		UniverationElement
 %type	<tv_str>		TypeRefName
 %type	<tv_str>		ObjectClassReference
@@ -1638,7 +1649,6 @@
 	TOK_BOOLEAN { $$ = ASN_BASIC_BOOLEAN; }
 	| TOK_NULL { $$ = ASN_BASIC_NULL; }
 	| TOK_REAL { $$ = ASN_BASIC_REAL; }
-	| BasicTypeId_UniverationCompatible { $$ = $1; }
 	| TOK_OCTET TOK_STRING { $$ = ASN_BASIC_OCTET_STRING; }
 	| TOK_OBJECT TOK_IDENTIFIER { $$ = ASN_BASIC_OBJECT_IDENTIFIER; }
 	| TOK_RELATIVE_OID { $$ = ASN_BASIC_RELATIVE_OID; }
@@ -1647,7 +1657,8 @@
 	| TOK_CHARACTER TOK_STRING { $$ = ASN_BASIC_CHARACTER_STRING; }
 	| TOK_UTCTime { $$ = ASN_BASIC_UTCTime; }
 	| TOK_GeneralizedTime { $$ = ASN_BASIC_GeneralizedTime; }
-	| BasicString { $$ = $1; }
+	| BasicString
+	| BasicTypeId_UniverationCompatible
 	;
 
 /*
@@ -1655,7 +1666,7 @@
  */
 BasicTypeId_UniverationCompatible:
 	TOK_INTEGER { $$ = ASN_BASIC_INTEGER; }
-	| TOK_ENUMERATED { $$ = ASN_BASIC_ENUMERATED; }
+	| TOK_ENUMERATED { $$ = ASN_BASIC_INTEGER; }
 	| TOK_BIT TOK_STRING { $$ = ASN_BASIC_BIT_STRING; }
 	;
 
@@ -1666,16 +1677,32 @@
 		$$->expr_type = $1;
 		$$->meta_type = AMT_TYPE;
 	}
-	| BasicTypeId_UniverationCompatible UniverationDefinition {
-		if($2) {
-			$$ = $2;
-		} else {
-			$$ = NEW_EXPR();
-			checkmem($$);
-		}
-		$$->expr_type = $1;
-		$$->meta_type = AMT_TYPE;
-	}
+    | TOK_INTEGER '{' NamedNumberList '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_INTEGER;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ENUMERATED '{' Enumerations '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_ENUMERATED;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_BIT TOK_STRING '{' NamedBitList '}' {
+        $$ = $4;
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ExtValue_BIT_STRING '{' IdentifierList '}' {
+        $$ = $3;
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
+    | TOK_ExtValue_BIT_STRING '{' '}' {
+		$$ = NEW_EXPR();
+		checkmem($$);
+        $$->expr_type = ASN_BASIC_BIT_STRING;
+        $$->meta_type = AMT_TYPE;
+    }
 	;
 
 BasicString:
@@ -2173,32 +2200,101 @@
 	}
 	;
 
-/*
- * Universal enumeration definition to use in INTEGER and ENUMERATED.
- * === EXAMPLE ===
- * Gender ::= ENUMERATED { unknown(0), male(1), female(2) }
- * Temperature ::= INTEGER { absolute-zero(-273), freezing(0), boiling(100) }
- * === EOF ===
- */
-/*
-optUniverationDefinition:
-	{ $$ = 0; }
-	| UniverationDefinition {
-		$$ = $1;
-	}
-	;
-*/
-
-UniverationDefinition:
-	'{' '}' {
+IdentifierList:
+    IdentifierElement {
 		$$ = NEW_EXPR();
 		checkmem($$);
+		asn1p_expr_add($$, $1);
+    }
+    | IdentifierList ',' IdentifierElement {
+		$$ = $1;
+		asn1p_expr_add($$, $3);
+    };
+
+IdentifierElement:
+    Identifier {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		$$->expr_type = A1TC_UNIVERVAL;
+		$$->meta_type = AMT_VALUE;
+		$$->Identifier = $1;
+    }
+
+NamedNumberList:
+	NamedNumber {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		asn1p_expr_add($$, $1);
 	}
-	| '{' UniverationList '}' {
-		$$ = $2;
+	| NamedNumberList ',' NamedNumber {
+		$$ = $1;
+		asn1p_expr_add($$, $3);
 	}
 	;
 
+NamedNumber:
+	Identifier '(' SignedNumber ')' {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		$$->expr_type = A1TC_UNIVERVAL;
+		$$->meta_type = AMT_VALUE;
+		$$->Identifier = $1;
+		$$->value = $3;
+	}
+	| Identifier '(' DefinedValue ')' {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		$$->expr_type = A1TC_UNIVERVAL;
+		$$->meta_type = AMT_VALUE;
+		$$->Identifier = $1;
+		$$->value = $3;
+	};
+
+NamedBitList:
+	NamedBit {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		asn1p_expr_add($$, $1);
+	}
+	| NamedBitList ',' NamedBit {
+		$$ = $1;
+		asn1p_expr_add($$, $3);
+	}
+	;
+
+NamedBit:
+	Identifier '(' TOK_number ')' {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		$$->expr_type = A1TC_UNIVERVAL;
+		$$->meta_type = AMT_VALUE;
+		$$->Identifier = $1;
+		$$->value = asn1p_value_fromint($3);
+	}
+	| Identifier '(' DefinedValue ')' {
+		$$ = NEW_EXPR();
+		checkmem($$);
+		$$->expr_type = A1TC_UNIVERVAL;
+		$$->meta_type = AMT_VALUE;
+		$$->Identifier = $1;
+		$$->value = $3;
+	};
+
+Enumerations:
+    UniverationList {
+		$$ = $1;
+        asn1p_expr_t *first_memb = TQ_FIRST(&($$->members));
+        if(first_memb) {
+            if(first_memb->expr_type == A1TC_EXTENSIBLE) {
+                return yyerror(
+                    "The ENUMERATION cannot start with extension (...).");
+            }
+        } else {
+            return yyerror(
+                "The ENUMERATION list cannot be empty.");
+        }
+    }
+
 UniverationList:
 	UniverationElement {
 		$$ = NEW_EXPR();
