diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs
index c5fcbee7a42789e0dea1eb5944e6e013f5f7e8ad..04596c4ed3a77427c1d8b4c089949012554e5753 100644
--- a/frontends/sdl/src/main.rs
+++ b/frontends/sdl/src/main.rs
@@ -340,7 +340,7 @@ impl Emulator {
                     Event::KeyDown {
                         keycode: Some(Keycode::I),
                         ..
-                    } => self.save_image("screen.png"),
+                    } => self.save_image(&self.image_name(Some("png"))),
                     Event::KeyDown {
                         keycode: Some(Keycode::T),
                         ..
@@ -626,6 +626,31 @@ impl Emulator {
             thread::sleep(ten_millis);
         }
     }
+
+    fn rom_name(&self) -> &str {
+        Path::new(&self.rom_path)
+            .file_stem()
+            .unwrap()
+            .to_str()
+            .unwrap()
+    }
+
+    fn image_name(&self, ext: Option<&str>) -> String {
+        let ext = ext.unwrap_or("png");
+        self.best_name(self.rom_name(), ext)
+    }
+
+    fn best_name(&self, base: &str, ext: &str) -> String {
+        let mut index = 0_usize;
+        let mut name = format!("{}.{}", base, ext);
+
+        while Path::new(&name).exists() {
+            index += 1;
+            name = format!("{}-{}.{}", base, index, ext);
+        }
+
+        name
+    }
 }
 
 #[derive(Parser, Debug)]