diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml
index 7e24fc10..68a54d05 100644
--- a/.github/workflows/node.js.yml
+++ b/.github/workflows/node.js.yml
@@ -30,6 +30,20 @@ jobs:
         run: npm ci
       - name: Test
         run: npm run ci:test
+      - name: Dev deployment
+        run: npm run aave:evm:dev:migration
+      - name: Mainnet deployment at Mainnet fork
+        run: npm run aave:fork:main
+        env:
+          ALCHEMY_KEY: ${{ secrets.ALCHEMY_KEY }}
+      - name: Amm deployment at Mainnet fork
+        run: npm run amm:fork:main
+        env:
+          ALCHEMY_KEY: ${{ secrets.ALCHEMY_KEY }}
+      - name: Aave deployment at Kovan fork
+        run: npm run aave:fork:kovan
+        env:
+          ALCHEMY_KEY: ${{ secrets.ALCHEMY_KEY }}
       # - name: Coverage
       #   run: npm run coverage
       # - uses: codecov/codecov-action@v1
diff --git a/hardhat.config.ts b/hardhat.config.ts
index 3eaba7c0..94e646a9 100644
--- a/hardhat.config.ts
+++ b/hardhat.config.ts
@@ -5,7 +5,7 @@ import { HardhatUserConfig } from 'hardhat/types';
 import { accounts } from './test-wallets.js';
 import { eEthereumNetwork, eNetwork, ePolygonNetwork, eXDaiNetwork } from './helpers/types';
 import { BUIDLEREVM_CHAINID, COVERAGE_CHAINID } from './helpers/buidler-constants';
-import { NETWORKS_RPC_URL, NETWORKS_DEFAULT_GAS } from './helper-hardhat-config';
+import { NETWORKS_RPC_URL, NETWORKS_DEFAULT_GAS, BLOCK_TO_FORK } from './helper-hardhat-config';
 
 require('dotenv').config();
 
@@ -24,7 +24,7 @@ const HARDFORK = 'istanbul';
 const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || '';
 const MNEMONIC_PATH = "m/44'/60'/0'/0";
 const MNEMONIC = process.env.MNEMONIC || '';
-const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
+const FORK = process.env.FORK || '';
 
 // Prevent to load scripts before compilation and typechain
 if (!SKIP_LOAD) {
@@ -57,10 +57,13 @@ const getCommonNetworkConfig = (networkName: eNetwork, networkId: number) => ({
   },
 });
 
-const mainnetFork = MAINNET_FORK
+const forkMode = FORK
   ? {
-      blockNumber: 12012081,
-      url: NETWORKS_RPC_URL['main'],
+      url: NETWORKS_RPC_URL[FORK],
+      ...(FORK &&
+        BLOCK_TO_FORK[FORK] && {
+          blockNumber: BLOCK_TO_FORK[FORK],
+        }),
     }
   : undefined;
 
@@ -111,7 +114,7 @@ const buidlerConfig: HardhatUserConfig = {
         privateKey: secretKey,
         balance,
       })),
