Introduce State object

**do not review yet**