allow multiple implementations for the same interface