more comments, stricter check for Select(), better Select()