rethink class structure