fix smart constructor