printing is now using abstraction