rewriting the component analyzer