model re-factored