--- node_expire.nodeapi.inc	2010-07-13 21:03:08.000000000 -0400
+++ new.inc	2010-07-18 09:36:49.249581300 -0400
@@ -23,20 +23,25 @@ function _node_expire_nodeapi(&$ntypes,
       break;
 
     case 'prepare':
-      if (!isset($node->expire)) {
+      // to prevent default value 1969-12-31 check also $ntypes['default'].
+      if (!isset($node->expire) && $ntypes['default']) {
+        $node->expire = format_date(strtotime($ntypes['default']), 'custom', NODE_EXPIRE_FORMAT);
+      }
+      // This gives a way to users without edit exipration permission to update nodes with default expiration.
+      if (isset($node->expire) && !user_access('edit node expire')) {
         $node->expire = format_date(strtotime($ntypes['default']), 'custom', NODE_EXPIRE_FORMAT);
       }
       break;
 
     case 'validate':
-      // The only restriction we have is that the node can't expire in the past.
+      // The only restriction we have is that the node can't expire in the past
       if ($node->expire == '') {
-        if (!empty($ntypes['required'])) {
+        if (!empty($ntypes['required']) && $ntypes['default']) {
           form_set_error('expire_date', t('You must choose an expiration date.'));
         }
       }
       elseif (!$expire = strtotime($node->expire) or $expire <= 0) {
-        form_set_error('expire_date', t('You have to specify a valid date.'));
+        form_set_error('expire_date', t('You have to specify a valid expiration date.'));
       }
       elseif ($expire <= time()) {
         form_set_error('expire_date', t("You can't expire a node in the past!"));
@@ -49,7 +54,6 @@ function _node_expire_nodeapi(&$ntypes,
 
     case 'update':
     case 'insert':
-      $update = array();
       // has the expiration been removed, or does it exist?
       if (isset($node->expire)) {
         db_query('DELETE FROM {node_expire} WHERE nid = %d', $node->nid);
@@ -76,6 +80,11 @@ function _node_expire_form_alter_nodefor
   if (is_numeric($node->expire)) {
     $node->expire = format_date($node->expire, 'custom', NODE_EXPIRE_FORMAT);
   }
+  // This supports node to never expire.
+  if (empty($ntypes['default']) && empty($node->expire)) {
+    $ntypes['required'] = FALSE;
+    $node->expire = NULL;
+  }
 
   if (user_access('edit node expire')) {
     $expire_field = array(
@@ -87,7 +96,7 @@ function _node_expire_form_alter_nodefor
       '#required'      => $ntypes['required'],
       '#default_value' => $node->expire,
     );
-
+    
     // In case jQuery UI module is enabled, use it to
     // get the DatePicker widget.
     if (module_exists('jquery_ui')) {
