First attempt at making it Async
More refactoring.
Async optimisation complete.
v 2.1.0.4