diff --git a/src/sound/mod.rs b/src/sound/mod.rs
index 256e0c4..7f14071 100644
--- a/src/sound/mod.rs
+++ b/src/sound/mod.rs
@@ -106,7 +106,10 @@ impl SoundManager {
         if song_id == 0 {
             log::info!("Stopping BGM");
 
+            self.prev_song_id = self.current_song_id;
             self.current_song_id = 0;
+
+            self.tx.send(PlaybackMessage::SaveState)?;
             self.tx.send(PlaybackMessage::Stop)?;
         } else if let Some(song_name) = SONGS.get(song_id) {
             let org = organya::Song::load_from(filesystem::open(ctx, ["/base/Org/", &song_name.to_lowercase(), ".org"].join(""))?)?;
@@ -206,6 +209,10 @@ fn run<T>(rx: Receiver<PlaybackMessage>, bank: SoundBank,
                         engine.set_state(saved_state.clone().unwrap(), &bank);
                         saved_state = None;
 
+                        if state == PlaybackState::Stopped {
+                            engine.set_position(0);
+                        }
+
                         for i in &mut buf[0..frames] { *i = 0x8080 };
                         frames = engine.render_to(&mut buf);
                         index = 0;