unsealed classes for better extendibility