diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html
index ea7c2a8..4482289 100644
--- a/org.eclipse.jdt.core/buildnotes_jdt-core.html
+++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html
@@ -11,15 +11,15 @@
 <h1>
 Eclipse Platform Build Notes&nbsp;<br>
 Java Development Tooling Core</h1>
-Eclipse SDK Build ??? - ???th November 2001
-<br>Project org.eclipse.jdt.core v_???
+Eclipse SDK Build 20011120 - 20th November 2001
+<br>Project org.eclipse.jdt.core v_213
 <h2>
 What's new in this drop</h2>
 <ul>
 <li> CodeAssist no longer find synthetic completions.
 <li> Reduced startup time of Java perspective
-<li> CodeAssist optionally insert qualification on field/method references
-(see JavaCore option: "org.eclipse.jdt.core.codeComplete.insertQualificationForFieldsAndMethods"). 
+<li> CodeAssist option added to force full qualification of implicit field/method references
+(see JavaCore option: "org.eclipse.jdt.core.codeComplete.forceImplicitQualification"). 
 </ul>
 
 <h3>
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
index a0bb19c..c28d9f8 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/CompletionEngine.java
@@ -690,7 +690,7 @@
 				
 				if (constructor.isSynthetic()) continue next;
 					
-				if (options.checkVisibility()
+				if (options.checkVisibility
 					&& !constructor.canBeSeenBy(invocationSite, scope)) continue next;
 
 				TypeBinding[] parameters = constructor.parameters;
@@ -763,7 +763,7 @@
 
 			if (!CharOperation.prefixEquals(fieldName, field.name, false /* ignore case */))	continue next;
 
-			if (options.checkVisibility()
+			if (options.checkVisibility
 				&& !field.canBeSeenBy(receiverType, invocationSite, scope))	continue next;
 
 			boolean prefixRequired = false;
@@ -802,7 +802,7 @@
 			
 			char[] completion = field.name;
 			
-			if(prefixRequired || options.insertQualificationForFieldsAndMethods()){
+			if(prefixRequired || options.forceImplicitQualification){
 				char[] prefix = computePrefix(scope.enclosingSourceType(), invocationScope.enclosingSourceType(), field.isStatic());
 				completion = CharOperation.concat(prefix,completion,'.');
 			}
@@ -1030,7 +1030,7 @@
 				))
 				continue next;
 
-			if (options.checkVisibility()
+			if (options.checkVisibility
 				&& !memberType.canBeSeenBy(receiverType, invocationType))
 				continue next;
 
@@ -1344,7 +1344,7 @@
 			//		if (noVoidReturnType && method.returnType == BaseTypes.VoidBinding) continue next;
 			if (onlyStaticMethods && !method.isStatic()) continue next;
 
-			if (options.checkVisibility()
+			if (options.checkVisibility
 				&& !method.canBeSeenBy(receiverType, invocationSite, scope)) continue next;
 
 			if (exactMatch) {
@@ -1437,7 +1437,7 @@
 				}
 			}
 			
-			if(prefixRequired || options.insertQualificationForFieldsAndMethods()){
+			if(prefixRequired || options.forceImplicitQualification){
 				char[] prefix = computePrefix(scope.enclosingSourceType(), invocationScope.enclosingSourceType(), method.isStatic());
 				completion = CharOperation.concat(prefix,completion,'.');
 			}
@@ -1487,7 +1487,7 @@
 			//		if (noVoidReturnType && method.returnType == BaseTypes.VoidBinding) continue next;
 			if (onlyStaticMethods && !method.isStatic()) continue next;
 
-			if (options.checkVisibility()
+			if (options.checkVisibility
 				&& !method.canBeSeenBy(receiverType, false, scope)) continue next;
 
 			if (exactMatch) {
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistOptions.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistOptions.java
index 4216445..5d80441 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistOptions.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/impl/AssistOptions.java
@@ -14,13 +14,13 @@
 	 */
 	public static final String OPTION_PerformVisibilityCheck =
 		"org.eclipse.jdt.core.codeComplete.visibilityCheck"; 	//$NON-NLS-1$
-	public static final String OPTION_InsertQualificationForFieldsAndMethods =
-		"org.eclipse.jdt.core.codeComplete.insertQualificationForFieldsAndMethods"; 	//$NON-NLS-1$
+	public static final String OPTION_ForceImplicitQualification =
+		"org.eclipse.jdt.core.codeComplete.forceImplicitQualification"; 	//$NON-NLS-1$
 	public static final String ENABLED = "enabled"; //$NON-NLS-1$
 	public static final String DISABLED = "disabled"; //$NON-NLS-1$
 
-	private boolean checkVisibility = false;
-	private boolean insertQualificationForFieldsAndMethods = false;
+	public boolean checkVisibility = false;
+	public boolean forceImplicitQualification = false;
 
 	/** 
 	 * Initializing the assist options with default settings
@@ -54,24 +54,15 @@
 						this.checkVisibility = false;
 					}
 				continue;
-			} else if (optionID.equals(OPTION_InsertQualificationForFieldsAndMethods)) {
+			} else if (optionID.equals(OPTION_ForceImplicitQualification)) {
 				if (optionValue.equals(ENABLED)) {
-					this.insertQualificationForFieldsAndMethods = true;
+					this.forceImplicitQualification = true;
 				} else
 					if (optionValue.equals(DISABLED)) {
-						this.insertQualificationForFieldsAndMethods = false;
+						this.forceImplicitQualification = false;
 					}
 				continue;
 			} 
 		}
 	}
-
-	public boolean checkVisibility() {
-		return this.checkVisibility;
-	}
-	
-	public boolean insertQualificationForFieldsAndMethods() {
-		return this.insertQualificationForFieldsAndMethods;
-	}
-
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
index 435a4df..b4b9268 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java
@@ -1418,6 +1418,13 @@
 	 *     - option id:				"org.eclipse.jdt.core.codeComplete.visibilityCheck"
 	 *     - possible values:	{ "enabled", "disabled" }
 	 *     - default:				"disabled"
+	 * 
+	 *	CODEASSIST / Automatic Qualification of Implicit Members
+	 *    When active, completion automatically qualifies completion on implicit
+	 *    field references and message expressions.
+	 *     - option id:				"org.eclipse.jdt.core.codeComplete.forceImplicitQualification"
+	 *     - possible values:	{ "enabled", "disabled" }
+	 *     - default:				"disabled"
 	 * </pre>
 	 * 
 	 * @return a mutable table containing the default settings of all known options
@@ -1463,7 +1470,7 @@
 		
 		// CodeAssist settings
 		defaultOptions.put("org.eclipse.jdt.core.codeComplete.visibilityCheck", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$
-		defaultOptions.put("org.eclipse.jdt.core.codeComplete.insertQualificationForFieldsAndMethods", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$
+		defaultOptions.put("org.eclipse.jdt.core.codeComplete.forceImplicitQualification", "disabled"); //$NON-NLS-1$ //$NON-NLS-2$
 		
 		return defaultOptions;
 	}
