diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
index c4bf28a..ff9ba18 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/DeleteVisitor.java
@@ -118,7 +118,9 @@
 			IFileInfo info = node.fileInfo;
 			if (info == null)
 				info = new FileInfo(node.getLocalName());
-			store.addState(target.getFullPath(), node.getStore(), info, true);
+			if (FileSystemResourceManager.storeHistory(node.getResource())) {
+				store.addState(target.getFullPath(), node.getStore(), info, true);
+			}
 		}
 		monitor.worked(1);
 		ticks--;
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
index dbd60dd..9045f3a 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/localstore/FileSystemResourceManager.java
@@ -1149,7 +1149,8 @@
 				}
 			}
 			// add entry to History Store.
-			if (BitMask.isSet(updateFlags, IResource.KEEP_HISTORY) && fileInfo.exists())
+			if (BitMask.isSet(updateFlags, IResource.KEEP_HISTORY) && fileInfo.exists()
+					&& FileSystemResourceManager.storeHistory(target))
 				//never move to the history store, because then the file is missing if write fails
 				getHistoryStore().addState(target.getFullPath(), store, fileInfo, false);
 			if (!fileInfo.exists()) {
@@ -1250,4 +1251,10 @@
 		//for backwards compatibility, ensure the old .prj file is deleted
 		getWorkspace().getMetaArea().clearOldDescription(target);
 	}
+
+	public static boolean storeHistory(IResource file) {
+		WorkspaceDescription description = ((Workspace) file.getWorkspace()).internalGetDescription();
+		return description.isKeepDerivedState() || !file.isDerived();
+	}
+
 }
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IModelObjectConstants.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IModelObjectConstants.java
index ec9e5e7..d9a6efb 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IModelObjectConstants.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/IModelObjectConstants.java
@@ -37,6 +37,8 @@
 	String FILE_STATE_LONGEVITY = "fileStateLongevity"; //$NON-NLS-1$
 	String MAX_FILE_STATE_SIZE = "maxFileStateSize"; //$NON-NLS-1$
 	String MAX_FILE_STATES = "maxFileStates"; //$NON-NLS-1$
+	String KEEP_DERIVED_STATE = "keepDerivedState"; //$NON-NLS-1$
+
 	/**
 	 * The project relative path is called the link name for backwards compatibility
 	 */
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
index d3c2757..70c0f44 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ModelObjectWriter.java
@@ -294,6 +294,7 @@
 			writer.printSimpleTag(FILE_STATE_LONGEVITY, description.getFileStateLongevity());
 			writer.printSimpleTag(MAX_FILE_STATE_SIZE, description.getMaxFileStateSize());
 			writer.printSimpleTag(MAX_FILE_STATES, description.getMaxFileStates());
+			writer.printSimpleTag(KEEP_DERIVED_STATE, description.isKeepDerivedState() ? "1" : "0"); //$NON-NLS-1$ //$NON-NLS-2$
 			String[] order = description.getBuildOrder(false);
 			if (order != null)
 				write(BUILD_ORDER, PROJECT, order, writer);
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
index 1e6599b..156f03f 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/PreferenceInitializer.java
@@ -41,6 +41,7 @@
 	public static final boolean PREF_APPLY_FILE_STATE_POLICY_DEFAULT = true;
 	public static final long PREF_FILE_STATE_LONGEVITY_DEFAULT = 7 * 24 * 3600 * 1000l; // 7 days
 	public static final long PREF_MAX_FILE_STATE_SIZE_DEFAULT = 1024 * 1024l; // 1 MB
