full repeat/shuffle functionality