diff --git a/src/p_inter.c b/src/p_inter.c
index 19ab5ead4b8cbb50fef7ace0b6055cca9b89c58a..dc606a47eabea03cd199a9cb6b84a7c48d28e872 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -836,7 +836,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 				{
 					clientGamedata->collected[special->health-1] = true;
 					M_UpdateUnlockablesAndExtraEmblems(clientGamedata);
-					G_SaveGameData(clientGamedata);
+					if (!prevCollected) // don't thrash the disk and wreak performance.
+						G_SaveGameData(clientGamedata);
 				}
 
 				if (netgame)