* Change the pool used for MIR pricing and trading from Astroport (broken) to
  Terraswap v1.
* Get rid of "Migration required" for Terraswap MIR-USTC.
* Create Pool page with Provide and Withdraw tabs.
* Farm page: change link target from Farm->Long to Pool->Provide.
* My page->Pool: add Withdraw button, linking to Pool->Withdraw.
* Make it possible to provide liquidity for mAssets by disabling broken
  autostake.
* Pool: make sure Terraswap is used when providing or withdrawing MIR-USTC
  liquidity.
* My page->Pool: show Withdraw button for Terraswap MIR-USTC.
* Change the default MIR LP token to Terraswap.
* Handle Astroport LP correctly.

Assumes that the whitelist from https://github.com/Mirror-Protocol/whitelist has
been copied into "public/whitelist"

Requires 1_claim_distribute_git.diff and 1_tax_git.diff applied before

Requires 1_networks_git.diff applied (before or after)

diff --git a/public/whitelist/columbus.json b/public/whitelist/columbus.json
index c371bbf..45e67d3 100644
--- a/public/whitelist/columbus.json
+++ b/public/whitelist/columbus.json
@@ -21,8 +21,8 @@
       "symbol": "MIR",
       "name": "Mirror",
       "token": "terra15gwkyepfc6xgca5t5zefzwy42uts8l2m4g40k6",
