NX-451: first go at a normalized component abstraction