generalized the MappedEnumWithDescription, added licence, still a bit buggy