refactored article model