switch from inheritance to composition which removes need for Elem.create()