allowFreeform examples + refactor how that works