don't assume opts will passed in