diff --git a/modules/order/commerce_order.module b/modules/order/commerce_order.module
index 786e013..0b0672b 100644
--- a/modules/order/commerce_order.module
+++ b/modules/order/commerce_order.module
@@ -805,6 +805,26 @@ function commerce_order_is_latest_revision($order) {
 }
 
 /**
+ * Compares the given order's changed date against the database value.
+ *
+ * @param $order object
+ *   A fully loaded order object.
+ *
+ * @return bool
+ *   Boolean indicating whether or not the order object has changed.
+ */
+function commerce_order_has_changed($order) {
+  $query = new EntityFieldQuery();
+  $query
+    ->entityCondition('entity_type', 'commerce_order', '=')
+    ->propertyCondition('order_id', $order->order_id, '=')
+    ->propertyCondition('changed', $order->changed, '>');
+  $result = $query->execute();
+
+  return (!empty($result)) ? TRUE : FALSE;
+}
+
+/**
  * Deletes an order by ID.
  *
  * @param $order_id
diff --git a/modules/order/tests/commerce_order.test b/modules/order/tests/commerce_order.test
index 1164634..0933067 100644
--- a/modules/order/tests/commerce_order.test
+++ b/modules/order/tests/commerce_order.test
@@ -120,4 +120,38 @@ class CommerceOrderCRUDTestCase extends CommerceBaseTestCase {
     $this->assertEqual(token_replace('[commerce-order:created]', array('commerce-order' => $order)), format_date($order->created, 'medium'), '[commerce-order:created] was replaced with the created date.');
     $this->assertEqual(token_replace('[commerce-order:changed]', array('commerce-order' => $order)), format_date($order->changed, 'medium'), '[commerce-order:changed] was replaced with the changed date.');
   }
+
+  /**
+   * Test the function to check for an order changing
+   * in the database outside of a load function.
+   */
+  function testCommerceOrderHasChanged() {
+    // Log in as normal user.
+    $this->store_customer = $this->createStoreCustomer();
+    $this->drupalLogin($this->store_customer);
+
+    // Order creation, in complete status.
+    $order = commerce_order_new(1);
+    $order->order_number = $order_number = $this->randomName(10);
+    $order->mail = $this->generateEmail();
+    $order->hostname = $this->randomName(10);
+
+    // Ensure commerce_order_save() returns SAVED_NEW when saving a new order
+    $saved = commerce_order_save($order);
+    $this->assertIdentical($saved, SAVED_NEW, 'commerce_order_save() successfully saved a new order for updating.');
+
+    // Load a new copy of the order so we can update it as if it's out of scope.
+    $loaded = commerce_order_load($order->order_id);
+
+    // Sleep for 3 seconds to make sure REQUEST_TIME in commerce_order_save() is different.
+    sleep(3);
+
+    // Update the order and save it again.
+    $loaded->data['testing'] = REQUEST_TIME;
+    commerce_order_save($loaded);
+
+    // Test if the loaded order has changed in the database and is therefore out of date.
+    $has_changed = commerce_order_has_changed($order);
+    $this->assertTrue($has_changed, 'The original order has changed in the database and needs to be reloaded.');
+  }
 }
