refactor to better enable subclasses for custom validation
add custom validator