diff --git a/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02a/Parent02.java b/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02a/Parent02.java
new file mode 100644
index 0000000..15561b0
--- /dev/null
+++ b/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02a/Parent02.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2007 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *******************************************************************************/
+
+package targets.filer;
+
+import org.eclipse.jdt.apt.pluggable.tests.annotations.GenClass6;
+
+/**
+ * Processing this class should result in creation of a source file,
+ * thereby allowing this class to compile
+ */
+@GenClass6(name="Generated02", pkg="gen6")
+public class Parent02 {
+	gen6.Generated02 _gen;
+}
+
+
+
diff --git a/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02b/Parent02.java b/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02b/Parent02.java
new file mode 100644
index 0000000..a469971
--- /dev/null
+++ b/org.eclipse.jdt.apt.pluggable.tests/resources/targets/filer02b/Parent02.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2007 BEA Systems, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    wharley@bea.com - initial API and implementation
+ *******************************************************************************/
+
+package targets.filer;
+
+import org.eclipse.jdt.apt.pluggable.tests.annotations.GenClass6;
+
+/**
+ * Processing this class should result in removal of the previously
+ * generated type and creation of a new one, resulting in a compilation error.
+ */
+@GenClass6(name="XxxGenerated02", pkg="gen6")
+public class Parent02 {
+	gen6.Generated02 _gen;
+}
+
diff --git a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
index 9aa46bb..93a438d 100644
--- a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
+++ b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
@@ -11,12 +11,21 @@
 
 package org.eclipse.jdt.apt.pluggable.tests;
 
+import java.util.Map;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.apt.core.internal.util.FactoryContainer;
+import org.eclipse.jdt.apt.core.internal.util.FactoryPath;
+import org.eclipse.jdt.apt.core.internal.util.FactoryContainer.FactoryType;
 import org.eclipse.jdt.apt.core.util.AptConfig;
 import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.eclipse.jdt.core.tests.builder.Problem;
 
 /**
  * Basic tests for the Filer interface in the IDE.
@@ -78,4 +87,57 @@
 		expectingNoFile( proj, ".apt_generated/summary.txt" );
 	}
 
+	/**
+	 * Test generation of a source file that is referenced by the parent, using the GenClass6 annotation
+	 * @see javax.annotation.processing.Filer#createSourceFile(CharSequence, javax.lang.model.element.Element...)
+	 */
+	public void testCreateSourceFileWithGenReference() throws Throwable
+	{
+		// Temporary workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=201931
+		// Bail out on Linux
+		String osName = System.getProperty("os.name");
+		if (null == osName || !osName.contains("Windows")) {
+			return;
+		}
+
+		IJavaProject jproj = createJavaProject(_projectName);
+		IProject proj = jproj.getProject();
+		IdeTestUtils.copyResources(proj, "targets/filer02a", "src/targets/filer");
+		
+		// Make sure that there are no Java 5 processors on the factory path - see comment below.
+		FactoryPath fp = (FactoryPath) AptConfig.getFactoryPath(jproj);
+		for (Map.Entry<FactoryContainer, FactoryPath.Attributes> entry : fp.getAllContainers().entrySet()) {
+			if (entry.getKey().getType() == FactoryType.PLUGIN) {
+				String id = entry.getKey().getId();
+				if (!Apt6TestsPlugin.PLUGIN_ID.equals(id)) {
+					fp.disablePlugin(id);
+				}
+			}
+		}
+		AptConfig.setFactoryPath(jproj, fp);
+		AptConfig.setEnabled(jproj, true);
+		fullBuild();
+		expectingNoProblems();
+		
+		// Check whether generated sources were generated and compiled
+		expectingFile(proj, ".apt_generated/gen6/Generated02.java");
+		final String[] expectedClasses = { "targets.filer.Parent02", "gen6.Generated02" };
+		expectingUniqueCompiledClasses(expectedClasses);
+		
+		// Modify target file to change name of generated file and incrementally rebuild; 
+		// generated file should be deleted.
+		IdeTestUtils.copyResources(proj, "targets/filer02b", "src/targets/filer");
+		incrementalBuild();
+		
+		IPath parentPath = proj.getFullPath().append("src/targets/filer/Parent02.java");
+		expectingOnlySpecificProblemFor(parentPath, new Problem("Parent02", "gen6.Generated02 cannot be resolved to a type", parentPath, 842, 858, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR));
+		
+		// This test only works if there are no Java 5 processors (e.g., apt.tests plugin) in the factory path.
+		// If Java 5 processors are present, then gen6.Generated02 will also be recompiled, before it's deleted.
+		final String[] expectedClasses2 = { "gen6.XxxGenerated02", "targets.filer.Parent02" };
+		expectingUniqueCompiledClasses(expectedClasses2);
+
+		expectingNoFile(proj, ".apt_generated/gen6/Generated02.java");
+	}
+
 }
diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index 13ec85f..71b6303 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -52,7 +52,9 @@
 </ul>
 
 <h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203342">203342</a>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203454">203454</a>
+NPE in compiler when processing annotations
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203342">203342</a>
 AST of a NumberLiteral has wrong source code range
 <br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=203089">203089</a>
 getDefaultOptions misses option
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
index 2cb3a2e..5c10a48 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/Compiler.java
@@ -670,7 +670,7 @@
 				// we reset the compiler in order to restart with the new units
 				internalBeginToCompile(newUnits, newUnitSize);
 				bottom = top;
-				top = this.unitsToProcess.length;
+				top = this.totalUnits; // last unit added
 			} else {
 				bottom = top;
 			}
