works, still has async issues