Use separate interface and utility class to implement value type