put subsampling into its own protocol
split out the subsampling part