+	public static final boolean PREF_KEEP_DERIVED_STATE_DEFAULT = false;
 	public static final int PREF_MAX_FILE_STATES_DEFAULT = 50;
 	public static final long PREF_DELTA_EXPIRATION_DEFAULT = 30 * 24 * 3600 * 1000l; // 30 days
 	/**
@@ -76,11 +77,13 @@
 		node.putBoolean(ResourcesPlugin.PREF_DEFAULT_BUILD_ORDER, PREF_DEFAULT_BUILD_ORDER_DEFAULT);
 		node.putInt(ResourcesPlugin.PREF_MISSING_NATURE_MARKER_SEVERITY, PREF_MISSING_NATURE_MARKER_SEVERITY_DEFAULT);
 
+
 		// history store defaults
 		node.putBoolean(ResourcesPlugin.PREF_APPLY_FILE_STATE_POLICY, PREF_APPLY_FILE_STATE_POLICY_DEFAULT);
 		node.putLong(ResourcesPlugin.PREF_FILE_STATE_LONGEVITY, PREF_FILE_STATE_LONGEVITY_DEFAULT);
 		node.putLong(ResourcesPlugin.PREF_MAX_FILE_STATE_SIZE, PREF_MAX_FILE_STATE_SIZE_DEFAULT);
 		node.putInt(ResourcesPlugin.PREF_MAX_FILE_STATES, PREF_MAX_FILE_STATES_DEFAULT);
+		node.putBoolean(ResourcesPlugin.PREF_KEEP_DERIVED_STATE, PREF_KEEP_DERIVED_STATE_DEFAULT);
 
 		// save manager defaults
 		node.putLong(ResourcesPlugin.PREF_SNAPSHOT_INTERVAL, PREF_SNAPSHOT_INTERVAL_DEFAULT);
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceTree.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceTree.java
index b0b0418..909aaad 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceTree.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/ResourceTree.java
@@ -61,6 +61,9 @@
 	 */
 	@Override
 	public void addToLocalHistory(IFile file) {
+		if (!FileSystemResourceManager.storeHistory(file)) {
+			return;
+		}
 		Assert.isLegal(isValid);
 		try {
 			lock.acquire();
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescription.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescription.java
index 87687de..0859d78 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescription.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescription.java
@@ -28,6 +28,7 @@
 	protected int maxBuildIterations;
 	protected int maxFileStates;
 	protected long maxFileStateSize;
+	private boolean keepDerivedState;
 	protected boolean applyFileStatePolicy;
 	private long snapshotInterval;
 	protected int operationsPerSnapshot;
@@ -44,6 +45,8 @@
 		fileStateLongevity = node.getLong(ResourcesPlugin.PREF_FILE_STATE_LONGEVITY, PreferenceInitializer.PREF_FILE_STATE_LONGEVITY_DEFAULT);
 		maxFileStates = node.getInt(ResourcesPlugin.PREF_MAX_FILE_STATES, PreferenceInitializer.PREF_MAX_FILE_STATES_DEFAULT);
 		maxFileStateSize = node.getLong(ResourcesPlugin.PREF_MAX_FILE_STATE_SIZE, PreferenceInitializer.PREF_MAX_FILE_STATE_SIZE_DEFAULT);
+		keepDerivedState = node.getBoolean(ResourcesPlugin.PREF_KEEP_DERIVED_STATE,
+				PreferenceInitializer.PREF_KEEP_DERIVED_STATE_DEFAULT);
 		snapshotInterval = node.getLong(ResourcesPlugin.PREF_SNAPSHOT_INTERVAL, PreferenceInitializer.PREF_SNAPSHOT_INTERVAL_DEFAULT);
 		operationsPerSnapshot = node.getInt(PreferenceInitializer.PREF_OPERATIONS_PER_SNAPSHOT, PreferenceInitializer.PREF_OPERATIONS_PER_SNAPSHOT_DEFAULT);
 		deltaExpiration = node.getLong(PreferenceInitializer.PREF_DELTA_EXPIRATION, PreferenceInitializer.PREF_DELTA_EXPIRATION_DEFAULT);
@@ -213,4 +216,14 @@
 	public void setMaxConcurrentBuilds(int n) {
 		this.parallelBuildsCount = n;
 	}
+
+	@Override
+	public boolean isKeepDerivedState() {
+		return keepDerivedState;
+	}
+
+	@Override
+	public void setKeepDerivedState(boolean keepDerivedState) {
+		this.keepDerivedState = keepDerivedState;
+	}
 }
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
index 9a2aa02..06fa124 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspaceDescriptionReader.java
@@ -116,6 +116,8 @@
 		String fileStateLongevity = getString(node, FILE_STATE_LONGEVITY);
 		String maxFileStateSize = getString(node, MAX_FILE_STATE_SIZE);
 		String maxFileStates = getString(node, MAX_FILE_STATES);
+		String keepDerivedState = getString(node, KEEP_DERIVED_STATE);
+
 		String[] buildOrder = getStrings(searchNode(node, BUILD_ORDER));
 
 		// build instance
@@ -145,6 +147,9 @@
 		} catch (NumberFormatException e) {
 			logNumberFormatException(maxFileStates, e);
 		}
