introduce generic element class