reimplemented map and map2