added shuffle (didn't test)