Major refactoring on protocol and abstract component.