abstract into reusable CommonContentExtension component