diff --git a/src/jio.storage/davstorage.js b/src/jio.storage/davstorage.js
index 6b6a82ac7085b5452ac4242c0e9a0d139802bcbf..59225a8e9fbe4f005fe888001a07159fc7e38150 100644
--- a/src/jio.storage/davstorage.js
+++ b/src/jio.storage/davstorage.js
@@ -5,7 +5,7 @@
  */
 
 /*jslint indent: 2, maxlen: 80, nomen: true, regexp: true, unparam: true */
-/*global define, window, jIO, promy, btoa, DOMParser, Blob */
+/*global define, window, jIO, RSVP, btoa, DOMParser, Blob */
 
 // JIO Dav Storage Description :
 // {
@@ -45,8 +45,8 @@
     return define(dependencies, module);
   }
   window.dav_storage = {};
-  module(window.dav_storage, promy, jIO);
-}(['exports', 'promy', 'jio'], function (exports, promy, jIO) {
+  module(window.dav_storage, RSVP, jIO);
+}(['exports', 'rsvp', 'jio'], function (exports, RSVP, jIO) {
   "use strict";
 
   /**
@@ -167,13 +167,11 @@
   }
 
   function promiseSucceed(promise) {
-    var deferred = new promy.Deferred();
-    promise.then(
-      deferred.resolve.bind(deferred),
-      deferred.resolve.bind(deferred),
-      deferred.notify.bind(deferred)
-    );
-    return deferred.promise;
+    return new RSVP.Promise(function (resolve, reject, notify) {
+      promise.then(resolve, reject, notify);
+    }, function () {
+      promise.cancel();
+    });
   }
 
   /**
@@ -265,7 +263,7 @@
         return {"target": {
           "status": e.target.status,
           "statusText": e.target.statusText,
-          "response": JSON.parse(e.target.response)
+          "response": JSON.parse(e.target.responseText)
         }};
       } catch (err) {
         throw {"target": {
@@ -284,6 +282,13 @@
       null,
       this._login
     );
+    // .then(function (v) { // for sinon js compatibility
+    //   return {"target": {
+    //     "status": v.target.status,
+    //     "statusText": v.target.statusText,
+    //     "response": new Blob([v.target.responseText])
+    //   }};
+    // });
   };
 
   DavStorage.prototype._remove = function (param) {
@@ -316,7 +321,7 @@
       this._login
     ).then(function (e) {
       var i, rows = [], row, responses = new DOMParser().parseFromString(
-        e.target.response,
+        e.target.responseText,
         "text/xml"
       ).querySelectorAll(
         "D\\:response, response"
@@ -401,8 +406,7 @@
         o.notify_message = "Updating metadata";
         o.error_message = "DavStorage, unable to update document.";
         o.percentage = [30, 100];
-        this._put(metadata).progress(o.notifyProgress).
-          done(o.success).fail(o.reject);
+        this._put(metadata).then(o.success, o.reject, o.notifyProgress);
       }.bind(this),
       errorDocumentExists: function (e) {
         command.error(
@@ -422,8 +426,7 @@
         o.percentage = [30, 100];
         o.notify_message = "Updating metadata";
         o.error_message = "DavStorage, unable to create document.";
-        this._put(metadata).progress(o.notifyProgress).
-          done(o.success).fail(o.reject);
+        this._put(metadata).then(o.success, o.reject, o.notifyProgress);
       }.bind(this),
       success: function (e) {
         command.success(e.target.status, {"id": metadata._id});
@@ -437,9 +440,11 @@
       }
     };
 
-    this._get(metadata).progress(o.notifyProgress).
-      done(method === 'post' ? o.errorDocumentExists : o.putMetadata).
-      fail(o.putMetadataIfPossible);
+    this._get(metadata).then(
+      method === 'post' ? o.errorDocumentExists : o.putMetadata,
+      o.putMetadataIfPossible,
+      o.notifyProgress
+    );
   };
 
   /**
@@ -481,9 +486,6 @@
       percentage: [0, 30],
       notify_message: "Getting metadata",
       notifyProgress: function (e) {
-        if (e === null) {
-          return;
-        }
         command.notify({
           "method": "putAttachment",
           "message": o.notify_message,
@@ -498,15 +500,15 @@
         o.percentage = [30, 70];
         o.notify_message = "Putting attachment";
         o.remote_metadata = e.target.response;
-        return promy.join(
+        return RSVP.all([
           this._putAttachment(param),
           jIO.util.readBlobAsBinaryString(param._blob)
-        ).then(null, null, function (e) {
+        ]).then(null, null, function (e) {
           // propagate only putAttachment progress
           if (e.index === 0) {
-            return e.answer;
+            return e.value;
           }
-          return null;
+          throw null;
         });
       }.bind(this),
       putMetadata: function (answers) {
@@ -538,7 +540,7 @@
     this._get(param).
       then(o.putAttachmentAndReadBlob).
       then(o.putMetadata).
-      done(o.success).fail(o.reject).progress(o.notifyProgress);
+      then(o.success, o.reject, o.notifyProgress);
   };
 
   /**
@@ -572,8 +574,7 @@
       }
     };
 
-    this._get(param).
-      done(o.success).fail(o.reject).progress(o.notifyGetProgress);
+    this._get(param).then(o.success, o.reject, o.notifyGetProgress);
   };
 
   /**
@@ -634,7 +635,7 @@
 
     this._get(param).
       then(o.getAttachment).
-      done(o.success).fail(o.reject).progress(o.notifyProgress);
+      then(o.success, o.reject, o.notifyProgress);
   };
 
   /**
@@ -691,8 +692,8 @@
         }
         o.count = 0;
         o.nb_requests = requests.length;
-        return promy.join.apply(null, requests).then(null, null, function (e) {
-          if (e.answer.loaded === e.answer.total) {
+        return RSVP.all(requests).then(null, null, function (e) {
+          if (e.value.loaded === e.value.total) {
             o.count += 1;
             command.notify({
               "method": "remove",
@@ -723,7 +724,7 @@
     this._get(param).
       then(o.removeDocument).
       then(o.removeAllAttachments).
-      done(o.success).fail(o.reject).progress(o.notifyProgress);
+      then(o.success, o.reject, o.notifyProgress);
   };
 
   /**
@@ -797,7 +798,7 @@
     this._get(param).
       then(o.updateMetadata).
       then(o.removeAttachment).
-      done(o.success).fail(o.reject).progress(o.notifyProgress);
+      then(o.success, o.reject, o.notifyProgress);
   };
 
   /**
@@ -843,8 +844,8 @@
         o.nb_requests = requests.length;
         o.error_message = "DavStorage, an error occured while " +
           "getting document metadata";
-        return promy.join.apply(null, requests).then(null, null, function (e) {
-          if (e.answer.loaded === e.answer.total) {
+        return RSVP.all(requests).then(null, null, function (e) {
+          if (e.value.loaded === e.value.total) {
             o.count += 1;
             command.notify({
               "method": "allDocs",
@@ -857,7 +858,7 @@
               )
             });
           }
-          return null;
+          throw null;
         });
       }.bind(this),
       success: function () {
@@ -876,7 +877,7 @@
 
     this._allDocs(param, options).
       then(o.getAllMetadataIfNecessary).
-      done(o.success).fail(o.reject).progress(o.notifyProgress);
+      then(o.success, o.reject, o.notifyProgress);
   };
 
   jIO.addStorage('dav', DavStorage);
diff --git a/test/jio.storage/davstorage.livetests.html b/test/jio.storage/davstorage.livetests.html
index f037ac9594f3edfe6d9cd033dc86af29910811a5..fb40964fe736d54139b7ead17f84c8a8b1816f68 100644
--- a/test/jio.storage/davstorage.livetests.html
+++ b/test/jio.storage/davstorage.livetests.html
@@ -6,7 +6,7 @@
   <link rel="stylesheet" href="../../lib/qunit/qunit.css" />
   <script src="../../lib/qunit/qunit.js"></script>
 
-  <script src="../../src/promy/promy.js"></script>
+  <script src="../../lib/rsvp/rsvp-custom.js"></script>
   <script src="../../src/sha256.amd.js"></script>
   <script src="../../jio.js"></script>
   <script src="../../complex_queries.js"></script>
diff --git a/test/jio.storage/davstorage.tests.js b/test/jio.storage/davstorage.tests.js
index c7eea5cec68a8c645e9607dc0da0f59702f1cfa1..7107f1d2fccb3137c61d2534559fc2f4c076e2b8 100644
--- a/test/jio.storage/davstorage.tests.js
+++ b/test/jio.storage/davstorage.tests.js
@@ -1,6 +1,6 @@
 /*jslint indent: 2, maxlen: 80, nomen: true */
 /*global module, test, stop, start, expect, ok, deepEqual, location, sinon,
-  davstorage_spec, promy, jIO, test_util, dav_storage, btoa */
+  davstorage_spec, RSVP, jIO, test_util, dav_storage, btoa */
 
 (function () {
   "use strict";
@@ -25,13 +25,11 @@
   module("Dav Storage");
 
   function success(promise) {
-    var deferred = new promy.Deferred();
-    promise.then(
-      deferred.resolve.bind(deferred),
-      deferred.resolve.bind(deferred),
-      deferred.notify.bind(deferred)
-    );
-    return deferred.promise;
+    return new RSVP.Promise(function (resolve, reject, notify) {
+      promise.then(resolve, resolve, notify);
+    }, function () {
+      promise.cancel();
+    });
   }
 
   /**
@@ -940,59 +938,57 @@
 
     // # Post new documents, list them and remove them
     // post a 201
-    postNewDocument().done(postNewDocumentTest).
+    postNewDocument().then(postNewDocumentTest).
       // get 200
-      then(getCreatedDocument).done(getCreatedDocumentTest).
+      then(getCreatedDocument).then(getCreatedDocumentTest).
       // post b 201
-      then(postSpecificDocument).done(postSpecificDocumentTest).
+      then(postSpecificDocument).then(postSpecificDocumentTest).
       // allD 200 2 documents
-      then(listDocuments).done(list2DocumentsTest).
+      then(listDocuments).then(list2DocumentsTest).
       // remove a 204
-      then(removeCreatedDocument).done(removeCreatedDocumentTest).
+      then(removeCreatedDocument).then(removeCreatedDocumentTest).
       // remove b 204
-      then(removeSpecificDocument).done(removeSpecificDocumentTest).
+      then(removeSpecificDocument).then(removeSpecificDocumentTest).
       // allD 200 empty storage
-      then(listEmptyStorage).done(listEmptyStorageTest).
+      then(listEmptyStorage).then(listEmptyStorageTest).
       // # Create and update documents, and some attachment and remove them
       // put 201
-      then(putNewDocument).done(putNewDocumentTest).
+      then(putNewDocument).then(putNewDocumentTest).
       // get 200
-      then(getCreatedDocument2).done(getCreatedDocument2Test).
+      then(getCreatedDocument2).then(getCreatedDocument2Test).
       // post 409
-      then(postSameDocument).done(postSameDocumentTest).
+      then(postSameDocument).then(postSameDocumentTest).
       // putA a 204
-      then(createAttachment).done(createAttachmentTest).
+      then(createAttachment).then(createAttachmentTest).
       // putA a 204
-      then(updateAttachment).done(updateAttachmentTest).
+      then(updateAttachment).then(updateAttachmentTest).
       // putA b 204
-      then(createAnotherAttachment).done(createAnotherAttachmentTest).
+      then(createAnotherAttachment).then(createAnotherAttachmentTest).
       // put 204
-      then(updateLastDocument).done(updateLastDocumentTest).
+      then(updateLastDocument).then(updateLastDocumentTest).
       // getA a 200
-      then(getFirstAttachment).
-      then(getFirstAttachmentTest).
+      then(getFirstAttachment).then(getFirstAttachmentTest).
       // getA b 200
-      then(getSecondAttachment).
-      then(getSecondAttachmentTest).
+      then(getSecondAttachment).then(getSecondAttachmentTest).
       // get 200
-      then(getLastDocument).done(getLastDocumentTest).
+      then(getLastDocument).then(getLastDocumentTest).
       // removeA b 204
-      then(removeSecondAttachment).done(removeSecondAttachmentTest).
+      then(removeSecondAttachment).then(removeSecondAttachmentTest).
       // getA b 404
       then(getInexistentSecondAttachment).
-      done(getInexistentSecondAttachmentTest).
+      then(getInexistentSecondAttachmentTest).
       // get 200
-      then(getOneAttachmentDocument).done(getOneAttachmentDocumentTest).
+      then(getOneAttachmentDocument).then(getOneAttachmentDocumentTest).
       // removeA b 404
-      then(removeSecondAttachmentAgain).done(removeSecondAttachmentAgainTest).
+      then(removeSecondAttachmentAgain).then(removeSecondAttachmentAgainTest).
       // remove 204
-      then(removeDocument).done(removeDocumentTest).
+      then(removeDocument).then(removeDocumentTest).
       // getA a 404
-      then(getInexistentFirstAttachment).done(getInexistentFirstAttachmentTest).
+      then(getInexistentFirstAttachment).then(getInexistentFirstAttachmentTest).
       // get 404
-      then(getInexistentDocument).done(getInexistentDocumentTest).
+      then(getInexistentDocument).then(getInexistentDocumentTest).
       // remove 404
-      then(removeInexistentDocument).done(removeInexistentDocumentTest).
+      then(removeInexistentDocument).then(removeInexistentDocumentTest).
       // check 204
       //then(checkDocument).done(checkDocumentTest).
       //then(checkStorage).done(checkStorageTest).