Extract GemComponent
Rearrange #component_needs_update
Move behavior down to GemComponent