Separate logic between client, server and shared
Refactor datalist for performance (1000 options is overkill)