first pass at splitting up headers and imple; compiles, but doesn't link