Add validation and presave logic

Why not interface? This makes service un-swappable.