hard/soft constraints wrong way round
merge