add user-defined schema support