make generation of components general