attempt to separate persistence from data layer, mostly