Make basic root generic over root types
Added subsystem and a collection of subsystems to create a intersection