change Gain to MinusGain, add NeighbourhoodType, implement Give