add idExtractor so the adapter can generate stable ids if needed