change: LogicalComposite composed with LogicalComponent(s), instead of Component(s)
change: better application of generics