diff --git a/lib/mock-promises.js b/lib/mock-promises.js
index <HASH>..<HASH> 100644
--- a/lib/mock-promises.js
+++ b/lib/mock-promises.js
@@ -28,12 +28,14 @@
     };
 
     var fakeThen = function() {
+      var promise = this;
       contractsTracker.add({
-        promise: this,
+        promise: promise,
         fulfilledHandler: arguments[0],
         errorHandler: arguments[1],
         progressHandler: arguments[2]
       });
+      return promise;
     };
 
     this.executeForPromise = function(promise){contractsTracker.executeForPromise(promise)};
diff --git a/spec/javascripts/mock-promises_spec.js b/spec/javascripts/mock-promises_spec.js
index <HASH>..<HASH> 100644
--- a/spec/javascripts/mock-promises_spec.js
+++ b/spec/javascripts/mock-promises_spec.js
@@ -39,6 +39,12 @@ describe("mock promises", function() {
     }, 1);
   });
 
+  it("maintains that then is chainable", function() {
+    var promise = PromiseWrapper("chainThings");
+    var chainedReturn = promise.then(function () { }).then(function () {});
+    expect(chainedReturn).toBe(promise);
+  });
+
   describe("contracts", function() {
     var fulfilledHandler1, fulfilledHandler2, errorHandler, progressHandler, promise1, promise2;
     beforeEach(function() {
Fake then returns the promise making it chainable (and inline with Q and other libraries)