Fix printer constness and rename few things
Implement a higher level function listen