common interfaces and generic classes