need to use generic rather than order-specific interface for abstract class