fixing all in module before checking constraints

diff --git a/libasn1fix/asn1fix.c b/libasn1fix/asn1fix.c
index 4a27932..02df593 100644
--- a/libasn1fix/asn1fix.c
+++ b/libasn1fix/asn1fix.c
@@ -12,7 +12,8 @@
 /*
  * Internal check functions.
  */
-static int asn1f_fix_module(arg_t *arg);
+static int asn1f_fix_module__phase_1(arg_t *arg);
+static int asn1f_fix_module__phase_2(arg_t *arg);
 static int asn1f_fix_simple(arg_t *arg);	/* For INTEGER/ENUMERATED */
 static int asn1f_fix_constructed(arg_t *arg);	/* For SEQUENCE/SET/CHOICE */
 static int asn1f_resolve_constraints(arg_t *arg); /* For subtype constraints */
@@ -79,7 +80,7 @@
 	 * Process each module in the list.
 	 */
 	TQ_FOR(arg.mod, &(asn->modules), mod_next) {
-		int ret = asn1f_fix_module(&arg);
+		int ret = asn1f_fix_module__phase_1(&arg);
 		/*
 		 * These lines are used for illustration purposes.
 		 * RET2RVAL() is used everywhere else.
@@ -87,6 +88,13 @@
 		if(ret == -1) fatals++;
 		if(ret == 1) warnings++;
 	}
+	TQ_FOR(arg.mod, &(asn->modules), mod_next) {
+		int ret = asn1f_fix_module__phase_2(&arg);
+		if(ret == -1) fatals++;
+		if(ret == 1) warnings++;
+	}
+
+	memset(&a1f_replace_me_with_proper_interface_arg, 0, sizeof(arg_t));
 
 	memset(&a1f_replace_me_with_proper_interface_arg, 0, sizeof(arg_t));
 
@@ -100,7 +108,7 @@
  * Check the internals of a single module.
  */
 static int
-asn1f_fix_module(arg_t *arg) {
+asn1f_fix_module__phase_1(arg_t *arg) {
 	asn1p_expr_t *expr;
 	int rvalue = 0;
 	int ret;
@@ -239,6 +247,15 @@
 		assert(arg->expr == expr);
 	}
 
+	return rvalue;
+}
+
+static int
+asn1f_fix_module__phase_2(arg_t *arg) {
+	asn1p_expr_t *expr;
+	int rvalue = 0;
+	int ret;
+
 	/*
 	 * Check semantic validity of constraints.
 	 */
@@ -258,7 +275,6 @@
 	return rvalue;
 }
 
-
 static int
 asn1f_fix_simple(arg_t *arg) {
 	int rvalue = 0;