library exercise up to #17