new derived classes for each specialised behaviour