moving over some implementation
cleaning up header