diff --git a/akismet.module b/akismet.module
index 75547eb..801012e 100644
--- a/akismet.module
+++ b/akismet.module
@@ -2478,6 +2478,7 @@ function akismet_action_info() {
       'label' => t('Report node to Akismet as spam and unpublish'),
       'type' => 'node',
       'configurable' => FALSE,
+      'behavior' => array('changes_property'),
       'triggers' => array(
         'node_insert',
         'node_update',
@@ -2534,12 +2535,11 @@ function _akismet_action_unpublish($entity_type, $entities) {
       _comment_update_node_statistics($nid);
     }
   }
-  else if ($entity_type === 'node') {
+  elseif ($entity_type === 'node') {
     // Unpublish the node.
-    db_update("node")
-      ->fields(array("status" => NODE_NOT_PUBLISHED))
-      ->condition("nid", $nids)
-      ->execute();
+    foreach ($nids as $nid) {
+      $entities[$nid]->status = NODE_NOT_PUBLISHED;
+    }
   }
 }
 
diff --git a/tests/akismet.test b/tests/akismet.test
index 3087066..30bf14b 100644
--- a/tests/akismet.test
+++ b/tests/akismet.test
@@ -2009,6 +2009,9 @@ class AkismetActionsTestCase extends AkismetWebTestCase {
 
     // Call the unpublish action.
     akismet_action_unpublish_node($node_entities);
+    foreach ($node_entities as $node_entity) {
+      node_save($node_entity);
+    }
 
     // Verify that all comments are now unpublished.
     $published = db_query('SELECT * FROM {node} WHERE nid IN (:nids) AND status = 1', array(':nids' => $nids))->fetchAll();