+		if (keepDerivedState != null)
+			// if in doubt keep derived off
+			description.setKeepDerivedState(keepDerivedState.equals(Integer.toString(1)));
 		if (buildOrder != null)
 			description.internalSetBuildOrder(buildOrder);
 		try {
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
index d5cb26b..65fc7d8 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/WorkspacePreferences.java
@@ -75,6 +75,7 @@
 		target.setFileStateLongevity(source.getFileStateLongevity());
 		target.setMaxFileStates(source.getMaxFileStates());
 		target.setMaxFileStateSize(source.getMaxFileStateSize());
+		target.setKeepDerivedState(source.isKeepDerivedState());
 		target.setSnapshotInterval(source.getSnapshotInterval());
 		target.setOperationsPerSnapshot(source.getOperationsPerSnapshot());
 		target.setDeltaExpiration(source.getDeltaExpiration());
@@ -100,6 +101,7 @@
 		super.setOperationsPerSnapshot(preferences.getInt(PreferenceInitializer.PREF_OPERATIONS_PER_SNAPSHOT));
 		super.setDeltaExpiration(preferences.getLong(PreferenceInitializer.PREF_DELTA_EXPIRATION));
 		super.setMaxConcurrentBuilds(preferences.getInt(ResourcesPlugin.PREF_MAX_CONCURRENT_BUILDS));
+		super.setKeepDerivedState(preferences.getBoolean(ResourcesPlugin.PREF_KEEP_DERIVED_STATE));
 
 		// This property listener ensures we are being updated properly when changes
 		// are done directly to the preference store.
@@ -215,6 +217,11 @@
 		preferences.setValue(ResourcesPlugin.PREF_MAX_CONCURRENT_BUILDS, n);
 	}
 
+	@Override
+	public void setKeepDerivedState(boolean keepDerivedState) {
+		preferences.setValue(ResourcesPlugin.PREF_KEEP_DERIVED_STATE, keepDerivedState);
+	}
+
 	/**
 	 * @see org.eclipse.core.resources.IWorkspaceDescription#setSnapshotInterval(long)
 	 */
@@ -245,8 +252,10 @@
 			super.setOperationsPerSnapshot(preferences.getInt(PreferenceInitializer.PREF_OPERATIONS_PER_SNAPSHOT));
 		else if (property.equals(PreferenceInitializer.PREF_DELTA_EXPIRATION))
 			super.setDeltaExpiration(preferences.getLong(PreferenceInitializer.PREF_DELTA_EXPIRATION));
