even more minimal, with pre/postprocess hooks