Simplify error formatting, use async instead of timers