Moved implementation to separate file! Thanks Bill!