added shuffle and repeat modes