leaving logging and exeption handling to the user