move article functionality to own module