Support custom Virtual FKs through interceptor
Refactor code and add useful methods