```javascript
> var log = [];
undefined
> function success(name, returnVal) {
... return function () { log.push('success' + name + '(' + [].slice.call(arguments).join(',') + ')-->' + returnVal); return returnVal; };
... }
undefined
> function error(name, returnVal) {
... return function () { log.push('error' +  name + '(' + [].slice.call(arguments).join(',') + ')-->' + returnVal); return returnVal; };
... }
undefined
> function fin(name, returnVal) {
... return function () { log.push('finally' +  name + '(' + [].slice.call(arguments).join(',') + ')-->' + returnVal); return returnVal; };
... }
undefined
> log = [];
[]
> deferred = Q.defer();
{ promise: [object Object],
  resolve: [Function],
  fulfill: [Function],
  reject: [Function],
  notify: [Function] }
> promise = deferred.promise;
[object Object]
> promise.then(success('A', 'a'), error('A'));
[object Object]
> promise['finally'](fin('B', 'b'), error('B')).then(success('BB', 'bb'), error('BB'));
[object Object]
> promise.then(success('C', 'c'), error('C'))['finally'](fin('CC', 'IGNORED')).then(success('CCC', 'cc'), error('CCC')).then(success('CCCC', 'ccc'), error('CCCC'));
[object Object]
> deferred.resolve('RESOLVED_VAL');
undefined
> log
[ 'successA(RESOLVED_VAL)-->a',
  'successC(RESOLVED_VAL)-->c',
  'finallyB()-->b',
  'finallyCC()-->IGNORED',
  'successBB(RESOLVED_VAL)-->bb',
  'successCCC(c)-->cc',
  'successCCCC(cc)-->ccc' ]
> 
```

This is, kriskowal's follows the same order in regards to `finallyCC` and `successBB` (that is what the change is about). There is a difference in the order of `successC` and `finallyB`, but this was unchanged