Initial extension work

Needs refactor to remove code duplicated from components.