Added protocol and abstract component system.