diff --git a/admin/code/CMSBatchAction.php b/admin/code/CMSBatchAction.php
index d6e0ea62a..7ff2ae167 100644
--- a/admin/code/CMSBatchAction.php
+++ b/admin/code/CMSBatchAction.php
@@ -82,9 +82,13 @@ abstract class CMSBatchAction extends Object {
 		
 		foreach($objs as $obj) {
 			
-			// Perform the action
-			if (!call_user_func_array(array($obj, $helperMethod), $arguments)) {
-				$status['error'][$obj->ID] = '';
+			// Don't run doPublish() if $obj isn't in a fit state be published
+			// @todo Implementation logic _is_ better in CMSBatchAction_Publish#run() but at least objects not matching, still get the batchaction run over them
+			if ($helperMethod == 'isPublish' && !$obj->getIsDeletedFromStage()) {
+				// Perform the action
+				if (!call_user_func_array(array($obj, $helperMethod), $arguments)) {
+					$status['error'][$obj->ID] = '';
+				}
 			}
 			
 			// Now make sure the tree title is appropriately updated