forward declare Elem