extracted out abstract traits; moved loose object classes to their own package