rewrote as all script and to use CF9's implicit getters and setters