sync with grouplens/lenskit