Adding progress, optimizations, and adding a promise function