Backported fix for bug 184860.
diff --git a/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF b/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
index 28e1415..810e7e4 100644
--- a/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
+++ b/org.eclipse.core.filebuffers/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.core.filebuffers; singleton:=true
-Bundle-Version: 3.2.1.qualifier
+Bundle-Version: 3.2.2.qualifier
 Bundle-Activator: org.eclipse.core.internal.filebuffers.FileBuffersPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java b/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
index edcf50b..a664e5e 100644
--- a/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
+++ b/org.eclipse.core.filebuffers/src/org/eclipse/core/internal/filebuffers/ResourceFileBuffer.java
@@ -128,9 +128,10 @@
 				if (delta != null && fIsInstalled) {
 					SafeFileChange fileChange= null;
 
+					final int flags= delta.getFlags();
 					switch (delta.getKind()) {
 						case IResourceDelta.CHANGED:
-							if ((IResourceDelta.ENCODING & delta.getFlags()) != 0) {
+							if ((IResourceDelta.ENCODING & flags) != 0) {
 								if (!isDisconnected() && !fCanBeSaved && isSynchronized()) {
 									fileChange= new SafeFileChange() {
 										protected void execute() throws Exception {
@@ -139,8 +140,8 @@
 									};
 								}
 							}
-							if (fileChange == null && (IResourceDelta.CONTENT & delta.getFlags()) != 0) {
-								if (!isDisconnected() && !fCanBeSaved && !isSynchronized()) {
+							if (fileChange == null && (IResourceDelta.CONTENT & flags) != 0) {
+								if (!isDisconnected() && !fCanBeSaved && (!isSynchronized() || (IResourceDelta.REPLACED & flags) != 0)) {
 									fileChange= new SafeFileChange() {
 										protected void execute() throws Exception {
 											handleFileContentChanged(false);
@@ -150,7 +151,7 @@
 							}
 							break;
 						case IResourceDelta.REMOVED:
-							if ((IResourceDelta.MOVED_TO & delta.getFlags()) != 0) {
+							if ((IResourceDelta.MOVED_TO & flags) != 0) {
 								final IPath path= delta.getMovedToPath();
 								fileChange= new SafeFileChange() {
 									protected void execute() throws Exception {