Index: apps/playlist.c =================================================================== --- apps/playlist.c (revision 15993) +++ apps/playlist.c (working copy) @@ -2679,13 +2679,13 @@ int playlist_update_resume_info(const struct mp3entry* id3) { struct playlist_info* playlist = ¤t_playlist; - + if (id3) { if (global_status.resume_index != playlist->index || global_status.resume_offset != id3->offset) { - global_status.resume_index = playlist->index; + global_status.resume_index = id3->transition == 0 ? playlist->index : playlist->index - 1; global_status.resume_offset = id3->offset; status_save(); } Index: apps/playback.c =================================================================== --- apps/playback.c (revision 15993) +++ apps/playback.c (working copy) @@ -510,6 +510,8 @@ int offset = ci.new_track + wps_offset; cur_idx = (track_ridx + offset) & MAX_TRACK_MASK; + + curtrack_id3.transition = 0; if (cur_idx == track_ridx && *curtrack_id3.path) { @@ -534,6 +536,8 @@ we have and return that. */ memset(&temp_id3, 0, sizeof(struct mp3entry)); + + temp_id3.transition = 0; filename = playlist_peek(0); if (!filename) @@ -2019,6 +2023,8 @@ /* Save the track metadata to allow the WPS to display it while PCM finishes playing that track */ copy_mp3entry(&prevtrack_id3, &curtrack_id3); + + prevtrack_id3.transition = 1; /* Update the main buffer copy of the track metadata with the one the codec has been using (for the unbuffer callbacks) */ Index: firmware/export/id3.h =================================================================== --- firmware/export/id3.h (revision 15993) +++ firmware/export/id3.h (working copy) @@ -219,6 +219,8 @@ /* Cuesheet support */ int cuesheet_type; /* 0: none, 1: external, 2: embedded */ + + int transition; }; enum {