-      forking: mainnetFork,
+      forking: forkMode,
     },
     buidlerevm_docker: {
       hardfork: 'berlin',
diff --git a/helper-hardhat-config.ts b/helper-hardhat-config.ts
index 1043fec2..5b903000 100644
--- a/helper-hardhat-config.ts
+++ b/helper-hardhat-config.ts
@@ -34,7 +34,7 @@ export const NETWORKS_RPC_URL: iParamsPerNetwork<string> = {
 };
 
 export const NETWORKS_DEFAULT_GAS: iParamsPerNetwork<number> = {
-  [eEthereumNetwork.kovan]: 65 * GWEI,
+  [eEthereumNetwork.kovan]: 1 * GWEI,
   [eEthereumNetwork.ropsten]: 65 * GWEI,
   [eEthereumNetwork.main]: 65 * GWEI,
   [eEthereumNetwork.coverage]: 65 * GWEI,
@@ -45,3 +45,16 @@ export const NETWORKS_DEFAULT_GAS: iParamsPerNetwork<number> = {
   [ePolygonNetwork.matic]: 1 * GWEI,
   [eXDaiNetwork.xdai]: 1 * GWEI,
 };
+
+export const BLOCK_TO_FORK: iParamsPerNetwork<number | undefined> = {
+  [eEthereumNetwork.main]: 12406069,
+  [eEthereumNetwork.kovan]: undefined,
+  [eEthereumNetwork.ropsten]: undefined,
+  [eEthereumNetwork.coverage]: undefined,
+  [eEthereumNetwork.hardhat]: undefined,
+  [eEthereumNetwork.buidlerevm]: undefined,
+  [eEthereumNetwork.tenderlyMain]: 12406069,
+  [ePolygonNetwork.mumbai]: undefined,
+  [ePolygonNetwork.matic]: undefined,
+  [eXDaiNetwork.xdai]: undefined,
+};
diff --git a/helpers/configuration.ts b/helpers/configuration.ts
index 2dc73f5a..9b21d08d 100644
--- a/helpers/configuration.ts
+++ b/helpers/configuration.ts
@@ -61,7 +61,7 @@ export const getReservesConfigByPool = (pool: AavePools): iMultiPoolsAssets<IRes
 export const getGenesisPoolAdmin = async (
   config: ICommonConfiguration
 ): Promise<tEthereumAddress> => {
-  const currentNetwork = process.env.MAINNET_FORK === 'true' ? 'main' : DRE.network.name;
+  const currentNetwork = process.env.FORK ? process.env.FORK : DRE.network.name;
   const targetAddress = getParamPerNetwork(config.PoolAdmin, <eNetwork>currentNetwork);
   if (targetAddress) {
     return targetAddress;
@@ -76,7 +76,7 @@ export const getGenesisPoolAdmin = async (
 export const getEmergencyAdmin = async (
   config: ICommonConfiguration
 ): Promise<tEthereumAddress> => {
-  const currentNetwork = process.env.MAINNET_FORK === 'true' ? 'main' : DRE.network.name;
+  const currentNetwork = process.env.FORK ? process.env.FORK : DRE.network.name;
   const targetAddress = getParamPerNetwork(config.EmergencyAdmin, <eNetwork>currentNetwork);
   if (targetAddress) {
     return targetAddress;
@@ -91,7 +91,7 @@ export const getEmergencyAdmin = async (
 export const getTreasuryAddress = async (
   config: ICommonConfiguration
 ): Promise<tEthereumAddress> => {
-  const currentNetwork = process.env.MAINNET_FORK === 'true' ? 'main' : DRE.network.name;
+  const currentNetwork = process.env.FORK ? process.env.FORK : DRE.network.name;
   return getParamPerNetwork(config.ReserveFactorTreasuryAddress, <eNetwork>currentNetwork);
 };
 
@@ -101,7 +101,7 @@ export const getATokenDomainSeparatorPerNetwork = (
 ): tEthereumAddress => getParamPerNetwork<tEthereumAddress>(config.ATokenDomainSeparator, network);
 
 export const getWethAddress = async (config: ICommonConfiguration) => {
-  const currentNetwork = process.env.MAINNET_FORK === 'true' ? 'main' : DRE.network.name;
+  const currentNetwork = process.env.FORK ? process.env.FORK : DRE.network.name;
   const wethAddress = getParamPerNetwork(config.WETH, <eNetwork>currentNetwork);
   if (wethAddress) {
     return wethAddress;
@@ -133,8 +133,7 @@ export const getLendingRateOracles = (poolConfig: ICommonConfiguration) => {
     ReserveAssets,
   } = poolConfig;
 
-  const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
-  const network = MAINNET_FORK ? 'main' : DRE.network.name;
+  const network = process.env.FORK ? process.env.FORK : DRE.network.name;
   return filterMapBy(LendingRateOracleRatesCommon, (key) =>
     Object.keys(ReserveAssets[network]).includes(key)
   );
diff --git a/helpers/contracts-helpers.ts b/helpers/contracts-helpers.ts
index a7f1df03..d9f73638 100644
--- a/helpers/contracts-helpers.ts
+++ b/helpers/contracts-helpers.ts
@@ -34,8 +34,8 @@ export type MockTokenMap = { [symbol: string]: MintableERC20 };
 
 export const registerContractInJsonDb = async (contractId: string, contractInstance: Contract) => {
   const currentNetwork = DRE.network.name;
-  const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
-  if (MAINNET_FORK || (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage'))) {
+  const FORK = process.env.FORK;
+  if (FORK || (currentNetwork !== 'hardhat' && !currentNetwork.includes('coverage'))) {
     console.log(`*** ${contractId} ***\n`);
     console.log(`Network: ${currentNetwork}`);
     console.log(`tx: ${contractInstance.deployTransaction.hash}`);
@@ -147,9 +147,8 @@ export const getParamPerNetwork = <T>(param: iParamsPerNetwork<T>, network: eNet
   } = param as iEthereumParamsPerNetwork<T>;
   const { matic, mumbai } = param as iPolygonParamsPerNetwork<T>;
   const { xdai } = param as iXDaiParamsPerNetwork<T>;
-  const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
-  if (MAINNET_FORK) {
-    return main;
+  if (process.env.FORK) {
+    return param[process.env.FORK as eNetwork] as T;
   }
 
   switch (network) {
diff --git a/helpers/init-helpers.ts b/helpers/init-helpers.ts
index 4ac89d78..4dee6fa0 100644
--- a/helpers/init-helpers.ts
+++ b/helpers/init-helpers.ts
@@ -17,7 +17,7 @@ import {
   getContractAddressWithJsonFallback,
   rawInsertContractAddressInDb,
 } from './contracts-helpers';
-import { BigNumber, BigNumberish, Signer } from 'ethers';
+import { BigNumberish } from 'ethers';
 import { deployDefaultReserveInterestRateStrategy } from './contracts-deployments';
 import { ConfigNames } from './configuration';
 
@@ -76,6 +76,10 @@ export const initReservesByHelper = async (
   const reserves = Object.entries(reservesParams);
 
   for (let [symbol, params] of reserves) {
+    if (!tokenAddresses[symbol]) {
+      console.log(`- Skipping init of ${symbol} due token address is not set at markets config`);
+      continue;
+    }
     const { strategy, aTokenImpl, reserveDecimals } = params;
     const {
       optimalUtilizationRate,
@@ -207,6 +211,12 @@ export const configureReservesByHelper = async (
       borrowingEnabled,
     },
   ] of Object.entries(reservesParams) as [string, IReserveParams][]) {
+    if (!tokenAddresses[assetSymbol]) {
+      console.log(
+        `- Skipping init of ${assetSymbol} due token address is not set at markets config`
+      );
+      continue;
+    }
     if (baseLTVAsCollateral === '-1') continue;
 
     const assetAddressIndex = Object.keys(tokenAddresses).findIndex(
diff --git a/helpers/oracles-helpers.ts b/helpers/oracles-helpers.ts
index 6ec8827a..9fd2ba44 100644
--- a/helpers/oracles-helpers.ts
+++ b/helpers/oracles-helpers.ts
@@ -72,9 +72,6 @@ export const setInitialAssetPricesInOracle = async (
   priceOracleInstance: PriceOracle
 ) => {
   for (const [assetSymbol, price] of Object.entries(prices) as [string, string][]) {
-
-    console.log("Trying for ", assetsAddresses, assetSymbol);
-    
     const assetAddressIndex = Object.keys(assetsAddresses).findIndex(
       (value) => value === assetSymbol
     );
diff --git a/markets/aave/commons.ts b/markets/aave/commons.ts
index 7921d992..134e37eb 100644
--- a/markets/aave/commons.ts
+++ b/markets/aave/commons.ts
@@ -93,6 +93,9 @@ export const CommonsConfig: ICommonConfiguration = {
     UNI: {
       borrowRate: oneRay.multipliedBy(0.03).toFixed(),
     },
+    ENJ: {
+      borrowRate: oneRay.multipliedBy(0.03).toFixed(),
+    },
     BUSD: {
       borrowRate: oneRay.multipliedBy(0.05).toFixed(),
     },
@@ -135,11 +138,11 @@ export const CommonsConfig: ICommonConfiguration = {
   ProviderRegistryOwner: {
     [eEthereumNetwork.kovan]: '0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F',
     [eEthereumNetwork.ropsten]: '',
-    [eEthereumNetwork.main]: '0xbd723fc4f1d737dcfc48a07fe7336766d34cad5f',
+    [eEthereumNetwork.main]: '0xB9062896ec3A615a4e4444DF183F0531a77218AE',
     [eEthereumNetwork.coverage]: '',
     [eEthereumNetwork.hardhat]: '',
     [eEthereumNetwork.buidlerevm]: '',
-    [eEthereumNetwork.tenderlyMain]: '0xbd723fc4f1d737dcfc48a07fe7336766d34cad5f',
+    [eEthereumNetwork.tenderlyMain]: '0xB9062896ec3A615a4e4444DF183F0531a77218AE',
   },
   LendingRateOracle: {
     [eEthereumNetwork.coverage]: '',
@@ -181,7 +184,7 @@ export const CommonsConfig: ICommonConfiguration = {
     [eEthereumNetwork.coverage]: '',
     [eEthereumNetwork.hardhat]: '',
     [eEthereumNetwork.buidlerevm]: '',
-    [eEthereumNetwork.kovan]: '0xf99b8E67a0E044734B01EC4586D1c88C9a869718',
+    [eEthereumNetwork.kovan]: '',
     [eEthereumNetwork.ropsten]: '',
     [eEthereumNetwork.main]: '',
     [eEthereumNetwork.tenderlyMain]: '',
@@ -282,6 +285,7 @@ export const CommonsConfig: ICommonConfiguration = {
       YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4',
       ZRX: '0x2Da4983a622a8498bb1a21FaE9D8F6C664939962',
       USD: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419',
+      xSUSHI: '0x9b26214bEC078E68a394AaEbfbffF406Ce14893F',
     },
     [eEthereumNetwork.tenderlyMain]: {
       AAVE: '0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012',
@@ -304,6 +308,7 @@ export const CommonsConfig: ICommonConfiguration = {
       YFI: '0x7c5d4F8345e66f68099581Db340cd65B078C41f4',
       ZRX: '0x2Da4983a622a8498bb1a21FaE9D8F6C664939962',
       USD: '0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419',
+      xSUSHI: '0x9b26214bEC078E68a394AaEbfbffF406Ce14893F',
     },
   },
   ReserveAssets: {
diff --git a/markets/aave/index.ts b/markets/aave/index.ts
index 9683dbe1..2ff2be79 100644
--- a/markets/aave/index.ts
+++ b/markets/aave/index.ts
@@ -23,6 +23,7 @@ import {
   strategyWETH,
   strategyYFI,
   strategyXSUSHI,
+  strategyENJ,
 } from './reservesConfigs';
 
 // ----------------
@@ -38,7 +39,7 @@ export const AaveConfig: IAaveConfiguration = {
     BAT: strategyBAT,
     BUSD: strategyBUSD,
     DAI: strategyDAI,
-    ENJ: strategyREN,
+    ENJ: strategyENJ,
     KNC: strategyKNC,
     LINK: strategyLINK,
     MANA: strategyMANA,
diff --git a/markets/amm/commons.ts b/markets/amm/commons.ts
index 743ded7f..8be1f2c0 100644
--- a/markets/amm/commons.ts
+++ b/markets/amm/commons.ts
@@ -139,14 +139,13 @@ export const CommonsConfig: ICommonConfiguration = {
     [eEthereumNetwork.tenderlyMain]: '0x52D306e36E3B6B02c153d0266ff0f85d18BCD413',
   },
   ProviderRegistryOwner: {
-    // DEPLOYED WITH CORRECT ADDRESS
     [eEthereumNetwork.kovan]: '0x85e4A467343c0dc4aDAB74Af84448D9c45D8ae6F',
     [eEthereumNetwork.ropsten]: '',
-    [eEthereumNetwork.main]: '0xbd723fc4f1d737dcfc48a07fe7336766d34cad5f',
+    [eEthereumNetwork.main]: '0xB9062896ec3A615a4e4444DF183F0531a77218AE',
     [eEthereumNetwork.coverage]: '',
     [eEthereumNetwork.hardhat]: '',
     [eEthereumNetwork.buidlerevm]: '',
-    [eEthereumNetwork.tenderlyMain]: '0xbd723fc4f1d737dcfc48a07fe7336766d34cad5f',
+    [eEthereumNetwork.tenderlyMain]: '0xB9062896ec3A615a4e4444DF183F0531a77218AE',
   },
   LendingRateOracle: {
     [eEthereumNetwork.coverage]: '',
diff --git a/package-lock.json b/package-lock.json
index accf7a09..6642f59e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12918,19 +12918,17 @@
                 "string.prototype.trimend": "^1.0.4",
                 "string.prototype.trimstart": "^1.0.4",
                 "unbox-primitive": "^1.0.0"
-              },
-              "dependencies": {
-                "get-intrinsic": {
-                  "version": "1.1.1",
-                  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-                  "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-                  "dev": true,
-                  "requires": {
-                    "function-bind": "^1.1.1",
-                    "has": "^1.0.3",
-                    "has-symbols": "^1.0.1"
-                  }
-                }
+              }
+            },
+            "get-intrinsic": {
+              "version": "1.1.1",
+              "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+              "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+              "dev": true,
+              "requires": {
+                "function-bind": "^1.1.1",
+                "has": "^1.0.3",
+                "has-symbols": "^1.0.1"
               }
             }
           }
diff --git a/package.json b/package.json
index 1c56a923..79b60118 100644
--- a/package.json
+++ b/package.json
@@ -17,28 +17,47 @@
     "hardhat:mumbai": "hardhat --network mumbai",
     "hardhat:matic": "hardhat --network matic",
     "compile": "SKIP_LOAD=true hardhat compile",
-    "console:fork": "MAINNET_FORK=true hardhat console",
+    "console:fork": "FORK=main hardhat console",
     "test": "npm run compile && TS_NODE_TRANSPILE_ONLY=1 hardhat test ./test-suites/test-aave/*.spec.ts",
     "test-amm": "npm run compile && TS_NODE_TRANSPILE_ONLY=1 hardhat test ./test-suites/test-amm/*.spec.ts",
     "test-amm-scenarios": "npm run compile && TS_NODE_TRANSPILE_ONLY=1 hardhat test ./test-suites/test-amm/__setup.spec.ts test-suites/test-amm/scenario.spec.ts",
     "test-scenarios": "npm run compile && npx hardhat test test-suites/test-aave/__setup.spec.ts test-suites/test-aave/scenario.spec.ts",
     "test-subgraph:scenarios": "npm run compile && hardhat --network hardhatevm_docker test test-suites/test-aave/__setup.spec.ts test-suites/test-aave/subgraph-scenarios.spec.ts",
-    "test:main:check-list": "npm run compile && MAINNET_FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test  test-suites/test-aave/__setup.spec.ts test-suites/test-aave/mainnet/check-list.spec.ts",
+    "test:main:check-list": "npm run compile && FORK=true TS_NODE_TRANSPILE_ONLY=1 hardhat test  test-suites/test-aave/__setup.spec.ts test-suites/test-aave/mainnet/check-list.spec.ts",
     "dev:coverage": "buidler compile --force && buidler coverage --network coverage",
     "aave:evm:dev:migration": "npm run compile && hardhat aave:dev",
-    "aave:docker:full:migration": "npm run compile && npm run hardhat:docker -- aave:mainnet",
-    "aave:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- aave:mainnet --verify",
-    "matic:mumbai:full:migration": "npm run compile && npm run hardhat:mumbai sidechain:mainnet -- --pool Matic",
-    "matic:matic:full:migration": "npm run compile && npm run hardhat:matic sidechain:mainnet -- --pool Matic",
-    "amm:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- amm:mainnet --verify",
+    "aave:docker:full:migration": "npm run compile && npm run hardhat:docker -- aave:mainnet --skip-registry",
+    "aave:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- aave:mainnet --skip-registry",
+    "matic:mumbai:full:migration": "npm run compile && npm run hardhat:mumbai sidechain:mainnet -- --pool Matic --skip-registry",
+    "matic:matic:full:migration": "npm run compile && npm run hardhat:matic sidechain:mainnet -- --pool Matic --skip-registry",
+    "amm:kovan:full:migration": "npm run compile && npm run hardhat:kovan -- amm:mainnet --skip-registry",
+    "aave:docker:full:migration:add-registry": "npm run compile && npm run hardhat:docker -- aave:mainnet",
+    "aave:kovan:full:migration:add-registry": "npm run compile && npm run hardhat:kovan -- aave:mainnet",
+    "matic:mumbai:full:migration:add-registry": "npm run compile && npm run hardhat:mumbai sidechain:mainnet -- --pool Matic",
+    "matic:matic:full:migration:add-registry": "npm run compile && npm run hardhat:matic sidechain:mainnet -- --pool Matic",
+    "amm:kovan:full:migration:add-registry": "npm run compile && npm run hardhat:kovan -- amm:mainnet",
+    "aave:docker:add-market-to-registry-from-config": "npm run compile && npm run hardhat:docker -- add-market-to-registry --pool Aave",
+    "aave:kovan:add-market-to-registry-from-config": "npm run compile && npm run hardhat:kovan -- add-market-to-registry --pool Aave",
+    "matic:mumbai:add-market-to-registry-from-config": "npm run compile && npm run hardhat:mumbai add-market-to-registry --pool Matic",
+    "amm:kovan:add-market-to-registry-from-config": "npm run compile && npm run hardhat:kovan -- add-market-to-registry --pool Amm",
+    "matic:matic:add-market-to-registry-from-config": "npm run compile && npm run hardhat:matic add-market-to-registry --pool Matic",
+    "aave:main:add-market-to-registry-from-config": "npm run compile && npm run hardhat:main -- add-market-to-registry --pool Aave",
+    "aave:docker:add-market-to-new-registry": "npm run compile && npm run hardhat:docker -- add-market-to-registry --pool Aave --deploy-registry",
+    "aave:kovan:add-market-to-new-registry": "npm run compile && npm run hardhat:kovan -- add-market-to-registry --pool Aave --verify --deploy-registry",
+    "matic:mumbai:add-market-to-new-registry": "npm run compile && npm run hardhat:mumbai add-market-to-registry --pool Matic --verify --deploy-registry",
+    "amm:kovan:add-market-to-new-registry": "npm run compile && npm run hardhat:kovan -- add-market-to-registry --pool Amm --verify --deploy-registry",
+    "matic:matic:add-market-to-new-registry": "npm run compile && npm run hardhat:matic -- add-market-to-registry --pool Matic --verify --deploy-registry",
+    "aave:main:add-market-to-new-registry": "npm run compile && npm run hardhat:matic -- add-market-to-registry --pool Matic --verify --deploy-registry",
     "aave:kovan:full:initialize": "npm run hardhat:kovan -- full:initialize-lending-pool --verify --pool Aave",
     "aave:ropsten:full:migration": "npm run compile && npm run hardhat:ropsten -- aave:mainnet --verify",
     "aave:fork:main:tenderly": "npm run compile && npm run hardhat:tenderly-main -- aave:mainnet",
-    "aave:fork:main": "npm run compile && MAINNET_FORK=true hardhat aave:mainnet",
-    "amm:fork:main": "npm run compile && MAINNET_FORK=true hardhat amm:mainnet",
+    "aave:fork:main": "npm run compile && FORK=main hardhat aave:mainnet",
+    "aave:fork:kovan": "npm run compile && FORK=kovan hardhat aave:mainnet",
+    "amm:fork:main": "npm run compile && FORK=main hardhat amm:mainnet",
+    "amm:fork:kovan": "npm run compile && FORK=kovan hardhat amm:mainnet",
     "amm:fork:main:tenderly": "npm run compile && npm run hardhat:tenderly-main -- amm:mainnet",
     "aave:main:full:migration": "npm run compile && npm run hardhat:main -- aave:mainnet --verify",
-    "aave:main:full:initialize": "npm run compile && MAINNET_FORK=true full:initialize-tokens --pool Aave",
+    "aave:main:full:initialize": "npm run compile && FORK=main full:initialize-tokens --pool Aave",
     "amm:main:full:migration": "npm run compile && npm run hardhat:main -- amm:mainnet --verify",
     "prettier:check": "npx prettier -c 'tasks/**/*.ts' 'contracts/**/*.sol' 'helpers/**/*.ts'  'test-suites/test-aave/**/*.ts'",
     "prettier:write": "prettier --write 'tasks/**/*.ts' 'contracts/**/*.sol' 'helpers/**/*.ts'  'test-suites/test-aave/**/*.ts'",
@@ -65,7 +84,7 @@
     "kovan:verify:tokens": "npm run hardhat:kovan verify:tokens -- --pool Aave",
     "ropsten:verify:tokens": "npm run hardhat:ropsten verify:tokens -- --pool Aave",
     "mainnet:verify:tokens": "npm run hardhat:main verify:tokens -- --pool Aave",
-    "print-config:fork:mainnet": "MAINNET_FORK=true hardhat print-config:fork",
+    "print-config:fork:mainnet": "FORK=main hardhat print-config:fork",
     "print-config:kovan": "hardhat --network kovan print-config --pool Aave --data-provider 0xA1901785c29cBd48bfA74e46b67C736b26054fa4",
     "external:deploy-assets-kovan": "npm run compile && hardhat --network kovan external:deploy-new-asset --symbol ${SYMBOL} --verify",
     "external:deploy-assets-main": "npm run compile && hardhat --network main external:deploy-new-asset --symbol ${SYMBOL} --verify",
diff --git a/tasks/deployments/add-market-to-registry.ts b/tasks/deployments/add-market-to-registry.ts
new file mode 100644
index 00000000..0e1d4b68
--- /dev/null
+++ b/tasks/deployments/add-market-to-registry.ts
@@ -0,0 +1,96 @@
+import { task } from 'hardhat/config';
+import { getParamPerNetwork } from '../../helpers/contracts-helpers';
+import { waitForTx } from '../../helpers/misc-utils';
+import { ConfigNames, loadPoolConfig } from '../../helpers/configuration';
+import { eNetwork } from '../../helpers/types';
+import {
+  getFirstSigner,
+  getLendingPoolAddressesProvider,
+  getLendingPoolAddressesProviderRegistry,
+} from '../../helpers/contracts-getters';
+import { isAddress, parseEther } from 'ethers/lib/utils';
+import { isZeroAddress } from 'ethereumjs-util';
+import { Signer } from 'ethers';
+import { exit } from 'process';
+
+task('add-market-to-registry', 'Adds address provider to registry')
+  .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
+  .addOptionalParam('addressesProvider', `Address of LendingPoolAddressProvider`)
+  .addFlag('verify', 'Verify contracts at Etherscan')
+  .addFlag('deployRegistry', 'Deploy a new address provider registry')
+  .setAction(async ({ verify, addressesProvider, pool, deployRegistry }, DRE) => {
+    await DRE.run('set-DRE');
+    let signer: Signer;
+    const network = <eNetwork>DRE.network.name;
+    const poolConfig = loadPoolConfig(pool);
+    const { ProviderId } = poolConfig;
+
+    let providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network);
+    let providerRegistryOwner = getParamPerNetwork(poolConfig.ProviderRegistryOwner, network);
+    const currentSignerAddress = await (
+      await (await getFirstSigner()).getAddress()
+    ).toLocaleLowerCase();
+    let deployed = false;
+
+    if (
+      deployRegistry ||
+      !providerRegistryAddress ||
+      !isAddress(providerRegistryAddress) ||
+      isZeroAddress(providerRegistryAddress)
+    ) {
+      console.log('- Deploying a new Address Providers Registry:');
+
+      await DRE.run('full:deploy-address-provider-registry', { verify });
+
+      providerRegistryAddress = (await getLendingPoolAddressesProviderRegistry()).address;
+      providerRegistryOwner = await (await getFirstSigner()).getAddress();
+      deployed = true;
+    }
+
+    if (
+      !providerRegistryOwner ||
+      !isAddress(providerRegistryOwner) ||
+      isZeroAddress(providerRegistryOwner)
+    ) {
+      throw Error('config.ProviderRegistryOwner is missing or is not an address.');
+    }
+
+    // Checks if deployer address is registry owner
+    if (process.env.FORK) {
+      await DRE.network.provider.request({
+        method: 'hardhat_impersonateAccount',
+        params: [providerRegistryOwner],
+      });
+      signer = DRE.ethers.provider.getSigner(providerRegistryOwner);
+      const firstAccount = await getFirstSigner();
+      await firstAccount.sendTransaction({ value: parseEther('10'), to: providerRegistryOwner });
+    } else if (
+      !deployed &&
+      providerRegistryOwner.toLocaleLowerCase() !== currentSignerAddress.toLocaleLowerCase()
+    ) {
+      console.error('ProviderRegistryOwner config does not match current signer:');
+      console.error('Expected:', providerRegistryOwner);
+      console.error('Current:', currentSignerAddress);
+      exit(2);
+    } else {
+      signer = DRE.ethers.provider.getSigner(providerRegistryOwner);
+    }
+
+    // 1. Address Provider Registry instance
+    const addressesProviderRegistry = (
+      await getLendingPoolAddressesProviderRegistry(providerRegistryAddress)
+    ).connect(signer);
+
+    const addressesProviderInstance = await getLendingPoolAddressesProvider(addressesProvider);
+
+    // 2. Set the provider at the Registry
+    await waitForTx(
+      await addressesProviderRegistry.registerAddressesProvider(
+        addressesProviderInstance.address,
+        ProviderId
+      )
+    );
+    console.log(
+      `Added LendingPoolAddressesProvider with address "${addressesProviderInstance.address}" to registry located at ${addressesProviderRegistry.address}`
+    );
+  });
diff --git a/tasks/dev/2_address_provider_registry.ts b/tasks/dev/2_address_provider_registry.ts
index 42f42a7b..ed85478f 100644
--- a/tasks/dev/2_address_provider_registry.ts
+++ b/tasks/dev/2_address_provider_registry.ts
@@ -18,6 +18,7 @@ task(
 
     const addressesProvider = await deployLendingPoolAddressesProvider(AaveConfig.MarketId, verify);
     await waitForTx(await addressesProvider.setPoolAdmin(admin));
+    await waitForTx(await addressesProvider.setEmergencyAdmin(admin));
 
     const addressesProviderRegistry = await deployLendingPoolAddressesProviderRegistry(verify);
     await waitForTx(
diff --git a/tasks/dev/5_initialize.ts b/tasks/dev/5_initialize.ts
index b6c2ee01..c791656f 100644
--- a/tasks/dev/5_initialize.ts
+++ b/tasks/dev/5_initialize.ts
@@ -4,7 +4,6 @@ import {
   deployMockFlashLoanReceiver,
   deployWalletBalancerProvider,
   deployAaveProtocolDataProvider,
-  deployWETHGateway,
   authorizeWETHGateway,
 } from '../../helpers/contracts-deployments';
 import { getParamPerNetwork } from '../../helpers/contracts-helpers';
@@ -13,18 +12,18 @@ import {
   ConfigNames,
   getReservesConfigByPool,
   getTreasuryAddress,
-  getWethAddress,
   loadPoolConfig,
 } from '../../helpers/configuration';
 
 import { tEthereumAddress, AavePools, eContractid } from '../../helpers/types';
-import { waitForTx, filterMapBy } from '../../helpers/misc-utils';
+import { waitForTx, filterMapBy, notFalsyOrZeroAddress } from '../../helpers/misc-utils';
 import { configureReservesByHelper, initReservesByHelper } from '../../helpers/init-helpers';
 import { getAllTokenAddresses } from '../../helpers/mock-helpers';
 import { ZERO_ADDRESS } from '../../helpers/constants';
 import {
   getAllMockedTokens,
   getLendingPoolAddressesProvider,
+  getWETHGateway,
 } from '../../helpers/contracts-getters';
 import { insertContractAddressInDb } from '../../helpers/contracts-helpers';
 
@@ -92,6 +91,10 @@ task('dev:initialize-lending-pool', 'Initialize lending pool configuration.')
     await insertContractAddressInDb(eContractid.AaveProtocolDataProvider, testHelpers.address);
 
     const lendingPoolAddress = await addressesProvider.getLendingPool();
-    const gateWay = await getParamPerNetwork(WethGateway, network);
-    await authorizeWETHGateway(gateWay, lendingPoolAddress);
+
+    let gateway = getParamPerNetwork(WethGateway, network);
+    if (!notFalsyOrZeroAddress(gateway)) {
+      gateway = (await getWETHGateway()).address;
+    }
+    await authorizeWETHGateway(gateway, lendingPoolAddress);
   });
diff --git a/tasks/full/1_address_provider.ts b/tasks/full/1_address_provider.ts
index 957656b7..c863ae05 100644
--- a/tasks/full/1_address_provider.ts
+++ b/tasks/full/1_address_provider.ts
@@ -1,9 +1,5 @@
 import { task } from 'hardhat/config';
-import { getParamPerNetwork } from '../../helpers/contracts-helpers';
-import {
-  deployLendingPoolAddressesProvider,
-  deployLendingPoolAddressesProviderRegistry,
-} from '../../helpers/contracts-deployments';
+import { deployLendingPoolAddressesProvider } from '../../helpers/contracts-deployments';
 import { notFalsyOrZeroAddress, waitForTx } from '../../helpers/misc-utils';
 import {
   ConfigNames,
@@ -11,16 +7,8 @@ import {
   getGenesisPoolAdmin,
   getEmergencyAdmin,
 } from '../../helpers/configuration';
+import { getParamPerNetwork } from '../../helpers/contracts-helpers';
 import { eNetwork } from '../../helpers/types';
-import {
-  getFirstSigner,
-  getLendingPoolAddressesProviderRegistry,
-} from '../../helpers/contracts-getters';
-import { formatEther, isAddress, parseEther } from 'ethers/lib/utils';
-import { isZeroAddress } from 'ethereumjs-util';
-import { Signer, BigNumber } from 'ethers';
-import { parse } from 'path';
-//import BigNumber from 'bignumber.js';
 
 task(
   'full:deploy-address-provider',
@@ -28,57 +16,29 @@ task(
 )
   .addFlag('verify', 'Verify contracts at Etherscan')
   .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
-  .setAction(async ({ verify, pool }, DRE) => {
+  .addFlag('skipRegistry')
+  .setAction(async ({ verify, pool, skipRegistry }, DRE) => {
     await DRE.run('set-DRE');
-    let signer: Signer;
-    const network = <eNetwork>DRE.network.name;
     const poolConfig = loadPoolConfig(pool);
-    const { ProviderId, MarketId } = poolConfig;
+    const { MarketId } = poolConfig;
 
-    const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network);
-    const providerRegistryOwner = getParamPerNetwork(poolConfig.ProviderRegistryOwner, network);
-
-    if (
-      !providerRegistryOwner ||
-      !isAddress(providerRegistryOwner) ||
-      isZeroAddress(providerRegistryOwner)
-    ) {
-      throw Error('config.ProviderRegistryOwner is missing or is not an address.');
-    }
-
-    // Checks if deployer address is registry owner
-    if (process.env.MAINNET_FORK === 'true') {
-      await DRE.network.provider.request({
-        method: 'hardhat_impersonateAccount',
-        params: [providerRegistryOwner],
-      });
-      signer = DRE.ethers.provider.getSigner(providerRegistryOwner);
-      const firstAccount = await getFirstSigner();
-      await firstAccount.sendTransaction({ value: parseEther('10'), to: providerRegistryOwner });
-    } else {
-      signer = DRE.ethers.provider.getSigner(providerRegistryOwner);
-    }
-    // 1. Address Provider Registry instance
-    const addressesProviderRegistry = (
-      await getLendingPoolAddressesProviderRegistry(providerRegistryAddress)
-    ).connect(signer);
-
-    console.log('Registry Address', addressesProviderRegistry.address);
-
-    // 2. Deploy address provider and set genesis manager
+    // 1. Deploy address provider and set genesis manager
     const addressesProvider = await deployLendingPoolAddressesProvider(MarketId, verify);
 
-    // DISABLE SEC. 3 FOR GOVERNANCE USE!
-    // 3. Set the provider at the Registry
-    await waitForTx(
-      await addressesProviderRegistry.registerAddressesProvider(
-        addressesProvider.address,
-        ProviderId
-      )
-    );
-
-    // 4. Set pool admins
+    // 2. Add to registry or setup a new one
+    if (!skipRegistry) {
+      const providerRegistryAddress = getParamPerNetwork(
+        poolConfig.ProviderRegistry,
+        <eNetwork>DRE.network.name
+      );
 
+      await DRE.run('add-market-to-registry', {
+        pool,
+        addressesProvider: addressesProvider.address,
+        deployRegistry: !notFalsyOrZeroAddress(providerRegistryAddress),
+      });
+    }
+    // 3. Set pool admins
     await waitForTx(await addressesProvider.setPoolAdmin(await getGenesisPoolAdmin(poolConfig)));
     await waitForTx(await addressesProvider.setEmergencyAdmin(await getEmergencyAdmin(poolConfig)));
 
diff --git a/tasks/migrations/aave.dev.ts b/tasks/migrations/aave.dev.ts
index 2f09154e..53618baa 100644
--- a/tasks/migrations/aave.dev.ts
+++ b/tasks/migrations/aave.dev.ts
@@ -29,7 +29,10 @@ task('aave:dev', 'Deploy development enviroment')
     console.log('4. Deploy oracles');
     await localBRE.run('dev:deploy-oracles', { verify, pool: POOL_NAME });
 
-    console.log('5. Initialize lending pool');
+    console.log('5. Deploy WETH Gateway');
+    await localBRE.run('full-deploy-weth-gateway', { verify, pool: POOL_NAME });
+
+    console.log('6. Initialize lending pool');
     await localBRE.run('dev:initialize-lending-pool', { verify, pool: POOL_NAME });
 
     console.log('\nFinished migration');
diff --git a/tasks/migrations/aave.mainnet.ts b/tasks/migrations/aave.mainnet.ts
index 184f6e47..b5b39a09 100644
--- a/tasks/migrations/aave.mainnet.ts
+++ b/tasks/migrations/aave.mainnet.ts
@@ -6,7 +6,8 @@ import { usingTenderly } from '../../helpers/tenderly-utils';
 
 task('aave:mainnet', 'Deploy development enviroment')
   .addFlag('verify', 'Verify contracts at Etherscan')
-  .setAction(async ({ verify }, DRE) => {
+  .addFlag('skipRegistry', 'Skip addresses provider registration at Addresses Provider Registry')
+  .setAction(async ({ verify, skipRegistry }, DRE) => {
     const POOL_NAME = ConfigNames.Aave;
     await DRE.run('set-DRE');
 
@@ -18,7 +19,7 @@ task('aave:mainnet', 'Deploy development enviroment')
     console.log('Migration started\n');
 
     console.log('1. Deploy address provider');
-    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME });
+    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME, skipRegistry });
 
     console.log('2. Deploy lending pool');
     await DRE.run('full:deploy-lending-pool', { pool: POOL_NAME });
diff --git a/tasks/migrations/amm.mainnet.ts b/tasks/migrations/amm.mainnet.ts
index e496fc82..dd25c9cb 100644
--- a/tasks/migrations/amm.mainnet.ts
+++ b/tasks/migrations/amm.mainnet.ts
@@ -6,7 +6,8 @@ import { usingTenderly } from '../../helpers/tenderly-utils';
 
 task('amm:mainnet', 'Deploy development enviroment')
   .addFlag('verify', 'Verify contracts at Etherscan')
-  .setAction(async ({ verify }, DRE) => {
+  .addFlag('skipRegistry', 'Skip addresses provider registration at Addresses Provider Registry')
+  .setAction(async ({ verify, skipRegistry }, DRE) => {
     const POOL_NAME = ConfigNames.Amm;
     await DRE.run('set-DRE');
 
@@ -18,7 +19,7 @@ task('amm:mainnet', 'Deploy development enviroment')
     console.log('Migration started\n');
 
     console.log('1. Deploy address provider');
-    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME });
+    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME, skipRegistry });
 
     console.log('2. Deploy lending pool');
     await DRE.run('full:deploy-lending-pool', { pool: POOL_NAME });
diff --git a/tasks/migrations/sidechain.mainnet.ts b/tasks/migrations/sidechain.mainnet.ts
index 4bb2c000..60607639 100644
--- a/tasks/migrations/sidechain.mainnet.ts
+++ b/tasks/migrations/sidechain.mainnet.ts
@@ -5,9 +5,10 @@ import { printContracts } from '../../helpers/misc-utils';
 import { usingTenderly } from '../../helpers/tenderly-utils';
 
 task('sidechain:mainnet', 'Deploy market at sidechain')
-  .addFlag('verify', 'Verify contracts at Etherscan')
   .addParam('pool', `Market pool configuration, one of ${Object.keys(ConfigNames)}`)
-  .setAction(async ({ verify, pool }, DRE) => {
+  .addFlag('verify', 'Verify contracts at Etherscan')
+  .addFlag('skipRegistry', 'Skip addresses provider registration at Addresses Provider Registry')
+  .setAction(async ({ verify, pool, skipRegistry }, DRE) => {
     const POOL_NAME = pool;
     await DRE.run('set-DRE');
 
@@ -22,7 +23,7 @@ task('sidechain:mainnet', 'Deploy market at sidechain')
     await DRE.run('full:deploy-address-provider-registry', { pool: POOL_NAME });
 
     console.log('1. Deploy address provider');
-    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME });
+    await DRE.run('full:deploy-address-provider', { pool: POOL_NAME, skipRegistry });
 
     console.log('2. Deploy lending pool');
     await DRE.run('full:deploy-lending-pool', { pool: POOL_NAME });
diff --git a/tasks/misc/print-config.ts b/tasks/misc/print-config.ts
index 722d308c..fe3925d3 100644
--- a/tasks/misc/print-config.ts
+++ b/tasks/misc/print-config.ts
@@ -14,10 +14,10 @@ task('print-config', 'Inits the DRE, to have access to all the plugins')
   .addParam('pool', `Pool name to retrieve configuration, supported: ${Object.values(ConfigNames)}`)
   .setAction(async ({ pool, dataProvider }, localBRE) => {
     await localBRE.run('set-DRE');
-    const network =
-      process.env.MAINNET_FORK === 'true'
-        ? eEthereumNetwork.main
-        : (localBRE.network.name as eNetwork);
+    const network = process.env.FORK
+      ? (process.env.FORK as eNetwork)
+      : (localBRE.network.name as eNetwork);
+    console.log(network);
     const poolConfig = loadPoolConfig(pool);
 
     const providerRegistryAddress = getParamPerNetwork(poolConfig.ProviderRegistry, network);
@@ -60,7 +60,7 @@ task('print-config', 'Inits the DRE, to have access to all the plugins')
     ];
     const tokensFields = ['aToken', 'stableDebtToken', 'variableDebtToken'];
     for (const [symbol, address] of Object.entries(
-      getParamPerNetwork(poolConfig.ReserveAssets, network)
+      getParamPerNetwork(poolConfig.ReserveAssets, network as eNetwork)
     )) {
       console.log(`- ${symbol} asset config`);
       console.log(`  - reserve address: ${address}`);
diff --git a/tasks/misc/set-bre.ts b/tasks/misc/set-bre.ts
index 63721451..63aafd1e 100644
--- a/tasks/misc/set-bre.ts
+++ b/tasks/misc/set-bre.ts
@@ -5,6 +5,8 @@ import { usingTenderly } from '../../helpers/tenderly-utils';
 import { HardhatRuntimeEnvironment } from 'hardhat/types';
 import { getFirstSigner } from '../../helpers/contracts-getters';
 import { formatEther } from 'ethers/lib/utils';
+import { fork } from 'child_process';
+import { env } from 'process';
 
 task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).setAction(
   async (_, _DRE) => {
@@ -36,6 +38,18 @@ task(`set-DRE`, `Inits the DRE, to have access to all the plugins' objects`).set
       );
     }
 
+    console.log('- Enviroment');
+    if (process.env.FORK) {
+      console.log('  - Fork Mode activated at network: ', process.env.FORK);
+      if (_DRE?.config?.networks?.hardhat?.forking?.url) {
+        console.log('  - Provider URL:', _DRE.config.networks.hardhat.forking?.url?.split('/')[2]);
+      } else {
+        console.error(
+          `[FORK][Error], missing Provider URL for "${_DRE.network.name}" network. Fill the URL at './helper-hardhat-config.ts' file`
+        );
+      }
+    }
+    console.log('  - Network :', _DRE.network.name);
     setDRE(_DRE);
     return _DRE;
   }
diff --git a/test-suites/test-aave/__setup.spec.ts b/test-suites/test-aave/__setup.spec.ts
index a223c3a5..d3abf2c2 100644
--- a/test-suites/test-aave/__setup.spec.ts
+++ b/test-suites/test-aave/__setup.spec.ts
@@ -304,10 +304,10 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
 before(async () => {
   await rawBRE.run('set-DRE');
   const [deployer, secondaryWallet] = await getEthersSigners();
-  const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
+  const FORK = process.env.FORK;
 
-  if (MAINNET_FORK) {
-    await rawBRE.run('aave:mainnet');
+  if (FORK) {
+    await rawBRE.run('aave:mainnet', { skipRegistry: true });
   } else {
     console.log('-> Deploying test environment...');
     await buildTestEnv(deployer, secondaryWallet);
diff --git a/test-suites/test-aave/helpers/make-suite.ts b/test-suites/test-aave/helpers/make-suite.ts
index 99898108..d26bb161 100644
--- a/test-suites/test-aave/helpers/make-suite.ts
+++ b/test-suites/test-aave/helpers/make-suite.ts
@@ -17,7 +17,7 @@ import {
   getRewardsToken,
   getRewardsATokenMock,
 } from '../../../helpers/contracts-getters';
-import { eEthereumNetwork, tEthereumAddress } from '../../../helpers/types';
+import { eEthereumNetwork, eNetwork, tEthereumAddress } from '../../../helpers/types';
 import { LendingPool } from '../../../types/LendingPool';
 import { AaveProtocolDataProvider } from '../../../types/AaveProtocolDataProvider';
 import { MintableERC20 } from '../../../types/MintableERC20';
@@ -122,9 +122,9 @@ export async function initializeMakeSuite() {
 
   testEnv.addressesProvider = await getLendingPoolAddressesProvider();
 
-  if (process.env.MAINNET_FORK === 'true') {
+  if (process.env.FORK) {
     testEnv.registry = await getLendingPoolAddressesProviderRegistry(
-      getParamPerNetwork(AaveConfig.ProviderRegistry, eEthereumNetwork.main)
+      getParamPerNetwork(AaveConfig.ProviderRegistry, process.env.FORK as eNetwork)
     );
   } else {
     testEnv.registry = await getLendingPoolAddressesProviderRegistry();
diff --git a/test-suites/test-amm/__setup.spec.ts b/test-suites/test-amm/__setup.spec.ts
index 8844af7c..318d80b5 100644
--- a/test-suites/test-amm/__setup.spec.ts
+++ b/test-suites/test-amm/__setup.spec.ts
@@ -293,10 +293,10 @@ const buildTestEnv = async (deployer: Signer, secondaryWallet: Signer) => {
 before(async () => {
   await rawBRE.run('set-DRE');
   const [deployer, secondaryWallet] = await getEthersSigners();
-  const MAINNET_FORK = process.env.MAINNET_FORK === 'true';
+  const FORK = process.env.FORK;
 
-  if (MAINNET_FORK) {
-    await rawBRE.run('amm:mainnet');
+  if (FORK) {
+    await rawBRE.run('amm:mainnet', { skipRegistry: true });
   } else {
     console.log('-> Deploying test environment...');
     await buildTestEnv(deployer, secondaryWallet);
diff --git a/test-suites/test-amm/helpers/make-suite.ts b/test-suites/test-amm/helpers/make-suite.ts
index 71d96bf5..80e85ed8 100644
--- a/test-suites/test-amm/helpers/make-suite.ts
+++ b/test-suites/test-amm/helpers/make-suite.ts
@@ -15,7 +15,7 @@ import {
   getUniswapRepayAdapter,
   getFlashLiquidationAdapter,
 } from '../../../helpers/contracts-getters';
-import { eEthereumNetwork, tEthereumAddress } from '../../../helpers/types';
+import { eEthereumNetwork, eNetwork, tEthereumAddress } from '../../../helpers/types';
 import { LendingPool } from '../../../types/LendingPool';
 import { AaveProtocolDataProvider } from '../../../types/AaveProtocolDataProvider';
 import { MintableERC20 } from '../../../types/MintableERC20';
@@ -116,9 +116,9 @@ export async function initializeMakeSuite() {
 
   testEnv.addressesProvider = await getLendingPoolAddressesProvider();
 
-  if (process.env.MAINNET_FORK === 'true') {
+  if (process.env.FORK) {
     testEnv.registry = await getLendingPoolAddressesProviderRegistry(
-      getParamPerNetwork(AmmConfig.ProviderRegistry, eEthereumNetwork.main)
+      getParamPerNetwork(AmmConfig.ProviderRegistry, process.env.FORK as eNetwork)
     );
   } else {
     testEnv.registry = await getLendingPoolAddressesProviderRegistry();