Refactoring #2: repackaging and extracting printers

- repackaging
- simple renaming
- extracting different printers from abstract printer
- small code style fixes