Closes #5195
Adds async loading support and cleans up the code quite a bit in the process.
Will likely need to be bindable when hooked up to settings and actually used.