What exactly are the problems in the standard behavior that you want to change?
I would suggest using the Platform behavior and trying to work around these issues with events, rather than creating your own behavior - this will be an huge job and it probably won't work that well.