diff --git a/scheduler.module b/scheduler.module
index 6ad0013..68c72f7 100644
--- a/scheduler.module
+++ b/scheduler.module
@@ -430,8 +430,8 @@ function scheduler_list() {
   $query->limit(50);
   $query->addJoin('LEFT ', 'node', 'n', 's.nid = n.nid');
   $query->addJoin('LEFT ', 'users', 'u', 'u.uid = n.uid');
-  $query->fields('s', array('publish_on', 'unpublish_on'));
-  $query->fields('n', array('nid', 'uid', 'status', 'title'));
+  $query->fields('s', array('nid', 'publish_on', 'unpublish_on'));
+  $query->fields('n', array('uid', 'status', 'title'));
   $query->addField('u', 'name');
 
   // If this function is being called from a user account page then only select the nodes owned by
@@ -763,6 +763,10 @@ function _scheduler_publish() {
 
   foreach ($nids as $nid) {
     $n                 = node_load($nid);
+    // Prevent creating empty nodes.
+    if (!_scheduler_check_node($n, $nid, 'publish')) {
+      continue;
+    }
     $n->changed        = $n->publish_on;
     $old_creation_date = $n->created;
     if (variable_get('scheduler_publish_touch_' . $n->type, 0) == 1) {
@@ -839,6 +843,10 @@ function _scheduler_unpublish() {
     // If this node is to be unpublished, we can update the node and remove the
     // record since it cannot be republished.
     $n               = node_load($nid);
+    // Prevent creating empty nodes.
+    if (!_scheduler_check_node($n, $nid, 'unpublish')) {
+      continue;
+    }
     $old_change_date = $n->changed;
     $n->changed      = $n->unpublish_on;
 
@@ -874,6 +882,36 @@ function _scheduler_unpublish() {
   return $result;
 }
 
+ /**
+ * Helper function to check for proper node_load()
+ *
+ * Prevent creating empty nodes if the node_load() for this nid fails for
+ * whatever reason. This is NOT a problem of the scheduler module but we do not
+ * want to increase the problems present by adding 'corrupted' nodes to the
+ * already corrupted database.
+ *
+ * @param $node
+ *  The fully loaded node object.
+ * @param $nid
+ *  The node id used to load the node.
+ * @param $op
+ *  The action we tried to perform
+ *
+ * @return
+ *   boolean indicating succesfull load or not.
+ */
+function _scheduler_check_node($node, $nid, $op) {
+  if (!is_object($node) || !isset($node->type) || empty($node->type)) {
+    watchdog('scheduler', 'Failed loading node @nid during attempted @action.', array('@nid' => $nid, '@action' => $op), WATCHDOG_ERROR, l(t('view'), 'node/'. $nid, array('alias' => TRUE)));
+    $x = new stdClass();
+    $x->nid = $nid;
+    scheduler_node_delete($x);
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 /**
  * Gather node IDs for all nodes that need to be $action'ed
  *
