separated auto impure into separate module