fourjs abstraction work in progress