Added lazy save. save() will only bother saving if values have actually changed