add: abstracted scanner class