added some abstractions for dither