diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
index 08480e7..8daa851 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/File.java
@@ -45,8 +45,9 @@
 			if (workspace.shouldValidate)
 				workspace.validateSave(this);
 			final ISchedulingRule rule = workspace.getRuleFactory().modifyRule(this);
+			SubMonitor newChild = subMonitor.newChild(1);
 			try {
-				workspace.prepareOperation(rule, subMonitor.newChild(1));
+				workspace.prepareOperation(rule, newChild);
 				ResourceInfo info = getResourceInfo(false, false);
 				checkAccessible(getFlags(info));
 				workspace.beginOperation(true);
@@ -102,8 +103,9 @@
 		try {
 			checkValidPath(path, FILE, true);
 			final ISchedulingRule rule = workspace.getRuleFactory().createRule(this);
+			SubMonitor newChild = subMonitor.newChild(1);
 			try {
-				workspace.prepareOperation(rule, subMonitor.newChild(1));
+				workspace.prepareOperation(rule, newChild);
 				checkDoesNotExist();
 				Container parent = (Container) getParent();
 				ResourceInfo info = parent.getResourceInfo(false, false);
@@ -327,8 +329,9 @@
 			if (workspace.shouldValidate)
 				workspace.validateSave(this);
 			final ISchedulingRule rule = workspace.getRuleFactory().modifyRule(this);
+			SubMonitor newChild = subMonitor.newChild(1);
 			try {
-				workspace.prepareOperation(rule, subMonitor.newChild(1));
+				workspace.prepareOperation(rule, newChild);
 				ResourceInfo info = getResourceInfo(false, false);
 				checkAccessible(getFlags(info));
 				workspace.beginOperation(true);
@@ -401,8 +404,9 @@
 		// need to get the project as a scheduling rule because we might be creating a new folder/file to
 		// hold the project settings
 		final ISchedulingRule rule = workspace.getRuleFactory().charsetRule(this);
+		SubMonitor newChild = subMonitor.newChild(1);
 		try {
-			workspace.prepareOperation(rule, subMonitor.newChild(1));
+			workspace.prepareOperation(rule, newChild);
 			ResourceInfo info = getResourceInfo(false, false);
 			checkAccessible(getFlags(info));
 			workspace.beginOperation(true);
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
index 3b4afd4..f2da547 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Folder.java
@@ -86,8 +86,9 @@
 		SubMonitor subMonitor = SubMonitor.convert(monitor, message, 100);
 		checkValidPath(path, FOLDER, true);
 		final ISchedulingRule rule = workspace.getRuleFactory().createRule(this);
+		SubMonitor newChild = subMonitor.newChild(1);
 		try {
-			workspace.prepareOperation(rule, subMonitor.newChild(1));
+			workspace.prepareOperation(rule, newChild);
 			IFileStore store = getStore();
 			IFileInfo localInfo = store.fetchInfo();
 			assertCreateRequirements(store, localInfo, updateFlags);
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
index f907db7..ead6c1f 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Project.java
@@ -178,8 +178,9 @@
 		String msg = NLS.bind(Messages.resources_closing_1, getName());
 		SubMonitor subMonitor = SubMonitor.convert(monitor, msg, 100);
 		final ISchedulingRule rule = workspace.getRuleFactory().modifyRule(this);
+		SubMonitor newChild = subMonitor.newChild(1);
 		try {
-			workspace.prepareOperation(rule, subMonitor.newChild(1));
+			workspace.prepareOperation(rule, newChild);
 			ResourceInfo info = getResourceInfo(false, false);
 			int flags = getFlags(info);
 			checkExists(flags, true);
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
index 8b266e5..e72cc42 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Workspace.java
@@ -433,12 +433,13 @@
 		ISchedulingRule currentRule = null;
 		boolean buildParallel = noEnclosingRule && getDescription().getMaxConcurrentBuilds() > 1 && getDescription().getBuildOrder() == null;
 		SubMonitor subMonitor = SubMonitor.convert(monitor, 100);
+		SubMonitor newChild = subMonitor.newChild(1);
 		try {
 			try {
 
 				// Must run the PRE_BUILD with the WRule held before acquiring WS lock
 				// Can remove this if we run notifications without the WS lock held: bug 249951
-				prepareOperation(notificationRule, subMonitor.newChild(1));
+				prepareOperation(notificationRule, newChild);
 				currentRule = notificationRule;
 				beginOperation(true);
 				aboutToBuild(this, trigger);
@@ -609,18 +610,19 @@
 		//nothing to do if the workspace failed to open
 		if (!isOpen())
 			return;
+		String msg = Messages.resources_closing_0;
+		SubMonitor subMonitor = SubMonitor.convert(monitor, msg, 20);
+		subMonitor.subTask(msg);
+		// this operation will never end because the world is going away
+		SubMonitor newChild = subMonitor.newChild(1);
 		try {
-			String msg = Messages.resources_closing_0;
-			SubMonitor subMonitor = SubMonitor.convert(monitor, msg, 20);
-			subMonitor.subTask(msg);
-			//this operation will never end because the world is going away
 			try {
 				stringPoolJob.cancel();
 				//shutdown save manager now so a last snapshot can be taken before we close
 				//note: you can't call #save() from within a nested operation
 				saveManager.shutdown(null);
 				saveManager.reportSnapshotRequestor();
-				prepareOperation(getRoot(), subMonitor.newChild(1));
+				prepareOperation(getRoot(), newChild);
 				//shutdown notification first to avoid calling third parties during shutdown
 				notificationManager.shutdown(null);
 				beginOperation(true);
