diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
index 8c1afe1..5b8459f 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
@@ -8648,6 +8648,62 @@
 			deleteProject("lib");
 		}
 	}
+	public void testBug547479() throws CoreException {
+		int max = org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE;
+
+		IJavaProject prjA = createJava9Project("A");
+		IJavaProject prjB = createJava9Project("B");
+		try {
+			createFile("A/src/module-info.java",
+				"module A {\n" + 
+				"}\n");
+
+			addModularProjectEntry(prjB, prjA);
+			// prepare files to be compiled in two batches à 2 files:
+			org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = 2;
+			// ---1---
+			createFolder("B/src/b");
+			createFile("B/src/b/Class1.java",
+				"package b;\n" + 
+				"import java.sql.Connection;\n" + 
+				"public class Class1 {\n" + 
+				"	Connection connection;\n" + 
+				"}\n");
+			createFile("B/src/b/Class2.java",
+				"package b;\n" + 
+				"import java.sql.Connection;\n" + 
+				"public class Class2 {\n" + 
+				"	Connection connection;\n" + 
+				"}\n");
+			// ---2---
+			createFile("B/src/module-info.java",
+				"module B {\n" + 
+				"	requires java.sql;\n" + 
+				"	requires A;\n" + 
+				"}\n");
+			String bPath = "B/src/b/Class3.java";
+			String bSource =
+				"package b;\n" + // <= this triggered createPackage in an inconsistent state
+				"import java.sql.Connection;\n" + 
+				"public class Class3 {\n" + 
+				"	Connection connection;\n" + 
+				"}\n";
+			createFile(bPath, bSource);
+			getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
+			assertNoErrors();
+
+			this.problemRequestor.initialize(bSource.toCharArray());
+			getCompilationUnit(bPath).getWorkingCopy(this.wcOwner, null);
+			assertProblems("unexpected problems",
+					"----------\n" + 
+					"----------\n",
+					this.problemRequestor);
+		} finally {
+			org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.MAX_AT_ONCE = max;
+			deleteProject(prjA);
+			deleteProject(prjB);
+		}
+	}
 	protected void assertNoErrors() throws CoreException {
 		for (IProject p : getWorkspace().getRoot().getProjects()) {
 			int maxSeverity = p.findMaxProblemSeverity(null, true, IResource.DEPTH_INFINITE);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
index bf84ff6..3acb855 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/LookupEnvironment.java
@@ -2122,6 +2122,7 @@
 		this.root.reset();
 		return;
 	}
+	this.stepCompleted = 0;
 	this.knownModules = new HashtableOfModule();
 	this.UnNamedModule = new ModuleBinding.UnNamedModule(this);
 	this.module = this.UnNamedModule;
