use accessor instead of initializer to avoid override initialize