tons of refactoring for async structure, actually kinda works now...