material: now JSON-based