parameterised a load of bits and pieces