added new abstract component stuff