add BasePrinter
update Printer (implements BasePrinter)