-      "pair": "terra143xxfw5xf62d5m32k3t4eu9s82ccw80lcprzl9",
-      "lpToken": "terra17trxzqjetl0q6xxep0s2w743dhw2cay0x47puc",
+      "pair": "terra1amv303y8kzxuegvurh0gug2xe9wkgj65enq2ux",
+      "lpToken": "terra17gjf2zehfvnyjtdgua9p9ygquk6gukxe7ucgwh",
       "status": "LISTED"
     },
     "terra1vxtwu4ehgzz77mnfwrntyrmgl64qjs75mpwqaz": {
diff --git a/src/data/external/astroport.ts b/src/data/external/astroport.ts
index a43e427..c9f0f70 100644
--- a/src/data/external/astroport.ts
+++ b/src/data/external/astroport.ts
@@ -1,7 +1,6 @@
 import { useQuery } from "react-query"
 import { useLCDClient } from "@terra-money/wallet-provider"
 import { useAddress, useNetwork } from "../../hooks"
-import { useProtocol } from "../contract/protocol"
 
 interface AstroPendingRewards {
   pending: string // ASTRO
@@ -11,9 +10,8 @@ interface AstroPendingRewards {
 export const useAstroLpStakedBalance = () => {
   const address = useAddress()
   const lcd = useLCDClient()
-  const { astro } = useNetwork()
-  const { whitelist, getToken } = useProtocol()
-  const { lpToken } = whitelist[getToken("MIR")]
+  const { astro, mirrorAstroport } = useNetwork()
+  const { lpToken } = mirrorAstroport
 
   return useQuery(["AstroDeposit", address], () =>
     lcd.wasm.contractQuery<string>(astro.generator, {
@@ -25,9 +23,8 @@ export const useAstroLpStakedBalance = () => {
 export const useAstroPendingRewards = () => {
   const address = useAddress()
   const lcd = useLCDClient()
-  const { astro } = useNetwork()
-  const { whitelist, getToken } = useProtocol()
-  const { lpToken } = whitelist[getToken("MIR")]
+  const { astro, mirrorAstroport } = useNetwork()
+  const { lpToken } = mirrorAstroport
 
   return useQuery(["AstroPendingRewards", address], () =>
     lcd.wasm.contractQuery<AstroPendingRewards>(astro.generator, {
diff --git a/src/data/my/farming.ts b/src/data/my/farming.ts
index 5202a21..85f8c0e 100644
--- a/src/data/my/farming.ts
+++ b/src/data/my/farming.ts
@@ -6,6 +6,7 @@ import { useRewards } from "./rewards"
 import { useAssetsAPR } from "../apr/apr"
 import usePool from "../../forms/modules/usePool"
 import useMirrorTerraswapPool from "../../forms/modules/useMirrorTerraswapPool"
+import useMirrorAstroportPool from "../../forms/modules/useMirrorAstroportPool"
 import { useAstroLpStakedBalance } from "../external/astroport"
 import { useAstroPendingRewards } from "../external/astroport"
 
@@ -17,6 +18,7 @@ export const useMyFarming = () => {
   const { contents: rewards, isLoading: isLoadingRewards } = useRewards()
   const getPool = usePool()
   const getMirrorTerraswapPool = useMirrorTerraswapPool()
+  const getMirrorAstroportPool = useMirrorAstroportPool()
   const assetsAPR = useAssetsAPR()
   const { data: astroPendingRewards } = useAstroPendingRewards()
   const { data: astroLpStakedBalance = "0" } = useAstroLpStakedBalance()
@@ -25,20 +27,18 @@ export const useMyFarming = () => {
   /* Astro */
   const mirrorToken = getToken("MIR")
   const mirrorItem = whitelist[mirrorToken]
-  const mirrorPool = getPool({
-    amount: astroLpStakedBalance,
-    token: mirrorToken,
-  })
+  const mirrorAstroportPool = getMirrorAstroportPool?.(astroLpStakedBalance)
 
   const mirrorData = {
     ...mirrorItem,
-    migrationRequired: false,
+    isTerraswapMIR: false,
+    isAstroport: true,
     delisted: false,
     apr: assetsAPR[mirrorToken]?.long,
     staked: astroLpStakedBalance,
     rewards: astroPendingRewards?.pending_on_proxy ?? "0",
     astroTokenReward: astroTokenRewardAmount,
-    withdrawable: mirrorPool.fromLP,
+    withdrawable: mirrorAstroportPool?.fromLP,
   }
 
   const dataSourceListed = listedAll
@@ -48,17 +48,18 @@ export const useMyFarming = () => {
       const balance = findStaking(StakingKey.LPSTAKED, token)
       const pool = getPool({ amount: balance, token })
       const mirrorTerraswapPool = getMirrorTerraswapPool?.(balance)
-      const migrationRequired = token === mirrorToken
+      const isTerraswapMIR = token === mirrorToken
 
       return {
         ...item,
-        migrationRequired,
+        isTerraswapMIR,
+        isAstroport: false,
         delisted: getIsDelisted(token),
         apr: assetsAPR[token]?.long,
         staked: findStaking(StakingKey.LPSTAKED, token),
         rewards: findStaking(StakingKey.LPREWARD, token),
         astroTokenReward: "0",
-        withdrawable: migrationRequired
+        withdrawable: isTerraswapMIR
           ? mirrorTerraswapPool?.fromLP
           : pool.fromLP,
       }
diff --git a/src/data/my/pool.ts b/src/data/my/pool.ts
index 725defc..9a6377a 100644
--- a/src/data/my/pool.ts
+++ b/src/data/my/pool.ts
@@ -1,27 +1,12 @@
-import { useQuery } from "react-query"
-import { useLCDClient } from "@terra-money/wallet-provider"
 import { gt, sum } from "../../libs/math"
 import { StakingKey } from "../../hooks/contractKeys"
 import { useProtocol } from "../contract/protocol"
 import { useFindStaking } from "../contract/normalize"
-import { useAddress, useNetwork } from "../../hooks"
 import usePool from "../../forms/modules/usePool"
 import useMirrorTerraswapPool from "../../forms/modules/useMirrorTerraswapPool"
-
-const useMirrorTerraswapLpBalance = () => {
-  const address = useAddress()
-  const lcd = useLCDClient()
-  const { mirrorTerraswap } = useNetwork()
-  const { lpToken } = mirrorTerraswap
-
-  return useQuery(["MirrorTerraswapLpBalance", address], async () => {
-    const { balance } = await lcd.wasm.contractQuery<Balance>(lpToken, {
-      balance: { address },
-    })
-
-    return balance
-  })
-}
+import useMirrorAstroportPool from "../../forms/modules/useMirrorAstroportPool"
+import useMirrorTerraswapLpBalance from "../../forms/modules/useMirrorTerraswapLpBalance"
+import useMirrorAstroportLpBalance from "../../forms/modules/useMirrorAstroportLpBalance"
 
 export const useMyPool = () => {
   const { whitelist, listedAll, getIsDelisted, getToken } = useProtocol()
@@ -29,20 +14,34 @@ export const useMyPool = () => {
   const { contents: findStaking, isLoading } = useFindStaking()
   const getPool = usePool()
   const getMirrorTerraswapPool = useMirrorTerraswapPool()
+  const getMirrorAstroportPool = useMirrorAstroportPool()
 
   const { data: mirrorTerraswapLpBalance = "0" } = useMirrorTerraswapLpBalance()
+  const { data: mirrorAstroportLpBalance = "0" } = useMirrorAstroportLpBalance()
   const mirrorToken = getToken("MIR")
   const mirrorItem = whitelist[mirrorToken]
 
   const mirrorTerraswapItem = {
     ...mirrorItem,
-    migrationRequired: true,
+    isTerraswapMIR: true,
+    isAstroport: false,
     delisted: false,
     balance: mirrorTerraswapLpBalance,
     withdrawable: getMirrorTerraswapPool?.(mirrorTerraswapLpBalance).fromLP,
   }
+  const mirrorAstroportItem = {
+    ...mirrorItem,
+    isTerraswapMIR: false,
+    isAstroport: true,
+    delisted: false,
+    balance: mirrorAstroportLpBalance,
+    withdrawable: getMirrorAstroportPool?.(mirrorAstroportLpBalance).fromLP,
+  }
 
   const dataSourceListed = listedAll
+    .filter((item: ListedItem) => {
+      return item.token !== mirrorToken
+    })
     .map((item: ListedItem) => {
       const { token } = item
       const balance = findStaking(StakingKey.LPSTAKABLE, token)
@@ -50,7 +49,8 @@ export const useMyPool = () => {
 
       return {
         ...item,
-        migrationRequired: false,
+        isTerraswapMIR: false,
+        isAstroport: false,
         delisted: getIsDelisted(token),
         balance,
         withdrawable: fromLP,
@@ -58,9 +58,12 @@ export const useMyPool = () => {
     })
     .filter(({ balance }) => gt(balance, 0))
 
-  const dataSource = gt(mirrorTerraswapLpBalance, 0)
+  const dataSource2 = gt(mirrorTerraswapLpBalance, 0)
     ? [mirrorTerraswapItem, ...dataSourceListed]
     : dataSourceListed
+  const dataSource = gt(mirrorAstroportLpBalance, 0)
+    ? [mirrorAstroportItem, ...dataSource2]
+    : dataSource2
 
   const totalWithdrawableValue = sum(
     dataSource.map(({ withdrawable }) => withdrawable?.value ?? 0)
diff --git a/src/forms/PoolForm.tsx b/src/forms/PoolForm.tsx
index 3a57fe2..c35899a 100644
--- a/src/forms/PoolForm.tsx
+++ b/src/forms/PoolForm.tsx
@@ -12,6 +12,7 @@ import { renderBalance } from "../libs/formHelpers"
 import getLpName from "../libs/getLpName"
 import { PriceKey, BalanceKey, StakingKey } from "../hooks/contractKeys"
 import { useProtocol } from "../data/contract/protocol"
+import { useNetwork } from "../hooks"
 import { useFindBalance, useFindPrice } from "../data/contract/normalize"
 import { useFindStaking } from "../data/contract/normalize"
 
@@ -28,6 +29,8 @@ import FormContainer from "./modules/FormContainer"
 import FormIcon from "./modules/FormIcon"
 import Step from "./Step"
 import styles from "./PoolForm.module.scss"
+import useMirrorTerraswapPool from "./modules/useMirrorTerraswapPool"
+import useMirrorTerraswapLpBalance from "./modules/useMirrorTerraswapLpBalance"
 
 interface Props {
   type: PoolType
@@ -46,17 +49,24 @@ const PoolForm = ({ type }: Props) => {
   /* context */
   const { state, search } = useLocation<{ token: string }>()
   const sp = new URLSearchParams(search)
-  const autoStake = sp.get("pool") === null
+  const autoStakePossible = false
+  // Mirror staking contract autostake has been broken since June 2023
+  const autoStake = autoStakePossible && sp.get("pool") === null
   const { contracts, whitelist, getSymbol, toToken } = useProtocol()
   const { contents: findBalance } = useFindBalance()
   const findPrice = useFindPrice()
   const { contents: findStaking } = useFindStaking()
   const getPool = usePool()
+  const getMirrorTerraswapPool = useMirrorTerraswapPool()
 
+  const { data: mirrorTerraswapLpBalance = "0" } = useMirrorTerraswapLpBalance()
   const getBalance = (token: string) =>
     ({
       [PoolType.PROVIDE]: findBalance(token),
-      [PoolType.WITHDRAW]: findStaking(StakingKey.LPSTAKABLE, token),
+      [PoolType.WITHDRAW]:
+        getSymbol(token) === "MIR"
+          ? mirrorTerraswapLpBalance
+          : findStaking(StakingKey.LPSTAKABLE, token),
     }[type])
 
   /* form:validate */
@@ -91,10 +101,15 @@ const PoolForm = ({ type }: Props) => {
 
   /* estimate:uusd */
   const balance = getBalance(token)
-  const { pair, lpToken } = whitelist[token] ?? {}
+  const { mirrorTerraswap } = useNetwork()
+  const { pair, lpToken } = isMIR ? mirrorTerraswap : whitelist[token] ?? {}
 
   /* estimate:result */
-  const pool = token ? getPool({ amount, token }) : undefined
+  const pool = token
+    ? isMIR
+      ? getMirrorTerraswapPool?.(amount)
+      : getPool({ amount, token })
+    : undefined
   const toLP = pool?.toLP
   const fromLP = pool?.fromLP
   const estimated = pool?.toLP.estimated
@@ -141,12 +156,12 @@ const PoolForm = ({ type }: Props) => {
     </Link>
   )
 
-  const info = (
+  const info = symbol ? (
     <>
       {symbol} can be {linkToBuy}
       {symbol !== "MIR" && <> or {linkToBorrow}</>}
     </>
-  )
+  ) : null
 
   const fields = {
     ...getFields({
@@ -260,7 +275,11 @@ const PoolForm = ({ type }: Props) => {
 
   /* result */
   const parseTx = usePoolReceipt(type)
-  const label = autoStake ? "Farm" : "Provide liquidity"
+  const label = withdraw
+    ? "Withdraw liquidity"
+    : autoStake
+    ? "Farm"
+    : "Provide liquidity"
   const container = { attrs, contents, disabled, data, parseTx, label }
   const tax = { pretax: uusd, deduct: withdraw, gasAdjust: 1.5 }
 
diff --git a/src/forms/StakeForm.tsx b/src/forms/StakeForm.tsx
index c01361e..bb9d99f 100644
--- a/src/forms/StakeForm.tsx
+++ b/src/forms/StakeForm.tsx
@@ -26,6 +26,7 @@ import usePool from "./modules/usePool"
 import FormContainer from "./modules/FormContainer"
 import FormIcon from "./modules/FormIcon"
 import useMirrorTerraswapPool from "./modules/useMirrorTerraswapPool"
+import useMirrorAstroportPool from "./modules/useMirrorAstroportPool"
 
 enum Key {
   value = "value",
@@ -61,10 +62,12 @@ const StakeForm = ({ type, tab, gov, ...props }: Props) => {
 
   const getPool = usePool()
   const getMirrorTerraswapPool = useMirrorTerraswapPool()
+  const getMirrorAstroportPool = useMirrorAstroportPool()
   const { data: astroLpStakedBalance = "0" } = useAstroLpStakedBalance()
 
   const isAstroport = state?.astroport
   const isTerraswapMIR = !gov && getSymbol(token) === "MIR" && !isAstroport
+  const isAstroportMIR = !gov && getSymbol(token) === "MIR" && isAstroport
 
   const getBalance = (token: string) =>
     (!gov
@@ -118,6 +121,8 @@ const StakeForm = ({ type, tab, gov, ...props }: Props) => {
   const pool = token
     ? isTerraswapMIR
       ? getMirrorTerraswapPool?.(amount)
+      : isAstroportMIR
+      ? getMirrorAstroportPool?.(amount)
       : getPool({ amount, token })
     : undefined
   const fromLP = pool?.fromLP
@@ -151,15 +156,21 @@ const StakeForm = ({ type, tab, gov, ...props }: Props) => {
 
   /* submit */
   const newContractMsg = useNewContractMsg()
-  const { mirrorTerraswap } = useNetwork()
+  const { mirrorTerraswap, mirrorAstroport } = useNetwork()
   const tokenContracts = whitelist[token] ?? {}
 
   // For MIR
   // 1. Terraswap: Use contracts of Terraswap pair and lp token
   // 2. Astroport: Use contract of Astroport generator
-  const pair = isTerraswapMIR ? mirrorTerraswap.pair : tokenContracts.pair
+  const pair = isTerraswapMIR
+    ? mirrorTerraswap.pair
+    : isAstroportMIR
+    ? mirrorAstroport.pair
+    : tokenContracts.pair
   const lpToken = isTerraswapMIR
     ? mirrorTerraswap.lpToken
+    : isAstroportMIR
+    ? mirrorAstroport.lpToken
     : tokenContracts.lpToken
 
   const assetToken = { asset_token: token }
@@ -221,16 +232,18 @@ const StakeForm = ({ type, tab, gov, ...props }: Props) => {
     !gov && type === StakeType.UNSTAKE && !withdraw ? "Unbond" : undefined
 
   /* result */
-  const linkAfterTx = isTerraswapMIR
-    ? {
-        to: {
-          pathname: getPath(MenuKey.FARM),
-          hash: FarmType.LONG,
-          state: { token },
-        },
-        children: "Stake to Astroport",
-      }
-    : undefined
+  const showStakeToAstroport = false
+  const linkAfterTx =
+    showStakeToAstroport && isTerraswapMIR
+      ? {
+          to: {
+            pathname: getPath(MenuKey.FARM),
+            hash: FarmType.LONG,
+            state: { token },
+          },
+          children: "Stake to Astroport",
+        }
+      : undefined
 
   const parseTx = useStakeReceipt(type, !!gov)
 
diff --git a/src/forms/modules/useMirrorAstroportLpBalance.ts b/src/forms/modules/useMirrorAstroportLpBalance.ts
new file mode 100644
index 0000000..e1fe401
--- /dev/null
+++ b/src/forms/modules/useMirrorAstroportLpBalance.ts
@@ -0,0 +1,20 @@
+import { useQuery } from "react-query"
+import { useLCDClient } from "@terra-money/wallet-provider"
+import { useAddress, useNetwork } from "../../hooks"
+
+const useMirrorAstroportLpBalance = () => {
+  const address = useAddress()
+  const lcd = useLCDClient()
+  const { mirrorAstroport } = useNetwork()
+  const { lpToken } = mirrorAstroport
+
+  return useQuery(["MirrorAstroportLpBalance", address], async () => {
+    const { balance } = await lcd.wasm.contractQuery<Balance>(lpToken, {
+      balance: { address },
+    })
+
+    return balance
+  })
+}
+
+export default useMirrorAstroportLpBalance
diff --git a/src/forms/modules/useMirrorAstroportPool.ts b/src/forms/modules/useMirrorAstroportPool.ts
new file mode 100644
index 0000000..24799e1
--- /dev/null
+++ b/src/forms/modules/useMirrorAstroportPool.ts
@@ -0,0 +1,73 @@
+import { useQuery } from "react-query"
+import { useLCDClient } from "@terra-money/wallet-provider"
+import { times, floor, gt, plus } from "../../libs/math"
+import { format, formatAsset } from "../../libs/parse"
+import calc from "../../libs/calc"
+import { useProtocol } from "../../data/contract/protocol"
+import { useNetwork } from "../../hooks"
+import { calcPairPrice, parsePairPool } from "../../data/contract/normalize"
+
+const useMirrorAstroportPool = () => {
+  const lcd = useLCDClient()
+  const { getToken, getSymbol } = useProtocol()
+  const { mirrorAstroport } = useNetwork()
+  const { pair } = mirrorAstroport
+  const { data: pairs } = useQuery("MirrorAstroportPool", () =>
+    lcd.wasm.contractQuery<PairPool>(pair, { pool: {} })
+  )
+
+  const token = getToken("MIR")
+
+  if (!pairs) return
+  const price = calcPairPrice(pairs)
+
+  /**
+   * @param amount - Amount to provide(asset)/withdraw(lp)
+   * @param token - Token of the asset to provide/withdraw
+   */
+  return (amount: string) => {
+    /* pair pool */
+    const pairPool = parsePairPool(pairs)
+
+    /* estimate uusd */
+    const estimated = gt(amount, 0) ? floor(times(amount, price)) : "0"
+
+    /* to lp */
+    const deposits = [
+      { amount, pair: pairPool.asset },
+      { amount: estimated, pair: pairPool.uusd },
+    ]
+
+    const toLP = calc.toLP(deposits, pairPool.total)
+
+    /* from lp */
+    const shares = {
+      asset: { amount: pairPool.asset, token },
+      uusd: { amount: pairPool.uusd, token: "uusd" },
+    }
+
+    const fromLP = calc.fromLP(amount, shares, pairPool.total)
+    const assetValueFromLP = times(price, fromLP.asset.amount)
+    const valueFromLP = plus(assetValueFromLP, fromLP.uusd.amount)
+
+    return {
+      toLP: {
+        estimated,
+        value: toLP,
+        text: gt(estimated, 0) ? format(estimated, "uusd") : "0",
+      },
+
+      fromLP: {
+        ...fromLP,
+        value: valueFromLP,
+        text: fromLP
+          ? [fromLP.asset, fromLP.uusd]
+              .map(({ amount, token }) => formatAsset(amount, getSymbol(token)))
+              .join(" + ")
+          : "0",
+      },
+    }
+  }
+}
+
+export default useMirrorAstroportPool
diff --git a/src/forms/modules/useMirrorTerraswapLpBalance.ts b/src/forms/modules/useMirrorTerraswapLpBalance.ts
new file mode 100644
index 0000000..5324ff9
--- /dev/null
+++ b/src/forms/modules/useMirrorTerraswapLpBalance.ts
@@ -0,0 +1,24 @@
+import { useQuery } from "react-query"
+import { useLCDClient } from "@terra-money/wallet-provider"
+import { useAddress, useNetwork } from "../../hooks"
+
+const useMirrorTerraswapLpBalance = () => {
+  const address = useAddress()
+  const lcd = useLCDClient()
+  const { mirrorTerraswap } = useNetwork()
+  const { lpToken } = mirrorTerraswap
+
+  return useQuery(["MirrorTerraswapLpBalance", address], async () => {
+    if (address && address !== "") {
+      const { balance } = await lcd.wasm.contractQuery<Balance>(lpToken, {
+        balance: { address },
+      })
+
+      return balance
+    } else {
+      return undefined
+    }
+  })
+}
+
+export default useMirrorTerraswapLpBalance
diff --git a/src/lang/Tooltips.json b/src/lang/Tooltips.json
index ce7ec4d..1beefc8 100644
--- a/src/lang/Tooltips.json
+++ b/src/lang/Tooltips.json
@@ -79,7 +79,8 @@
     "OrderValue": "Value of the limit order",
     "TotalLockedValue": "Total value of assets locked in unfilled limit orders",
 
-    "MigrationRequired": "Terraswap LP for this token is not supported on Mirror Protocol anymore. Withdraw and provide liquidity again in order to receive farming reward"
+    "IsTerraswapMIR": "Terraswap v1 MIR-USTC LP - no farming rewards offered since the 2021 migration to Astroport MIR-USTC pool (however Astroport pools became dysfunctional in June 2023)",
+    "Astroport": "Astroport pools have been broken since June 2023"
   },
 
   "Forms": {
@@ -139,6 +140,11 @@
     "LPfromTx": "Quantity of LP tokens to be received"
   },
 
+  "Pool": {
+    "Provide": "Provide liquidity",
+    "Withdraw": "Withdraw liquidity"
+  },
+
   "Gov": {
     "TotalStaked": "Total quantity of MIR tokens staked",
     "StakingRatio": "Ratio of the quantity of staked MIR tokens to the total quantity of MIR",
diff --git a/src/pages/Farm/FarmList.tsx b/src/pages/Farm/FarmList.tsx
index 7fbe3a0..2e19a45 100644
--- a/src/pages/Farm/FarmList.tsx
+++ b/src/pages/Farm/FarmList.tsx
@@ -3,6 +3,7 @@ import { minus, max, number } from "../../libs/math"
 import { PriceKey } from "../../hooks/contractKeys"
 import { useProtocol } from "../../data/contract/protocol"
 import { useTerraAssetList } from "../../data/list"
+import { getPath, MenuKey } from "../../routes"
 import Table from "../../components/Table"
 import Percent from "../../components/Percent"
 import AssetItem from "../../components/AssetItem"
@@ -11,7 +12,7 @@ import Formatted from "../../components/Formatted"
 import { TooltipIcon } from "../../components/Tooltip"
 import AssetsIdleTable from "../../containers/AssetsIdleTable"
 import useListFilter, { Sorter } from "../../components/useListFilter"
-import { FarmType } from "../../types/Types"
+import { FarmType, PoolType } from "../../types/Types"
 import styles from "./FarmList.module.scss"
 
 const Sorters: Dictionary<Sorter> = {
@@ -86,7 +87,11 @@ const FarmList = () => {
               ),
               cell: (_, { token, recommended }) => ({
                 background: recommended === "long" ? "darker" : undefined,
-                to: { hash: FarmType.LONG, state: { token } },
+                to: {
+                  pathname: getPath(MenuKey.POOL),
+                  hash: PoolType.PROVIDE,
+                  state: { token },
+                },
               }),
               align: "left",
             },
diff --git a/src/pages/My/Farming.tsx b/src/pages/My/Farming.tsx
index 7e80d4f..5bc6700 100644
--- a/src/pages/My/Farming.tsx
+++ b/src/pages/My/Farming.tsx
@@ -53,7 +53,9 @@ const Farming = () => {
           description={description}
         />
       }
-      rowKey={({ token, migrationRequired }) => token + migrationRequired}
+      rowKey={({ token, isTerraswapMIR, isAstroport }) =>
+        token + isTerraswapMIR + isAstroport
+      }
       columns={[
         {
           key: "symbol",
@@ -61,19 +63,26 @@ const Farming = () => {
             "Pool Name",
             <TooltipIcon content={Tooltips.My.APR}>APR</TooltipIcon>,
           ],
-          render: (symbol, { migrationRequired, delisted, apr }) => [
+          render: (symbol, { isTerraswapMIR, isAstroport, delisted, apr }) => [
             <>
-              {migrationRequired && (
+              {isTerraswapMIR && (
+                <Delisted>
+                  <TooltipIcon content={Tooltips.My.IsTerraswapMIR}>
+                    Terraswap MIR-USTC
+                  </TooltipIcon>
+                </Delisted>
+              )}
+              {isAstroport && (
                 <Delisted>
-                  <TooltipIcon content={Tooltips.My.MigrationRequired}>
-                    Migration required
+                  <TooltipIcon content={Tooltips.My.Astroport}>
+                    Astroport
                   </TooltipIcon>
                 </Delisted>
               )}
               {delisted && <Delisted />}
               {getLpName(symbol)}
             </>,
-            migrationRequired ? (
+            isTerraswapMIR ? (
               <Percent>0</Percent>
             ) : (
               apr && <Percent>{apr}</Percent>
@@ -128,14 +137,18 @@ const Farming = () => {
         {
           key: "actions",
           dataIndex: "token",
-          render: (token, { migrationRequired }) => {
+          render: (token, { isTerraswapMIR, isAstroport }) => {
             const to = {
               pathname: getPath(MenuKey.STAKE),
               hash: StakeType.UNSTAKE,
             }
 
             const isMirror = getSymbol(token) === "MIR"
-            const astroport = isMirror && !migrationRequired
+            const isAstroport2 = isMirror && !isTerraswapMIR
+            if (isAstroport !== isAstroport2)
+              console.warn("warning: isAstroport !== isAstroport2")
+            const astroport = isAstroport && isAstroport2
+            // If there is an inconsistency, assume Terraswap
 
             return (
               <>
diff --git a/src/pages/My/Pool.tsx b/src/pages/My/Pool.tsx
index b729299..d97d667 100644
--- a/src/pages/My/Pool.tsx
+++ b/src/pages/My/Pool.tsx
@@ -10,7 +10,7 @@ import { TooltipIcon } from "../../components/Tooltip"
 import Delisted from "../../components/Delisted"
 import LinkButton from "../../components/LinkButton"
 import Formatted from "../../components/Formatted"
-import { StakeType } from "../../types/Types"
+import { StakeType, PoolType } from "../../types/Types"
 import CaptionData from "./CaptionData"
 
 const Pool = () => {
@@ -28,17 +28,26 @@ const Pool = () => {
           description={description}
         />
       }
-      rowKey={({ token, migrationRequired }) => token + migrationRequired}
+      rowKey={({ token, isTerraswapMIR, isAstroport }) =>
+        token + isTerraswapMIR + isAstroport
+      }
       columns={[
         {
           key: "symbol",
           title: "Pool Name",
-          render: (symbol, { migrationRequired, delisted }) => (
+          render: (symbol, { isTerraswapMIR, isAstroport, delisted }) => (
             <>
-              {migrationRequired && (
+              {isTerraswapMIR && (
+                <Delisted>
+                  <TooltipIcon content={Tooltips.My.IsTerraswapMIR}>
+                    Terraswap MIR-USTC
+                  </TooltipIcon>
+                </Delisted>
+              )}
+              {isAstroport && (
                 <Delisted>
-                  <TooltipIcon content={Tooltips.My.MigrationRequired}>
-                    Migration required
+                  <TooltipIcon content={Tooltips.My.Astroport}>
+                    Astroport
                   </TooltipIcon>
                 </Delisted>
               )}
@@ -79,20 +88,36 @@ const Pool = () => {
         {
           key: "actions",
           dataIndex: "token",
-          render: (token) => {
-            if (getSymbol(token) === "MIR") return null
+          render: (token, { isTerraswapMIR }) => {
             return (
-              <LinkButton
-                to={{
-                  pathname: getPath(MenuKey.STAKE),
-                  hash: StakeType.STAKE,
-                  state: { token },
-                }}
-                size="xs"
-                outline
-              >
-                {MenuKey.STAKE}
-              </LinkButton>
+              <>
+                {getSymbol(token) !== "MIR" && (
+                  <LinkButton
+                    to={{
+                      pathname: getPath(MenuKey.STAKE),
+                      hash: StakeType.STAKE,
+                      state: { token },
+                    }}
+                    size="xs"
+                    outline
+                  >
+                    {MenuKey.STAKE}
+                  </LinkButton>
+                )}
+                {(getSymbol(token) !== "MIR" || isTerraswapMIR) && (
+                  <LinkButton
+                    to={{
+                      pathname: getPath(MenuKey.POOL),
+                      hash: PoolType.WITHDRAW,
+                      state: { token },
+                    }}
+                    size="xs"
+                    outline
+                  >
+                    Withdraw
+                  </LinkButton>
+                )}
+              </>
             )
           },
           align: "right",
diff --git a/src/pages/Pool/Pool.tsx b/src/pages/Pool/Pool.tsx
new file mode 100644
index 0000000..bdb6403
--- /dev/null
+++ b/src/pages/Pool/Pool.tsx
@@ -0,0 +1,22 @@
+import Tooltips from "../../lang/Tooltips"
+import useHash from "../../libs/useHash"
+import Page from "../../components/Page"
+import Tab from "../../components/Tab"
+import PoolForm from "../../forms/PoolForm"
+import { PoolType } from "../../types/Types"
+const Pool = () => {
+  let { hash: type } = useHash<PoolType>()
+  if (!type) type = PoolType.PROVIDE
+  return (
+    <Page title="Pool">
+      <Tab
+        tabs={[PoolType.PROVIDE, PoolType.WITHDRAW]}
+        tooltips={[Tooltips.Pool.Provide, Tooltips.Pool.Withdraw]}
+        current={type}
+      >
+        <PoolForm type={type} />
+      </Tab>
+    </Page>
+  )
+}
+export default Pool
diff --git a/src/routes.tsx b/src/routes.tsx
index e7beb79..0ea540b 100644
--- a/src/routes.tsx
+++ b/src/routes.tsx
@@ -12,6 +12,7 @@ import Send from "./pages/Txs/Send"
 import Burn from "./pages/Txs/Burn"
 import Mint from "./pages/Mint/Mint"
 import Close from "./pages/Mint/Close"
+import Pool from "./pages/Pool/Pool"
 import Stake from "./pages/Stake/Stake"
 import ClaimRewards from "./pages/Txs/ClaimRewards"
 import ClaimMirrorRewards from "./pages/Txs/ClaimMirrorRewards"
@@ -38,6 +39,7 @@ export enum MenuKey {
   BURN = "Burn",
   MINT = "Mint",
   CLOSE = "Close",
+  POOL = "Pool",
   STAKE = "Stake",
   CLAIMREWARDS = "Claim Rewards",
   CLAIMMIRRORREWARDS = "Claim Mirror Rewards",
@@ -57,6 +59,7 @@ export const menu: Dictionary<RouteProps> = {
   [MenuKey.BURN]: { path: "/burn/:token", component: Burn },
   [MenuKey.MINT]: { path: "/mint", component: Mint },
   [MenuKey.CLOSE]: { path: "/close", component: Close },
+  [MenuKey.POOL]: { path: "/pool", component: Pool },
   [MenuKey.STAKE]: { path: "/stake", component: Stake },
   [MenuKey.CLAIMREWARDS]: { path: "/claim/rewards", component: ClaimRewards },
   [MenuKey.CLAIMMIRRORREWARDS]: {
