diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index eacab98..b252a73 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -61,6 +61,19 @@
 		}							\
 	} while(0)
 
+#ifdef	AL_IMPORT
+#error	AL_IMPORT DEFINED ELSEWHERE!
+#endif
+#define	AL_IMPORT(to,where,from,field)	do {				\
+		if(!(from)) break;					\
+		while(TQ_FIRST(&((from)->where))) {			\
+			TQ_ADD(&((to)->where),				\
+				TQ_REMOVE(&((from)->where), field),	\
+				field);					\
+		}							\
+		assert(TQ_FIRST(&((from)->where)) == 0);		\
+	} while(0)
+
 %}
 
 
@@ -223,13 +236,16 @@
  * Types defined herein.
  */
 %type	<a_grammar>		ModuleList
-%type	<a_module>		ModuleSpecification
-%type	<a_module>		ModuleSpecificationBody
-%type	<a_module>		ModuleSpecificationElement
-%type	<a_module>		optModuleSpecificationBody	/* Optional */
-%type	<a_module_flags>	optModuleSpecificationFlags
-%type	<a_module_flags>	ModuleSpecificationFlags	/* Set of FL */
-%type	<a_module_flags>	ModuleSpecificationFlag		/* Single FL */
+%type	<a_module>		ModuleDefinition
+%type	<a_module>		ModuleBody
+%type	<a_module>		AssignmentList
+%type	<a_module>		Assignment
+%type	<a_module>		optModuleBody	/* Optional */
+%type	<a_module_flags>	optModuleDefinitionFlags
+%type	<a_module_flags>	ModuleDefinitionFlags	/* Set of FL */
+%type	<a_module_flags>	ModuleDefinitionFlag		/* Single FL */
+%type	<a_module>		optImports
+%type	<a_module>		optExports
 %type	<a_module>		ImportsDefinition
 %type	<a_module>		ImportsBundleSet
 %type	<a_xports>		ImportsBundle
@@ -330,12 +346,12 @@
 	;
 
 ModuleList:
-	ModuleSpecification {
+	ModuleDefinition {
 		$$ = asn1p_new();
 		checkmem($$);
 		TQ_ADD(&($$->modules), $1, mod_next);
 	}
-	| ModuleList ModuleSpecification {
+	| ModuleList ModuleDefinition {
 		$$ = $1;
 		TQ_ADD(&($$->modules), $2, mod_next);
 	}
@@ -351,11 +367,11 @@
  * === EOF ===
  */
 
-ModuleSpecification:
+ModuleDefinition:
 	TypeRefName optObjectIdentifier TOK_DEFINITIONS
-		optModuleSpecificationFlags
+		optModuleDefinitionFlags
 		TOK_PPEQ TOK_BEGIN
-		optModuleSpecificationBody
+		optModuleBody
 		TOK_END {
 
 		if($7) {
@@ -423,9 +439,9 @@
 /*
  * Optional module flags.
  */
-optModuleSpecificationFlags:
+optModuleDefinitionFlags:
 	{ $$ = MSF_NOFLAGS; }
-	| ModuleSpecificationFlags {
+	| ModuleDefinitionFlags {
 		$$ = $1;
 	}
 	;
@@ -433,11 +449,11 @@
 /*
  * Module flags.
  */
-ModuleSpecificationFlags:
-	ModuleSpecificationFlag {
+ModuleDefinitionFlags:
+	ModuleDefinitionFlag {
 		$$ = $1;
 	}
-	| ModuleSpecificationFlags ModuleSpecificationFlag {
+	| ModuleDefinitionFlags ModuleDefinitionFlag {
 		$$ = $1 | $2;
 	}
 	;
@@ -445,7 +461,7 @@
 /*
  * Single module flag.
  */
-ModuleSpecificationFlag:
+ModuleDefinitionFlag:
 	TOK_EXPLICIT TOK_TAGS {
 		$$ = MSF_EXPLICIT_TAGS;
 	}
@@ -479,9 +495,9 @@
 /*
  * Optional module body.
  */
-optModuleSpecificationBody:
+optModuleBody:
 	{ $$ = 0; }
-	| ModuleSpecificationBody {
+	| ModuleBody {
 		$$ = $1;
 	}
 	;
@@ -489,56 +505,36 @@
 /*
  * ASN.1 Module body.
  */
-ModuleSpecificationBody:
-	ModuleSpecificationElement {
-		$$ = $1;
-	}
-	| ModuleSpecificationBody ModuleSpecificationElement {
-		$$ = $1;
-
-		/* Behave well when one of them is skipped. */
-		if(!($1)) {
-			if($2) $$ = $2;
-			break;
-		}
-
-#ifdef	MY_IMPORT
-#error	MY_IMPORT DEFINED ELSEWHERE!
-#endif
-#define	MY_IMPORT(foo,field)	do {				\
-		while(TQ_FIRST(&($2->foo))) {			\
-			TQ_ADD(&($$->foo),			\
-				TQ_REMOVE(&($2->foo), field),	\
-				field);				\
-		}						\
-		assert(TQ_FIRST(&($2->foo)) == 0);		\
-	} while(0)
-
-		MY_IMPORT(imports, xp_next);
-		MY_IMPORT(exports, xp_next);
-		MY_IMPORT(members, next);
-#undef	MY_IMPORT
-
+ModuleBody:
+	optExports optImports AssignmentList {
+		$$ = asn1p_module_new();
+		AL_IMPORT($$, exports, $1, xp_next);
+		AL_IMPORT($$, imports, $2, xp_next);
+		AL_IMPORT($$, members, $3, next);
 	}
 	;
 
+AssignmentList:
+	Assignment {
+		$$ = $1;
+	}
+	| AssignmentList Assignment {
+		if($1) {
+			$$ = $1;
+		} else {
+			$$ = $2;
+			break;
+		}
+		AL_IMPORT($$, members, $2, next);
+	}
+	;
+
+
 /*
  * One of the elements of ASN.1 module specification.
  */
-ModuleSpecificationElement:
-	ImportsDefinition {
-		$$ = $1;
-	}
-	| ExportsDefinition {
-		$$ = asn1p_module_new();
-		checkmem($$);
-		if($1) {
-			TQ_ADD(&($$->exports), $1, xp_next);
-		} else {
-			/* "EXPORTS ALL;" ? */
-		}
-	}
-	| DataTypeReference {
+Assignment:
+	DataTypeReference {
 		$$ = asn1p_module_new();
 		checkmem($$);
 		assert($1->expr_type != A1TC_INVALID);
@@ -591,6 +587,10 @@
  * IMPORTS Type1, value FROM Module { iso standard(0) } ;
  * === EOF ===
  */
+optImports:
+	{ $$ = 0; }
+	| ImportsDefinition;
+
 ImportsDefinition:
 	TOK_IMPORTS ImportsBundleSet ';' {
 		if(!saved_aid && 0)
@@ -668,6 +668,20 @@
 	}
 	;
 
+
+optExports:
+	{ $$ = 0; }
+	| ExportsDefinition {
+		$$ = asn1p_module_new();
+		checkmem($$);
+		if($1) {
+			TQ_ADD(&($$->exports), $1, xp_next);
+		} else {
+			/* "EXPORTS ALL;" */
+		}
+	}
+	;
+
 ExportsDefinition:
 	TOK_EXPORTS ExportsBody ';' {
 		$$ = $2;
