implement (but not test) spreading