upgrade constructor