Moved implementations into separate file