I was checking your code and the way you did it is very elegant! I'm making a framework like that myself and mine is a lot more "hacky" in its approach. I'm not sure if I'll be able to implement surfing, like you did, for example.