diff --git a/node/impl/full/gas.go b/node/impl/full/gas.go
index 421beba2a..73bc1ea85 100644
--- a/node/impl/full/gas.go
+++ b/node/impl/full/gas.go
@@ -297,6 +297,47 @@ func gasEstimateGasLimit(
 
 	ret := res.MsgRct.GasUsed
 
+	transitionalMulti := 1.0
+	// Overestimate gas around the upgrade
+	if ts.Height() <= build.UpgradeFVM1Height && (build.UpgradeFVM1Height-ts.Height() <= 20) {
+		transitionalMulti = 2.0
+
+		func() {
+			st, err := smgr.ParentState(ts)
+			if err != nil {
+				return
+			}
+			act, err := st.GetActor(msg.To)
+			if err != nil {
+				return
+			}
+
+			if builtin.IsStorageMinerActor(act.Code) {
+				switch msgIn.Method {
+				case 5:
+					transitionalMulti = 3.954
+				case 6:
+					transitionalMulti = 4.095
+				case 7:
+					// skip, stay at 2.0
+					//transitionalMulti = 1.289
+				case 11:
+					transitionalMulti = 17.8758
+				case 16:
+					transitionalMulti = 2.1704
+				case 25:
+					transitionalMulti = 3.1177
+				case 26:
+					transitionalMulti = 2.3322
+				default:
+				}
+			}
+
+			// skip storage market, 80th percentie for everything ~1.9, leave it at 2.0
+		}()
+	}
+	ret = (ret * int64(transitionalMulti*1024)) >> 10
+
 	// Special case for PaymentChannel collect, which is deleting actor
 	// We ignore errors in this special case since they CAN occur,
 	// and we just want to detect existing payment channel actors
@@ -309,11 +350,6 @@ func gasEstimateGasLimit(
 		}
 	}
 
-	// Overestimate gas used around the
-	if ts.Height() <= build.UpgradeFVM1Height && (build.UpgradeFVM1Height-ts.Height() <= 5) {
-		ret *= 2
-	}
-
 	return ret, nil
 }