A heavily modified and adapted version of the agreement module.