diff --git a/scheduler.module b/scheduler.module
index aeb1840..26910b2 100644
--- a/scheduler.module
+++ b/scheduler.module
@@ -306,10 +306,10 @@ function scheduler_form_alter(&$form, $form_state) {
       }
 
       // if there is a text value then convert it to a unix timestamp
-      if (isset($defaults->publish_on) && $defaults->publish_on && !is_numeric($defaults->publish_on)) {
+      if (!empty($defaults->publish_on) && !is_numeric($defaults->publish_on) && is_string($defaults->publish_on)) {
         $defaults->publish_on = _scheduler_strtotime($defaults->publish_on);
       }
-      if (isset($defaults->unpublish_on) && $defaults->unpublish_on && !is_numeric($defaults->unpublish_on)) {
+      if (!empty($defaults->unpublish_on) && !is_numeric($defaults->unpublish_on) && is_string($defaults->unpublish_on)) {
         $defaults->unpublish_on = _scheduler_strtotime($defaults->unpublish_on);
       }
 
@@ -617,7 +617,7 @@ function scheduler_node_validate($node, $form) {
 
   $date_format = variable_get('scheduler_date_format', SCHEDULER_DATE_FORMAT);
 
-  if (!empty($node->publish_on) && !is_numeric($node->publish_on)) {
+  if (!empty($node->publish_on) && !is_numeric($node->publish_on) && is_string($node->publish_on)) {
     $publishtime = _scheduler_strtotime($node->publish_on);
     if ($publishtime === FALSE) {
       form_set_error('publish_on', t("The 'publish on' value does not match the expected format of %time", array('%time' => format_date(REQUEST_TIME, 'custom', $date_format))));
@@ -627,7 +627,7 @@ function scheduler_node_validate($node, $form) {
     }
   }
 
-  if (!empty($node->unpublish_on) && !is_numeric($node->unpublish_on)) {
+  if (!empty($node->unpublish_on) && !is_numeric($node->unpublish_on) && is_string($node->unpublish_on)) {
     $unpublishtime = _scheduler_strtotime($node->unpublish_on);
     if ($unpublishtime === FALSE) {
       form_set_error('unpublish_on', t("The 'unpublish on' value does not match the expected format of %time", array('%time' => format_date(REQUEST_TIME, 'custom', $date_format))));
@@ -647,7 +647,7 @@ function scheduler_node_presave($node) {
     // Make sure publish_on and unpublish_on are not empty strings.
       $node->$key = 0;
     }
-    elseif (!is_numeric($node->$key)) {
+    elseif (!is_numeric($node->$key) && is_string($node->$key)) {
       $node->$key= _scheduler_strtotime($node->$key);
     }
   }
