need to lazily init properties