diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java
index a3b71c1d937..9cee0edbc7a 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ICodeReaderCache.java
@@ -45,4 +45,9 @@ public interface ICodeReaderCache {
 	 * @return
 	 */
 	public int getCurrentSpace();
+
+	/**
+	 * 
+	 */
+	public void flush();
 }
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java
index 68c571802e4..059ee5332cc 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java
@@ -62,4 +62,9 @@ public class EmptyCodeReaderCache implements ICodeReaderCache {
 		return 0;
 	}
 
+	public void flush() {
+		// nothing to do
+		
+	}
+
 }
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java
index cf96514b07f..82f90b8e222 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/CodeReaderCache.java
@@ -295,4 +295,8 @@ public class CodeReaderCache implements ICodeReaderCache {
 		return cache.getCurrentSpace(); 
 	}
 
+	public void flush() {
+		cache.flush();
+	}
+
 }
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java
index 2a421db9847..eb438592dbe 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/SavedCodeReaderFactory.java
@@ -16,6 +16,7 @@ import org.eclipse.cdt.core.dom.ICodeReaderFactory;
 import org.eclipse.cdt.core.parser.CodeReader;
 import org.eclipse.cdt.core.parser.CodeReaderCache;
 import org.eclipse.cdt.core.parser.ICodeReaderCache;
+import org.eclipse.core.runtime.Preferences;
 
 /**
  * @author jcamelon
@@ -34,13 +35,29 @@ public class SavedCodeReaderFactory implements ICodeReaderFactory {
     private SavedCodeReaderFactory()
     {
 		int size=0;
-		if (CCorePlugin.getDefault() == null || CCorePlugin.getDefault().getPluginPreferences() == null)
+		Preferences pluginPreferences = CCorePlugin.getDefault().getPluginPreferences();
+		if (CCorePlugin.getDefault() == null || pluginPreferences == null)
 			size = CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB;
 		else
-			size = CCorePlugin.getDefault().getPluginPreferences().getInt(CodeReaderCache.CODE_READER_BUFFER);
-		 
-		if (size >= 0)
+			size = pluginPreferences.getInt(CodeReaderCache.CODE_READER_BUFFER);
+		
+		if (size > 0)
 			cache = new CodeReaderCache(size);
+		else if( size == 0 )
+		{
+			//necessary for cache to work headless
+			String [] properties = pluginPreferences.propertyNames();
+			boolean found = false;
+			for( int j = 0; j < properties.length; ++j )
+				if( properties[j].equals( CodeReaderCache.CODE_READER_BUFFER ) )
+				{
+					found = true;
+					break;
+				}
+					
+			if( !found && size == 0 )
+				cache = new CodeReaderCache(CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB);
+		}
 		else
 			cache = new CodeReaderCache(CodeReaderCache.DEFAULT_CACHE_SIZE_IN_MB);
     }