# Moving a position between lenders without selling it

> Migrating a leveraged position between Morpho, Aave v3 and Aave v4 builds no route, quotes no price and uses no slippage tolerance. Nothing is sold.

- Source: https://defiloops.com/blog/moving-a-position-between-lenders-without-selling-it
- Published: 2026-09-16
- Category: Strategy
- Tags: lending, migration, aave, morpho, refinancing
- Author: DeFiLoops

---
Rates move. The lender that was cheapest when you opened a position is routinely not the
cheapest six weeks later, and the gap is rarely small enough to ignore — two points on a
borrowing position is two points a year, every year, for as long as it stays open.

Almost nobody moves. The reason is not ignorance of the rate.

## Why people stay put

To repay the old loan you need your collateral back. To get your collateral back you must
repay the loan. There is no order in which you can do those two things, so the manual route
is to find the entire loan amount somewhere else first — a strange requirement for the act of
ending up with *less* debt.

And if you do find it, the usual path sells your collateral and buys it back on the other
side. That is the spread, twice, plus slippage on both legs, to end up holding exactly what
you were already holding.

## Nothing is sold

When both ends take the same collateral token, the migration sells nothing at all.

<Spec rows={[
  ['No route is built', 'There is no trade to route, so no path through any pool is chosen'],
  ['No price is quoted', 'Nothing is being priced, so there is no floor to agree and no quote to go stale'],
  ['Slippage tolerance is ignored', 'The setting is not consulted, because there is no execution for it to bound'],
]} />

Your wstETH leaves one protocol and arrives at the other as wstETH. The debt is carried
across. The position is the same position, at a different address, and the only thing that
changed is who you owe.

<Callout type="note" title="Which is why there is no migrate step">
  Migration is not a separate operation. It is the ordinary move-a-position step, given a
  destination whose collateral happens to match — so the selling machinery simply never
  engages. Naming the same market *and* the same lender is refused outright: there would be
  nothing to do.
</Callout>

## Where it can go

<Spec rows={[
  ['Morpho', 'The default at both ends, and the source of the flash loan regardless of where the position lives'],
  ['Aave v3', 'Either end. Note the market is still named by its Morpho name, even when the position is an Aave one'],
  ['Aave v4', 'We reach it on Ethereum. A different protocol from v3 rather than a newer version, organised into spokes, and a v4 move stays inside one of them'],
]} />

Both ends are named by curated market. That is a real limit and a deliberate one: the step
reaches listed pairs, not arbitrary ones.

<Callout type="warn" title="Which Aave you can reach depends on the chain">
  Aave v4 launched on Ethereum in March 2026 and reached Avalanche that July; Base was still in
  governance discussion as of September 2026 and Arbitrum remains v3-only. We reach v4 on
  Ethereum. So on two of our three chains, **v3 is the only Aave there is** — and a plan written
  for one chain does not necessarily have a destination on another.
</Callout>

## And when the collateral does change

The same step handles it, and then it does sell — your wstETH out, the destination market's
collateral in, debt carried across. That is a different operation in spirit: you are changing
what the position is made of, not just where it lives, and the slippage tolerance you set
starts mattering again because there is finally something to execute.

## Why it fits in one transaction

The deadlock at the start is broken with borrowed money you never touch.

<Steps>
  <Step title="Borrow the full repayment amount">
    From Morpho, which lends flash for nothing while Aave charges a premium.
  </Step>
  <Step title="Repay the old debt, take the collateral back">
    These two only deadlocked because they needed an order.
  </Step>
  <Step title="Deposit at the new lender and borrow again">
    Same collateral, same debt, different protocol.
  </Step>
  <Step title="Repay the borrowing">
    Out of what the new position borrows.
  </Step>
</Steps>

Either all of it happens or none of it does. There is no window where your collateral is out
and your position is at neither lender.

<Callout type="warn" title="Clear the debt exactly">
  A fixed repayment amount leaves the interest that accrued between planning and running, and
  dust debt blocks the withdrawal that follows it. Clearing the debt exactly is a flag on the
  step, and it is the one worth using.
</Callout>

## What it will not do

- **You cannot take the flash loan yourself.** There is no `flash.borrow` operation — it is a
  means inside fourteen of the sixty-one operations, never a step of its own.
- **A Safe cannot do it.** A Safe runs batched calls with nothing installed, but cannot receive
  a flash-loan callback without installing a module.

<Callout type="note" title="The same operation also flips direction">
  Moving lender and changing direction are the same step with different arguments. Turning a
  long into a short — or into a delta-neutral position — without closing it is
  [its own article](/blog/turn-a-long-into-a-short-without-closing-it).
</Callout>