# Open Discussion: Upgradable Contracts
*These are collaborative notes from the open discussion round about "Upgradable Contracts" at the [Solidity Summit 2020](https://solidity-summit.ethereum.org/).*
```solidity
contract c {
uint a;
uint b @1;
uint c @3;
struct X {
uint a;
uint b storageoffset 2;
}
}
```
```solidity
contract c {
uint a;
addedlater {
uint b;
uint c;
}
struct X {
uint a;
addedlater {
uint b;
}
}
}
```
```solidity=
@id("some_name")
contract c {
@id("some_variable")
uint a;
uint b;
uint c;
@id("some_struct")
struct X {
uint a;
}
}
```
https://github.com/ethereum/solidity/issues/597#issuecomment-392107980 suggested something like "modifiers":
```solidity
uint a storage("some_variable");
```
https://github.com/ethereum/solidity/issues/597#issuecomment-406582568 suggested sections/namespaces:
```solidity
contract MyContract {
storage("some-collection") {
uint foo;
uint bar;
}
storage("other-collection") {
mapping (uint => bool) qux;
MyStruct baz;
}
}
```
## Constructors
**TODO**: Create an issue on this
How to pass a constructor code to the proxy?
- Generate constructor as compiler output
- Note that it's not possible to grab the constructor bytecode from the deployBytecode since the ctor argument positions are hardcoded, so a different-length runtime code would yield differ
- Allow on-chain to define the constructor code
- Support on-chain factory that can create a proxy and run the constructor code from a different implementation