Moved implementations into separate files.