added deconstruct for immutable