# Subleases

When you have a leased value, you can lease it again, creating a sublease. Here is an example where we create a lease `l1`

and then a sublease `l2`

. Try putting your cursor after `let l2: leased = l1`

, you will see that both `p`

and `l1`

are drawn with "dashes", indicating that those variables have leased our their object to another:

`class Point(x: our, y: our)`

let p: my = Point(22, 44)

# `l1` is leased from `p`

let l1: leased = p

# `l2` is leased from `l1`

let l2: leased = l1

# β²

# ββββββββββββββββββ

# You see:

# ββββββ

# β β

# β p ββmyβββββββββββββββΊβββββββββ

# β β β Point β

# β l1 ββleasedβββββββββββΊβ βββββ β

# β β β x: 22 β

# β l2 ββleasedβββββββββββΊβ y: 44 β

# β β βββββββββ

# ββββββ

Subleases can be ended just like any other lease, except that a sublease can be terminated either by the lessor (`l1`

, here) or by the original owner (`p`

, here). Try inserting commands like `l1.x += 1`

or `p.x += 1`

and see how the diagram changes.

## Giving a leased valueβ

When you `give`

a lease value, it results in a sublease. This preserves the rule for "give", that giving an object always creates a new value with equivalent permissions: a sublease permits all the same access to the object as the original lease.

`class Point(x: our, y: our)`

let p: my = Point(22, 44)

let l1: leased = p

let l2: any = l1.give # subleases from `l1`

l2.x += 1 # modifies the `Point`