# Initializer use in upgraded contracts

**URL:** <https://forum.openzeppelin.com/t/initializer-use-in-upgraded-contracts/28914>\
**Category:** Upgrades\
**Created:** [May 20, 2022, 9:09am UTC](https://forum.openzeppelin.com/t/initializer-use-in-upgraded-contracts/28914 "2022-05-20T09:09:28Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![sirnicolaz](https://avatars.discourse-cdn.com/v4/letter/s/e99b99/32.png) [@sirnicolaz](https://forum.openzeppelin.com/u/sirnicolaz)\
**Post date:** [May 20, 2022, 9:09am UTC](https://forum.openzeppelin.com/t/initializer-use-in-upgraded-contracts/28914/1 "2022-05-20T09:09:28Z")

</div>

Hello,

I am testing upgradable contracts and I am now trying to add a scenario where I first deploy a contract, change its state, then upgrade it to a new contract and check that the old state is not broken.

```auto
contract AV1 is Initializable {
     function initialize() public virtual initializer {
           // do stuff
     }
}

contract AV2 is A {
     function initialize() public override initializer {
          super.initialize(); 
          // do other stuff
     }
}

```

Then I execute the deployment and upgrade like this :

```auto
const AV1Factory = (await ethers.getContractFactory(
    "AV1",
    deployer
  )) as AV1__factory;

  av1Contract = (await upgrades.deployProxy(AV1Factory, {
    initializer: "initialize",
  })) as AV1;

 const AV2Factory = (await ethers.getContractFactory(
        "AV2"
 )) as AV2__factory;

 const aV2Contract = await upgrades.upgradeProxy(
        aV1Contract.address,
        AV2Factory
      );

```

What I realized (with logging) is that the initializer is never called during the upgrade process, neither V1 nor V2. On top, I see that there no way to specify an initializer for the V2 contract (assuming I would like to call it differently).

Could you please explain me what's the expected use of the initializer during the upgrade process? Am I missing something?

---

<div class="post-metadata">

**Author:** ![JulissaDantes](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.openzeppelin.com/julissadantes/32/15410_2.png) [@JulissaDantes](https://forum.openzeppelin.com/u/JulissaDantes)\
**Post date:** [May 20, 2022, 1:10pm UTC](https://forum.openzeppelin.com/t/initializer-use-in-upgraded-contracts/28914/2 "2022-05-20T13:10:39Z")

</div>

You are initializing the first one correctly, but it shouldn't be reinitialize for a second version or you would be returning the contract to the first state, in that case is not an upgrade but a new implementation.
