handle errors better, specify a timeout