This can be broken to multiple PR's (one for each component)
This can be broken to multiple PR's (one for each component)