add modification-safe method