-		else if (property.equals(ResourcesPlugin.PREF_MAX_CONCURRENT_BUILDS)) {
+		else if (property.equals(ResourcesPlugin.PREF_MAX_CONCURRENT_BUILDS))
 			super.setMaxConcurrentBuilds(preferences.getInt(ResourcesPlugin.PREF_MAX_CONCURRENT_BUILDS));
+		else if (property.equals(ResourcesPlugin.PREF_KEEP_DERIVED_STATE)) {
+			super.setKeepDerivedState(preferences.getBoolean(ResourcesPlugin.PREF_KEEP_DERIVED_STATE));
 		}
 	}
 
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceDescription.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceDescription.java
index 339aec0..df1d6ec 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceDescription.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/IWorkspaceDescription.java
@@ -89,6 +89,16 @@
 	long getMaxFileStateSize();
 
 	/**
+	 * Returns whether derived files are tracked in the local history.
+	 *
+	 * @return <code>true</code> if local history for derived files is created
+	 * @see #setKeepDerivedState(boolean)
+	 * @see ResourcesPlugin#PREF_KEEP_DERIVED_STATE
+	 * @since 3.15
+	 */
+	boolean isKeepDerivedState();
+
+	/**
 	 * Returns whether file states are discarded according to the policy specified by
 	 * <code>setFileStateLongevity(long)</code>, <code>setMaxFileStates(int)</code>
 	 * and <code>setMaxFileStateSize(long)</code> methods.
@@ -233,6 +243,22 @@
 	void setMaxFileStateSize(long size);
 
 	/**
+	 * Sets whether derived files are tracked in the local history.
+	 * <p>
+	 * Users must call <code>IWorkspace.setDescription</code> before changes made to
+	 * this description take effect.
+	 * </p>
+	 *
+	 * @param keepDerivedState <code>true</code> if a history of derived files is
+	 *                         needed.
+	 * @see IWorkspace#setDescription(IWorkspaceDescription)
+	 * @see #isKeepDerivedState()
+	 * @see ResourcesPlugin#PREF_KEEP_DERIVED_STATE
+	 * @since 3.15
+	 */
+	void setKeepDerivedState(boolean keepDerivedState);
+
+	/**
 	 * Sets whether file states are discarded according to the policy specified by
 	 * <code>setFileStateLongevity(long)</code>, <code>setMaxFileStates(int)</code>
 	 * and <code>setMaxFileStateSize(long)</code> methods.
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
index 0b06c2f..927093d 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourcesPlugin.java
@@ -263,6 +263,16 @@
 	public static final String PREF_MAX_FILE_STATE_SIZE = PREF_DESCRIPTION_PREFIX + "maxfilestatesize"; //$NON-NLS-1$
 
 	/**
+	 * Name of a preference for configuring whether derived files should be stored
+	 * in the local history.
+	 *
+	 * @see IWorkspaceDescription#isKeepDerivedState()
+	 * @see IWorkspaceDescription#setKeepDerivedState(boolean)
+	 * @since 3.15
+	 */
+	public static final String PREF_KEEP_DERIVED_STATE = PREF_DESCRIPTION_PREFIX + "keepDerivedState"; //$NON-NLS-1$
+
+	/**
 	 * Name of a preference for configuring the maximum number of states per
 	 * file that can be stored in the local history.
 	 *
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
index 47296c6..23b8945 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/resources/WorkspacePreferencesTest.java
@@ -101,6 +101,11 @@
 		assertEquals("3.2", defaultSnapshotInterval, workspace.getDescription().getSnapshotInterval());
 		assertEquals("Description not synchronized", workspace.getDescription(), preferences);
 
+		preferences.setValue(ResourcesPlugin.PREF_KEEP_DERIVED_STATE, false);
+		assertFalse("4.0", workspace.getDescription().isKeepDerivedState());
+
+		preferences.setValue(ResourcesPlugin.PREF_KEEP_DERIVED_STATE, true);
+		assertTrue("4.1", workspace.getDescription().isKeepDerivedState());
 	}
 
 	/**
@@ -126,6 +131,8 @@
 		modified.setMaxFileStateSize((original.getMaxFileStateSize() + 1) * 2);
 		// 8 - PREF_SNAPSHOT_INTERVAL
 		modified.setSnapshotInterval((original.getSnapshotInterval() + 1) * 2);
+		// 9 - PREF_SNAPSHOT_INTERVAL
+		modified.setKeepDerivedState(!original.isKeepDerivedState());
 
 		final List<String> changedProperties = new LinkedList<>();
 		Preferences.IPropertyChangeListener listener = event -> changedProperties.add(event.getProperty());
@@ -144,7 +151,7 @@
 				fail("2.0", e);
 			}
 			// the right number of events should have been fired
-			assertEquals("2.1 - wrong number of properties changed ", 9, changedProperties.size());
+			assertEquals("2.1 - wrong number of properties changed ", 10, changedProperties.size());
 		} finally {
 			preferences.removePropertyChangeListener(listener);
 		}
@@ -181,6 +188,7 @@
 			modified.setMaxFileStates((original.getMaxFileStates() + 1) * 2);
 			modified.setMaxFileStateSize((original.getMaxFileStateSize() + 1) * 2);
 			modified.setSnapshotInterval((original.getSnapshotInterval() + 1) * 2);
+			modified.setKeepDerivedState(!original.isKeepDerivedState());
 
 			// sets modified description
 			try {
@@ -234,6 +242,7 @@
 		description.setMaxFileStates(16);
 		description.setMaxFileStateSize(100050);
 		description.setSnapshotInterval(1234567);
+		description.setKeepDerivedState(true);
 		try {
 			workspace.setDescription(description);
 		} catch (CoreException ce) {
@@ -270,6 +279,7 @@
 		description.setMaxFileStates(Math.abs((int) (Math.random() * 100000L)));
 		description.setMaxFileStateSize(Math.abs((long) (Math.random() * 100000L)));
 		description.setSnapshotInterval(Math.abs((long) (Math.random() * 100000L)));
+		description.setKeepDerivedState(true);
 		LocalMetaArea localMetaArea = ((Workspace) workspace).getMetaArea();
 		try {
 			localMetaArea.write(description);
@@ -296,6 +306,8 @@
 		assertEquals(message + " - 7", description.getMaxFileStateSize(), preferences.getLong(ResourcesPlugin.PREF_MAX_FILE_STATE_SIZE));
 		assertEquals(message + " - 8", description.getSnapshotInterval(), preferences.getLong(ResourcesPlugin.PREF_SNAPSHOT_INTERVAL));
 		assertEquals(message + " - 9", description.getMaxBuildIterations(), preferences.getLong(ResourcesPlugin.PREF_MAX_BUILD_ITERATIONS));
+		assertEquals(message + " -10", description.isKeepDerivedState(),
+				preferences.getBoolean(ResourcesPlugin.PREF_KEEP_DERIVED_STATE));
 	}
 
 	/**
@@ -311,5 +323,6 @@
 		assertEquals(message + " - 7", description1.getMaxFileStateSize(), description2.getMaxFileStateSize());
 		assertEquals(message + " - 8", description1.getSnapshotInterval(), description2.getSnapshotInterval());
 		assertEquals(message + " - 9", description1.getMaxBuildIterations(), description2.getMaxBuildIterations());
+		assertEquals(message + " -10", description1.isKeepDerivedState(), description2.isKeepDerivedState());
 	}
 }
