(function (window, undefined) {
    "use strict";

    var def = Q.def,
        fire = Q.fire,