Refactor and update classes to support properties