Made async, abstract further