re-adding component stuff to the component branch because it isnt really finished yet.