diff --git a/contracts/mainnet/connectors/compound-iii/main.sol b/contracts/mainnet/connectors/compound-iii/main.sol
index 986ddf8f..90b99cdc 100644
--- a/contracts/mainnet/connectors/compound-iii/main.sol
+++ b/contracts/mainnet/connectors/compound-iii/main.sol
@@ -52,8 +52,8 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 			amt_ = amt_ == uint256(-1)
 				? tokenContract.balanceOf(address(this))
 				: amt_;
-			approve(tokenContract, market, amt_);
 		}
+		approve(tokenContract, market, amt_);
 
 		CometInterface(market).supply(token_, amt_);
 
@@ -103,8 +103,8 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 			amt_ = amt_ == uint256(-1)
 				? tokenContract.balanceOf(address(this))
 				: amt_;
-			approve(tokenContract, market, amt_);
 		}
+		approve(tokenContract, market, amt_);
 
 		CometInterface(market).supplyTo(to, token_, amt_);
 
@@ -156,8 +156,8 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 			amt_ = amt_ == uint256(-1)
 				? tokenContract.balanceOf(address(this))
 				: amt_;
-			approve(tokenContract, market, amt_);
 		}
+		approve(tokenContract, market, amt_);
 
 		CometInterface(market).supplyFrom(from, to, token_, amt_);
 		setUint(setId, amt_);
@@ -429,16 +429,24 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 	}
 
 	/**
-	 * @dev Repays entire borrow of the base asset.
-	 * @notice Repays an entire borrow of the base asset.
+	 * @dev Repays the borrowed base asset.
+	 * @notice Repays the borrow of the base asset.
 	 * @param market The address of the market.
+	 * @param amt The amount to be repaid.
+	 * @param getId ID to retrieve amt.
 	 * @param setId ID stores the amount of tokens repaid.
 	 */
-	function payback(address market, uint256 setId)
+	function payback(
+		address market,
+		uint256 amt,
+		uint256 getId,
+		uint256 setId
+	)
 		external
 		payable
 		returns (string memory eventName_, bytes memory eventParam_)
 	{
+		uint256 amt_ = getUint(getId, amt);
 		require(market != address(0), "invalid market address");
 
 		address token = getBaseToken(market);
@@ -446,15 +454,21 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 		address token_ = isEth ? wethAddr : token;
 		TokenInterface tokenContract = TokenInterface(token_);
 
-		uint256 amt_ = CometInterface(market).borrowBalanceOf(address(this));
+		amt_ = amt_ == uint256(-1)
+			? CometInterface(market).borrowBalanceOf(address(this))
+			: amt_;
+
+		if (isEth) {
+			convertEthToWeth(isEth, tokenContract, amt_);
+		}
 		approve(tokenContract, market, amt_);
 
-		CometInterface(market).supply(token_, uint256(-1));
+		CometInterface(market).supply(token_, amt_);
 
 		setUint(setId, amt_);
 
-		eventName_ = "LogPayback(address,address,uint256,uint256)";
-		eventParam_ = abi.encode(market, token, amt_, setId);
+		eventName_ = "LogPayback(address,address,uint256,uint256,uint256)";
+		eventParam_ = abi.encode(market, token, amt_, getId, setId);
 	}
 
 	/**
@@ -462,17 +476,22 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 	 * @notice Repays an entire borrow of the base asset on behalf of 'to'.
 	 * @param market The address of the market.
 	 * @param to The address on behalf of which the borrow is to be repaid.
+	 * @param amt The amount to be repaid.
+	 * @param getId ID to retrieve amt.
 	 * @param setId ID stores the amount of tokens repaid.
 	 */
 	function paybackOnBehalf(
 		address market,
 		address to,
+		uint256 amt,
+		uint256 getId,
 		uint256 setId
 	)
 		external
 		payable
 		returns (string memory eventName_, bytes memory eventParam_)
 	{
+		uint256 amt_ = getUint(getId, amt);
 		require(market != address(0), "invalid market address");
 
 		address token = getBaseToken(market);
@@ -480,15 +499,22 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 		address token_ = isEth ? wethAddr : token;
 		TokenInterface tokenContract = TokenInterface(token_);
 
-		uint256 amt_ = CometInterface(market).borrowBalanceOf(to);
+		amt_ = amt_ == uint256(-1)
+			? CometInterface(market).borrowBalanceOf(to)
+			: amt_;
+
+		if (isEth) {
+			convertEthToWeth(isEth, tokenContract, amt_);
+		}
+
 		approve(tokenContract, market, amt_);
 
-		CometInterface(market).supplyTo(to, token_, uint256(-1));
+		CometInterface(market).supplyTo(to, token_, amt_);
 
 		setUint(setId, amt_);
 
-		eventName_ = "LogPaybackOnBehalf(address,address,address,uint256,uint256)";
-		eventParam_ = abi.encode(market, token, to, amt_, setId);
+		eventName_ = "LogPaybackOnBehalf(address,address,address,uint256,uint256,uint256)";
+		eventParam_ = abi.encode(market, token, to, amt_, getId, setId);
 	}
 
 	/**
@@ -497,18 +523,23 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 	 * @param market The address of the market.
 	 * @param from The address from which the borrow has to be repaid on behalf of 'to'.
 	 * @param to The address on behalf of which the borrow is to be repaid.
+	 * @param amt The amount to be repaid.
+	 * @param getId ID to retrieve amt.
 	 * @param setId ID stores the amount of tokens repaid.
 	 */
 	function paybackFrom(
 		address market,
 		address from,
 		address to,
+		uint256 amt,
+		uint256 getId,
 		uint256 setId
 	)
 		external
 		payable
 		returns (string memory eventName_, bytes memory eventParam_)
 	{
+		uint256 amt_ = getUint(getId, amt);
 		require(market != address(0), "invalid market address");
 
 		address token = getBaseToken(market);
@@ -516,15 +547,21 @@ abstract contract CompoundV3Resolver is Events, Helpers {
 		address token_ = isEth ? wethAddr : token;
 		TokenInterface tokenContract = TokenInterface(token_);
 
-		uint256 amt_ = CometInterface(market).borrowBalanceOf(to);
-		approve(tokenContract, market, amt_);
+		amt_ = amt_ == uint256(-1)
+			? CometInterface(market).borrowBalanceOf(to)
+			: amt_;
 
-		CometInterface(market).supplyFrom(from, to, token_, uint256(-1));
+		if (isEth) {
+			convertEthToWeth(isEth, tokenContract, amt_);
+		}
+
+		approve(tokenContract, market, amt_);
+		CometInterface(market).supplyFrom(from, to, token_, amt_);
 
 		setUint(setId, amt_);
 
-		eventName_ = "LogPaybackFrom(address,address,address,address,uint256,uint256)";
-		eventParam_ = abi.encode(market, token, from, to, amt_, setId);
+		eventName_ = "LogPaybackFrom(address,address,address,address,uint256,uint256,uint256)";
+		eventParam_ = abi.encode(market, token, from, to, amt_, getId, setId);
 	}
 
 	/**