[MISC] refactor to support customized FormTypes with extra information