model implementations