reconnect (it seems like callbacks hell); TODO: reconnect time option