generalise the function unit module, create some derivative classes