* refactor GenericEntity