Factor implementations out of headers. Factor out constructor to allow for creation of uninitialized struct.