diff --git a/components/audio_mp3/audio_mp3.c b/components/audio_mp3/audio_mp3.c
index e7f06636d579f6ba026b415df4e28a2da8a59d61..ae537bc0708e4d138a94593f9a10c65d6f6818d0 100644
--- a/components/audio_mp3/audio_mp3.c
+++ b/components/audio_mp3/audio_mp3.c
@@ -141,6 +141,16 @@ static void mp3_draw(st3m_media *media, Ctx *ctx) {
 static void mp3_think(st3m_media *media, float ms_elapsed) {
     mp3_state *self = (void *)media;
 
+    if (self->file && self->control.seek == 0) {
+        rewind(self->file);
+        self->offset = 0;
+        self->pos = 0;
+        self->control.time = 0;
+        self->control.position = 0;
+        self->control.seek = -1;
+        mp3dec_init(&self->mp3d);
+    }
+
     mp3_fetch_data(self);
 
     self->scroll_pos += ms_elapsed / 1000.0;