very messy start to async version.
MESSY