reimplement promise
remove promise 2
remove old code