--- a/c2iec.y
+++ b/c2iec.y
@@ -31,6 +31,7 @@
 typedef enum
 {
 	decl_all,
+	decl_param,
 	decl_func,
 	fifo_entry_num /* reflects the number of enum entries */
 } fifo_entry_t;
@@ -298,13 +299,16 @@
 		while( (p=fifo_pop(decl_func)) != NULL)
 		{
 			printf(p, $<str>1);
-			strcpy($<str>$, "");
+		}
+		while( (p=fifo_pop(decl_param)) != NULL)
+		{
+			printf(p, $<str>1);
 		}
 		while( (p=fifo_pop(decl_all)) != NULL)
 		{
 			printf(p, $<str>1);
-			strcpy($<str>$, "");
-		}
+		}
+		strcpy($<str>$, "");
 	}
 	;
 
@@ -473,8 +477,11 @@
 
 type_qualifier
 	: CONST
+	{ strcpy($<str>$, ""); }
 	| RESTRICT
+	{ strcpy($<str>$, ""); }
 	| VOLATILE
+	{ strcpy($<str>$, ""); }
 	;
 
 function_specifier	: INLINE
@@ -585,6 +592,16 @@
 
 parameter_declaration
 	: declaration_specifiers declarator
+	{
+		char *p;
+		while (p = fifo_pop(decl_all))
+		{
+//			printf(";;; %s :: %s\n\n", $<str>1, p);
+			sprintf($<str>$, p, $<str>1);
+			fifo_push(decl_param, $<str>$);
+
+		}
+	}
 	| declaration_specifiers abstract_declarator
 	| declaration_specifiers
 	;
@@ -745,6 +762,10 @@
 	{
 		char *p;
 		while( (p=fifo_pop(decl_func)) != NULL)
+		{
+		  printf(p, $<str>1);
+		}
+		while( (p=fifo_pop(decl_param)) != NULL)
 		{
 		  printf(p, $<str>1);
 		}