Dash Addition 

Use ```new Promise(function(resolve, reject)``` instead of defers. .defer() is not spec compliant and eventually this would make it a pain in the ass to replace with native promises.