use trait for all components