only declare volatile if necessary