possible abstraction for our component system