diff --git a/src/core/fs/archive_ext_save_data.cpp b/src/core/fs/archive_ext_save_data.cpp
index b037daaf..6c88fc4e 100644
--- a/src/core/fs/archive_ext_save_data.cpp
+++ b/src/core/fs/archive_ext_save_data.cpp
@@ -230,6 +230,10 @@ void ExtSaveDataArchive::clear(const FSPath& path) const {
 }
 
 void ExtSaveDataArchive::saveIcon(const std::vector<u8>& data) const {
+	if (data.empty()) {
+		return;
+	}
+
 	const fs::path iconPath = IOFile::getAppData() / backingFolder / "icon";
 	IOFile file(iconPath, "wb");
 	file.setSize(data.size());
diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp
index 0c1f4539..657cb50d 100644
--- a/src/core/services/fs.cpp
+++ b/src/core/services/fs.cpp
@@ -572,22 +572,28 @@ void FSService::createExtSaveData(u32 messagePointer) {
 		.duplicateData = false
 	};
 	FSPath path = readPath(PathType::Binary, messagePointer + 4, 32);
-	FSPath smdh = readPath(PathType::Binary, smdhPointer, smdhSize);
 
+	ExtSaveDataArchive* selected = nullptr;
 	switch(mediaType) {
 		case MediaType::NAND:
-			sharedExtSaveData_nand.format(path, info);
-			sharedExtSaveData_nand.saveIcon(smdh.binary);
+			selected = &sharedExtSaveData_nand;
 		break;
 		case MediaType::SD:
-			extSaveData_sdmc.format(path, info);
-			extSaveData_sdmc.saveIcon(smdh.binary);
+			selected = &extSaveData_sdmc;
 		break;
 		default:
 			Helpers::warn("FS::CreateExtSaveData - Unhandled ExtSaveData MediaType %d", static_cast<s32>(mediaType));
 		break;
 	}
 
+	if (selected != nullptr) {
+		selected->format(path, info);
+		if(smdhSize > 0) {
+			const FSPath smdh = readPath(PathType::Binary, smdhPointer, smdhSize);
+			selected->saveIcon(smdh.binary);
+		}
+	}
+
 	mem.write32(messagePointer, IPC::responseHeader(0x0851, 1, 0));
 	mem.write32(messagePointer + 4, Result::Success);
 }