diff --git a/lib/Storeit.js b/lib/Storeit.js
index <HASH>..<HASH> 100644
--- a/lib/Storeit.js
+++ b/lib/Storeit.js
@@ -4,6 +4,7 @@ var Q = require("q");
 var _ = require("underscore");
 var pubit = require("pubit-as-promised");
 var whatsDifferent = require("./utils").whatsDifferent;
+var previously = require("./utils").previously;
 var isObject = require("./utils").isObject;
 var cloneObject = require("./utils").cloneObject;
 var isEqual = require("./utils").isEqual;
@@ -123,17 +124,22 @@ function Storeit(namespace, storageProvider) {
     function setCache(key, value) {
         var results = {};
         if (has(key)) {
-            var partial = value;
+            var previousPartial;
+            var partial;
             var currentValue = getValue(key);
             if (isObject(value) && isObject(currentValue)) {
                 value = _.extend(cloneObject(currentValue), value); // Allow "patching" with partial value.
                 partial = whatsDifferent(currentValue, value);
+                previousPartial = previously(currentValue, partial);
+            } else {
+                partial = value;
+                previousPartial = currentValue;
             }
             if (isEqual(currentValue, value)) {
                 results.action = Action.none;
             } else {
                 cache[key].value = value;
-                publish(EventName.modified, partial, key);
+                publish(EventName.modified, partial, key, previousPartial);
                 results.action = Action.modified;
             }
         } else {
Publish a `previousPartial` as a third parameter to `modified` event.