Index: Slim/Control/Command.pm =================================================================== --- Slim/Control/Command.pm (revision 7032) +++ Slim/Control/Command.pm (working copy) @@ -750,8 +750,9 @@ if ($playlistObj && ref($playlistObj) && $playlistObj->content_type =~ /^(?:ssp|m3u)$/) { - $jumpToIndex = Slim::Formats::Parse::readCurTrackForM3U( $client->currentPlaylist->path ); - + unless (Slim::Player::Playlist::shuffle($client)) { + $jumpToIndex = Slim::Formats::Parse::readCurTrackForM3U( $client->currentPlaylist->path ); + } # And set a callback so that we can # update CURTRACK when the song changes. setExecuteCallback(\&Slim::Player::Playlist::newSongPlaylistCallback); Index: Slim/Player/Source.pm =================================================================== --- Slim/Player/Source.pm (revision 7032) +++ Slim/Player/Source.pm (working copy) @@ -1184,6 +1184,10 @@ $#{$queue} = -1; push @$queue, $playingsong; $::d_source && msg("Song queue is now " . join(',', map { $_->{index} } @$queue) . "\n"); + + # update CURTRACK of a known playlist back to start + my $params = ['reset']; + Slim::Player::Playlist::newSongPlaylistCallback($client, $params); } sub markStreamingTrackAsPlayed { Index: Slim/Player/Playlist.pm =================================================================== --- Slim/Player/Playlist.pm (revision 7032) +++ Slim/Player/Playlist.pm (working copy) @@ -629,11 +629,11 @@ $playlist = $client->currentPlaylist; } - return if Slim::Music::Info::isRemoteURL($playlist); + return if Slim::Music::Info::isRemoteURL($playlist) || Slim::Player::Playlist::shuffle($client); Slim::Formats::Parse::writeCurTrackForM3U( $playlist, - Slim::Player::Source::playingSongIndex($client) + $params->[0] eq 'reset' ? 0 : Slim::Player::Source::playingSongIndex($client) ); }