diff --git a/publication_date.api.php b/publication_date.api.php
index a85c62b..f40ee23 100644
--- a/publication_date.api.php
+++ b/publication_date.api.php
@@ -28,7 +28,7 @@ function hook_publication_date_alter(&$published_at, $node, $op) {
     $published_at = ($published_at > $now) ? $now : $published_at;
   }
   else {
-    // If the node isn't published then reset the published date to zero.
-    $published_at = 0;
+    // If the node isn't published then reset the published date to default.
+    $published_at = PUBLICATION_DATE_DEFAULT;
   }
 }
diff --git a/publication_date.module b/publication_date.module
index 142a8be..6297e2c 100755
--- a/publication_date.module
+++ b/publication_date.module
@@ -6,11 +6,32 @@
  */
 
 /**
+ * Define the value stored in the database when a node is unpublished and no
+ * publication date has been set. We use a large number here so unpublished
+ * nodes will appear newer than published nodes when sorted by publication date.
+ */
+define('PUBLICATION_DATE_DEFAULT', 999999999);
+
+/**
  * Implements hook_node_load().
+ *
+ * For each node we set two properties...
+ *   - published_at: Equals the publication date as a Unix timestamp, if one has
+ *     been set, or zero otherwise.
+ *   - published_at_or_now: Equals published_at if a publication date has been
+ *     set, or the current REQUEST_TIME if it hasn't.
  */
 function publication_date_node_load($nodes, $types) {
   foreach ($nodes as $node) {
-    $node->published_at = _publication_date_get_date($node->nid);
+    $published_at = _publication_date_get_date($node->nid);
+    if (empty($published_at) || $published_at == PUBLICATION_DATE_DEFAULT) {
+      $node->published_at = 0;
+      $node->published_at_or_now = REQUEST_TIME;
+    }
+    else {
+      $node->published_at = $published_at;
+      $node->published_at_or_now = $published_at;
+    }
   }
 }
 
@@ -55,11 +76,11 @@ function publication_date_node_delete($node) {
  */
 function _publication_date_set_date($node, $op = '') {
   // Set a default publication date value.
-  $published_at = empty($node->published_at) ? 0 : $node->published_at;
+  $published_at = empty($node->published_at) ? PUBLICATION_DATE_DEFAULT : $node->published_at;
 
   // If no publication date has been set and the node is published then use
   // REQUEST_TIME. Otherwise, use the default publication date.
-  $published_at = ($published_at == 0 && $node->status == 1) ? REQUEST_TIME : $published_at;
+  $published_at = ($published_at == PUBLICATION_DATE_DEFAULT && $node->status == 1) ? REQUEST_TIME : $published_at;
 
   // Allow other modules to alter the publication date before it is saved.
   drupal_alter('publication_date', $published_at, $node, $op);
@@ -109,7 +130,7 @@ function publication_date_form_node_form_alter(&$form, &$form_state, $form_id) {
   $node = $form["#node"];
 
   // If this is an existing node then get the currently set publication date.
-  $published_at = ($form['nid'] !== NULL && isset($node->published_at) && $node->published_at) ? $node->published_at : 0;
+  $published_at = ($form['nid'] == NULL || empty($node->published_at)) ? 0 : $node->published_at;
 
   // Check if the user has permission to edit the publication date.
   $pubdate_access = user_access('set any published on date') || user_access('set ' . $node->type . ' published on date');
@@ -249,7 +270,13 @@ function publication_date_entity_property_info_alter(&$info) {
     'label' => t('Published at'),
     'description' => t('The publication date of the node.'),
     'type' => 'date',
-    'getter callback' => '_publication_date_entity_property_getter',
+    'getter callback' => '_publication_date_published_at_getter',
+  );
+  $properties['published_at_or_now'] = array(
+    'label' => t('Published at or now'),
+    'description' => t('The publication date of the node, or the current time if no date has been set.'),
+    'type' => 'date',
+    'getter callback' => '_publication_date_published_at_or_now_getter',
   );
 }
 
@@ -262,11 +289,24 @@ function publication_date_entity_property_info_alter(&$info) {
  * @return integer
  *   The publication date as a timestamp get from the entity.
  */
-function _publication_date_entity_property_getter($entity) {
+function _publication_date_published_at_getter($entity) {
   return $entity->published_at;
 }
 
 /**
+ * Publication date getter for hook_entity_property_info_alter()
+ *
+ * @param $entity
+ *   The entity object.
+ *
+ * @return integer
+ *   The publication date as a timestamp get from the entity.
+ */
+function _publication_date_published_at_or_now_getter($entity) {
+  return $entity->published_at_or_now;
+}
+
+/**
  * Implements hook_clone_node_alter().
  *
  * Reset the publication date when a node is cloned using the Node Clone module.
@@ -275,6 +315,7 @@ function _publication_date_entity_property_getter($entity) {
  */
 function publication_date_clone_node_alter(&$node, $context) {
   $node->published_at = NULL;
+  $node->published_at_or_now = REQUEST_TIME;
 }
 
 /**
diff --git a/tests/publication_date.test b/tests/publication_date.test
index e7e4309..befdda2 100644
--- a/tests/publication_date.test
+++ b/tests/publication_date.test
@@ -35,6 +35,7 @@ class PublicationDateTestCase extends DrupalWebTestCase {
     $node = $this->drupalCreateNode(array('status' => 0));
     $unpublished_node = node_load($node->nid);
     $this->assertTrue(empty($unpublished_node->published_at), 'Published date is initially empty');
+    $this->assertTrue($unpublished_node->published_at_or_now == REQUEST_TIME, 'Published at or now date is REQUEST_TIME');
 
     // Publish the node.
     $unpublished_node->status =1;
@@ -63,6 +64,7 @@ class PublicationDateTestCase extends DrupalWebTestCase {
     node_save($unpublished_node);
     $unpublished_node = node_load($node->nid);
     $this->assertTrue($unpublished_node->published_at == $time, 'Custom published date is saved');
+    $this->assertTrue($unpublished_node->published_at_or_now == $time, 'Published at or now date equals published date');
 
     // Republish the node and check that the field value is maintained.
     $unpublished_node->status = 1;
