replace alert() with custom toast()
reconnect logic
why the hell wasn't this already committed