make as a generic component