diff --git a/cabal.project b/cabal.project
index 80c8cb73e98..8871d6dd3f9 100644
--- a/cabal.project
+++ b/cabal.project
@@ -197,8 +197,8 @@ source-repository-package
 source-repository-package
   type: git
   location: https://github.com/input-output-hk/cardano-ledger
-  tag: 0913292b13963ae4b60136eddb8d18b137f96a21
-  --sha256: 19rrnvvplvg8v989bcv6vpjwvblfa0m65izxkcp8dclf0a914qq3
+  tag: 65292694de72f137e6b90c5f361ae7646b48775f
+  --sha256: 05m1c7v8a2797675gkagpzl6bcjnj7w6lnx5x7hf90847ap88b05
   subdir:
     eras/alonzo/impl
     eras/alonzo/test-suite
diff --git a/cardano-api/gen/Gen/Cardano/Api/Typed.hs b/cardano-api/gen/Gen/Cardano/Api/Typed.hs
index 4e529274518..ed91c879218 100644
--- a/cardano-api/gen/Gen/Cardano/Api/Typed.hs
+++ b/cardano-api/gen/Gen/Cardano/Api/Typed.hs
@@ -765,6 +765,7 @@ genProtocolParameters =
     <*> Gen.maybe genNat
     <*> Gen.maybe genNat
     <*> Gen.maybe genNat
+    <*> Gen.maybe genLovelace
 
 genProtocolParametersUpdate :: Gen ProtocolParametersUpdate
 genProtocolParametersUpdate = do
@@ -795,6 +796,7 @@ genProtocolParametersUpdate = do
   protocolUpdateMaxValueSize        <- Gen.maybe genNat
   protocolUpdateCollateralPercent   <- Gen.maybe genNat
   protocolUpdateMaxCollateralInputs <- Gen.maybe genNat
+  protocolUpdateUTxOCostPerByte     <- Gen.maybe genLovelace
   pure ProtocolParametersUpdate{..}
 
 
diff --git a/cardano-api/src/Cardano/Api/Fees.hs b/cardano-api/src/Cardano/Api/Fees.hs
index a1c1c659430..a798f7794b4 100644
--- a/cardano-api/src/Cardano/Api/Fees.hs
+++ b/cardano-api/src/Cardano/Api/Fees.hs
@@ -793,10 +793,6 @@ data TxBodyErrorAutoBalance =
        -- parameter, for eras that use this parameter.
      | TxBodyErrorMissingParamMinUTxO
 
-       -- | The 'ProtocolParameters' must provide the value for the cost per
-       -- word parameter, for eras that use this parameter.
-     | TxBodyErrorMissingParamCostPerWord
-
        -- | The transaction validity interval is too far into the future.
        -- See 'TransactionValidityIntervalError' for details.
      | TxBodyErrorValidityInterval TransactionValidityError
@@ -856,9 +852,6 @@ instance Error TxBodyErrorAutoBalance where
   displayError TxBodyErrorMissingParamMinUTxO =
       "The minUTxOValue protocol parameter is required but missing"
 
-  displayError TxBodyErrorMissingParamCostPerWord =
-      "The utxoCostPerWord protocol parameter is required but missing"
-
   displayError (TxBodyErrorValidityInterval err) =
       displayError err
 
@@ -1259,13 +1252,9 @@ calculateMinimumUTxO era txout@(TxOut _ v _ _) pparams' =
 
 data MinimumUTxOError =
     PParamsMinUTxOMissing
-  | PParamsUTxOCostPerWordMissing
   deriving Show
 
 instance Error MinimumUTxOError where
   displayError PParamsMinUTxOMissing =
     "\"minUtxoValue\" field not present in protocol parameters when \
     \trying to calculate minimum UTxO value."
-  displayError PParamsUTxOCostPerWordMissing =
-    "\"utxoCostPerWord\" field not present in protocol parameters when \
-    \trying to calculate minimum UTxO value."
diff --git a/cardano-api/src/Cardano/Api/ProtocolParameters.hs b/cardano-api/src/Cardano/Api/ProtocolParameters.hs
index b03f158efd6..c6572ed276a 100644
--- a/cardano-api/src/Cardano/Api/ProtocolParameters.hs
+++ b/cardano-api/src/Cardano/Api/ProtocolParameters.hs
@@ -71,7 +71,7 @@ import           Data.Bifunctor (bimap, first)
 import           Data.ByteString (ByteString)
 import           Data.Map.Strict (Map)
 import qualified Data.Map.Strict as Map
-import           Data.Maybe (fromMaybe, isJust, isNothing)
+import           Data.Maybe (fromMaybe, isJust)
 import           Data.String (IsString)
 import           Data.Text (Text)
 import           GHC.Generics
@@ -100,7 +100,6 @@ import qualified Cardano.Ledger.Alonzo.PParams as Alonzo
 import qualified Cardano.Ledger.Alonzo.Scripts as Alonzo
 
 import qualified Cardano.Ledger.Babbage.PParams as Babbage
-import           Cardano.Ledger.Babbage.Translation (coinsPerUTxOWordToCoinsPerUTxOByte)
 
 import           Text.PrettyBy.Default (display)
 
@@ -286,7 +285,13 @@ data ProtocolParameters =
        -- | The maximum number of collateral inputs allowed in a transaction.
        --
        -- /Introduced in Alonzo/
-       protocolParamMaxCollateralInputs :: Maybe Natural
+       protocolParamMaxCollateralInputs :: Maybe Natural,
+
+       -- | Cost in ada per byte of UTxO storage.
+       --
+       -- /Introduced in Babbage/
+       protocolParamUTxOCostPerByte :: Maybe Lovelace
+
     }
   deriving (Eq, Generic, Show)
 
@@ -320,6 +325,7 @@ instance FromJSON ProtocolParameters where
         <*> o .:? "maxValueSize"
         <*> o .:? "collateralPercentage"
         <*> o .:? "maxCollateralInputs"
+        <*> o .:? "utxoCostPerByte"
 
 instance ToJSON ProtocolParameters where
   toJSON ProtocolParameters{..} =
@@ -351,6 +357,8 @@ instance ToJSON ProtocolParameters where
       , "maxValueSize"           .= protocolParamMaxValueSize
       , "collateralPercentage"   .= protocolParamCollateralPercent
       , "maxCollateralInputs"    .= protocolParamMaxCollateralInputs
+      -- Babbage era:
+      , "utxoCostPerByte"        .= protocolParamUTxOCostPerByte
       ]
 
 
@@ -473,13 +481,15 @@ data ProtocolParametersUpdate =
        --
        protocolUpdateTreasuryCut :: Maybe Rational,
 
-       -- Introduced in Alonzo
+       -- Introduced in Alonzo,
 
        -- | Cost in ada per word of UTxO storage.
        --
-       -- /Introduced in Alonzo/
+       -- /Introduced in Alonzo, obsoleted in Babbage by 'protocolUpdateUTxOCostPerByte'/
        protocolUpdateUTxOCostPerWord :: Maybe Lovelace,
 
+       -- Introduced in Alonzo,
+
        -- | Cost models for script languages that use them.
        --
        -- /Introduced in Alonzo/
@@ -514,7 +524,12 @@ data ProtocolParametersUpdate =
        -- | The maximum number of collateral inputs allowed in a transaction.
        --
        -- /Introduced in Alonzo/
-       protocolUpdateMaxCollateralInputs :: Maybe Natural
+       protocolUpdateMaxCollateralInputs :: Maybe Natural,
+
+       -- | Cost in ada per byte of UTxO storage.
+       --
+       -- /Introduced in Babbage.  Supercedes 'protocolUpdateUTxOCostPerWord'/
+       protocolUpdateUTxOCostPerByte :: Maybe Lovelace
     }
   deriving (Eq, Show)
 
@@ -547,6 +562,8 @@ instance Semigroup ProtocolParametersUpdate where
       , protocolUpdateMaxValueSize        = merge protocolUpdateMaxValueSize
       , protocolUpdateCollateralPercent   = merge protocolUpdateCollateralPercent
       , protocolUpdateMaxCollateralInputs = merge protocolUpdateMaxCollateralInputs
+      -- Introduced in Babbage below.
+      , protocolUpdateUTxOCostPerByte     = merge protocolUpdateUTxOCostPerByte
       }
       where
         -- prefer the right hand side:
@@ -585,11 +602,12 @@ instance Monoid ProtocolParametersUpdate where
       , protocolUpdateMaxValueSize        = Nothing
       , protocolUpdateCollateralPercent   = Nothing
       , protocolUpdateMaxCollateralInputs = Nothing
+      , protocolUpdateUTxOCostPerByte     = Nothing
       }
 
 instance ToCBOR ProtocolParametersUpdate where
     toCBOR ProtocolParametersUpdate{..} =
-        CBOR.encodeListLen 25
+        CBOR.encodeListLen 26
      <> toCBOR protocolUpdateProtocolVersion
      <> toCBOR protocolUpdateDecentralization
      <> toCBOR protocolUpdateExtraPraosEntropy
@@ -615,10 +633,11 @@ instance ToCBOR ProtocolParametersUpdate where
      <> toCBOR protocolUpdateMaxValueSize
      <> toCBOR protocolUpdateCollateralPercent
      <> toCBOR protocolUpdateMaxCollateralInputs
+     <> toCBOR protocolUpdateUTxOCostPerByte
 
 instance FromCBOR ProtocolParametersUpdate where
     fromCBOR = do
-      CBOR.enforceSize "ProtocolParametersUpdate" 25
+      CBOR.enforceSize "ProtocolParametersUpdate" 26
       ProtocolParametersUpdate
         <$> fromCBOR
         <*> fromCBOR
@@ -645,6 +664,7 @@ instance FromCBOR ProtocolParametersUpdate where
         <*> fromCBOR
         <*> fromCBOR
         <*> fromCBOR
+        <*> fromCBOR
 
 
 -- ----------------------------------------------------------------------------
@@ -1033,7 +1053,6 @@ toBabbagePParamsUpdate
     , protocolUpdatePoolPledgeInfluence
     , protocolUpdateMonetaryExpansion
     , protocolUpdateTreasuryCut
-    , protocolUpdateUTxOCostPerWord
     , protocolUpdateCostModels
     , protocolUpdatePrices
     , protocolUpdateMaxTxExUnits
@@ -1041,6 +1060,7 @@ toBabbagePParamsUpdate
     , protocolUpdateMaxValueSize
     , protocolUpdateCollateralPercent
     , protocolUpdateMaxCollateralInputs
+    , protocolUpdateUTxOCostPerByte
     } =
     Babbage.PParams {
       Babbage._minfeeA     = noInlineMaybeToStrictMaybe protocolUpdateTxFeePerByte
@@ -1064,8 +1084,6 @@ toBabbagePParamsUpdate
                                   noInlineMaybeToStrictMaybe protocolUpdateProtocolVersion
     , Babbage._minPoolCost     = toShelleyLovelace <$>
                                    noInlineMaybeToStrictMaybe protocolUpdateMinPoolCost
-    , Babbage._coinsPerUTxOByte = coinsPerUTxOWordToCoinsPerUTxOByte  . toShelleyLovelace <$>
-                                    noInlineMaybeToStrictMaybe protocolUpdateUTxOCostPerWord
     , Babbage._costmdls        = if Map.null protocolUpdateCostModels
                                   then Ledger.SNothing
                                   else either (const Ledger.SNothing) Ledger.SJust
@@ -1079,6 +1097,8 @@ toBabbagePParamsUpdate
     , Babbage._maxValSize      = noInlineMaybeToStrictMaybe protocolUpdateMaxValueSize
     , Babbage._collateralPercentage = noInlineMaybeToStrictMaybe protocolUpdateCollateralPercent
     , Babbage._maxCollateralInputs  = noInlineMaybeToStrictMaybe protocolUpdateMaxCollateralInputs
+    , Babbage._coinsPerUTxOByte = toShelleyLovelace <$>
+                                    noInlineMaybeToStrictMaybe protocolUpdateUTxOCostPerByte
     }
 
 -- ----------------------------------------------------------------------------
@@ -1175,6 +1195,7 @@ fromShelleyPParamsUpdate
     , protocolUpdateMaxValueSize        = Nothing
     , protocolUpdateCollateralPercent   = Nothing
     , protocolUpdateMaxCollateralInputs = Nothing
+    , protocolUpdateUTxOCostPerByte     = Nothing
     }
 
 fromAlonzoPParamsUpdate :: Alonzo.PParamsUpdate ledgerera
@@ -1246,6 +1267,7 @@ fromAlonzoPParamsUpdate
     , protocolUpdateMaxValueSize        = strictMaybeToMaybe _maxValSize
     , protocolUpdateCollateralPercent   = strictMaybeToMaybe _collateralPercentage
     , protocolUpdateMaxCollateralInputs = strictMaybeToMaybe _maxCollateralInputs
+    , protocolUpdateUTxOCostPerByte     = Nothing
     }
 
 
@@ -1301,8 +1323,7 @@ fromBabbagePParamsUpdate
                                             strictMaybeToMaybe _rho
     , protocolUpdateTreasuryCut         = Ledger.unboundRational <$>
                                             strictMaybeToMaybe _tau
-    , protocolUpdateUTxOCostPerWord     = (*8) . fromShelleyLovelace <$>
-                                            strictMaybeToMaybe _coinsPerUTxOByte
+    , protocolUpdateUTxOCostPerWord     = Nothing
     , protocolUpdateCostModels          = maybe mempty fromAlonzoCostModels
                                                (strictMaybeToMaybe _costmdls)
     , protocolUpdatePrices              = fromAlonzoPrices <$>
@@ -1314,6 +1335,8 @@ fromBabbagePParamsUpdate
     , protocolUpdateMaxValueSize        = strictMaybeToMaybe _maxValSize
     , protocolUpdateCollateralPercent   = strictMaybeToMaybe _collateralPercentage
     , protocolUpdateMaxCollateralInputs = strictMaybeToMaybe _maxCollateralInputs
+    , protocolUpdateUTxOCostPerByte     = fromShelleyLovelace <$>
+                                            strictMaybeToMaybe _coinsPerUTxOByte
     }
 
 
@@ -1483,11 +1506,11 @@ toAlonzoPParams ProtocolParameters { protocolParamMaxTxExUnits    = Nothing } =
 toAlonzoPParams ProtocolParameters { protocolParamMaxBlockExUnits = Nothing } =
   error "toAlonzoPParams: must specify protocolParamMaxBlockExUnits"
 toAlonzoPParams ProtocolParameters { protocolParamMaxValueSize    = Nothing } =
-    error "toAlonzoPParams: must specify protocolParamMaxValueSize"
+  error "toAlonzoPParams: must specify protocolParamMaxValueSize"
 toAlonzoPParams ProtocolParameters { protocolParamCollateralPercent = Nothing } =
-    error "toAlonzoPParams: must specify protocolParamCollateralPercent"
+  error "toAlonzoPParams: must specify protocolParamCollateralPercent"
 toAlonzoPParams ProtocolParameters { protocolParamMaxCollateralInputs = Nothing } =
-    error "toAlonzoPParams: must specify protocolParamMaxCollateralInputs"
+  error "toAlonzoPParams: must specify protocolParamMaxCollateralInputs"
 
 
 toBabbagePParams :: ProtocolParameters -> Babbage.PParams ledgerera
@@ -1506,7 +1529,7 @@ toBabbagePParams ProtocolParameters {
                    protocolParamPoolPledgeInfluence,
                    protocolParamMonetaryExpansion,
                    protocolParamTreasuryCut,
-                   protocolParamUTxOCostPerWord = Just utxoCostPerWord,
+                   protocolParamUTxOCostPerByte = Just utxoCostPerByte,
                    protocolParamCostModels,
                    protocolParamPrices          = Just prices,
                    protocolParamMaxTxExUnits    = Just maxTxExUnits,
@@ -1540,8 +1563,7 @@ toBabbagePParams ProtocolParameters {
                                (Ledger.boundRational protocolParamTreasuryCut)
 
       -- New params in Babbage.
-    , Babbage._coinsPerUTxOByte = coinsPerUTxOWordToCoinsPerUTxOByte
-                                   (toShelleyLovelace utxoCostPerWord)
+    , Babbage._coinsPerUTxOByte = toShelleyLovelace utxoCostPerByte
 
     , Babbage._costmdls        = either
                                   (\e -> error $ "toAlonzoPParams: invalid cost models, error: " <> e)
@@ -1556,8 +1578,8 @@ toBabbagePParams ProtocolParameters {
     , Babbage._collateralPercentage = collateralPercentage
     , Babbage._maxCollateralInputs  = maxCollateralInputs
     }
-toBabbagePParams ProtocolParameters { protocolParamUTxOCostPerWord = Nothing } =
-  error "toBabbagePParams: must specify protocolParamUTxOCostPerWord"
+toBabbagePParams ProtocolParameters { protocolParamUTxOCostPerByte = Nothing } =
+  error "toBabbagePParams: must specify protocolParamUTxOCostPerByte"
 toBabbagePParams ProtocolParameters { protocolParamPrices          = Nothing } =
   error "toBabbagePParams: must specify protocolParamPrices"
 toBabbagePParams ProtocolParameters { protocolParamMaxTxExUnits    = Nothing } =
@@ -1627,14 +1649,15 @@ fromShelleyPParams
     , protocolParamPoolPledgeInfluence = Ledger.unboundRational _a0
     , protocolParamMonetaryExpansion   = Ledger.unboundRational _rho
     , protocolParamTreasuryCut         = Ledger.unboundRational _tau
-    , protocolParamUTxOCostPerWord     = Nothing
-    , protocolParamCostModels          = Map.empty
-    , protocolParamPrices              = Nothing
-    , protocolParamMaxTxExUnits        = Nothing
-    , protocolParamMaxBlockExUnits     = Nothing
-    , protocolParamMaxValueSize        = Nothing
-    , protocolParamCollateralPercent   = Nothing
-    , protocolParamMaxCollateralInputs = Nothing
+    , protocolParamUTxOCostPerWord     = Nothing    -- Only in Alonzo
+    , protocolParamCostModels          = Map.empty  -- Only from Alonzo onwards
+    , protocolParamPrices              = Nothing    -- Only from Alonzo onwards
+    , protocolParamMaxTxExUnits        = Nothing    -- Only from Alonzo onwards
+    , protocolParamMaxBlockExUnits     = Nothing    -- Only from Alonzo onwards
+    , protocolParamMaxValueSize        = Nothing    -- Only from Alonzo onwards
+    , protocolParamCollateralPercent   = Nothing    -- Only from Alonzo onwards
+    , protocolParamMaxCollateralInputs = Nothing    -- Only from Alonzo onwards
+    , protocolParamUTxOCostPerByte     = Nothing    -- Only from babbage onwards
     }
 
 
@@ -1693,6 +1716,7 @@ fromAlonzoPParams
     , protocolParamMaxValueSize        = Just _maxValSize
     , protocolParamCollateralPercent   = Just _collateralPercentage
     , protocolParamMaxCollateralInputs = Just _maxCollateralInputs
+    , protocolParamUTxOCostPerByte     = Nothing    -- Only from babbage onwards
     }
 
 fromBabbagePParams :: Babbage.PParams ledgerera -> ProtocolParameters
@@ -1740,7 +1764,7 @@ fromBabbagePParams
     , protocolParamPoolPledgeInfluence = Ledger.unboundRational _a0
     , protocolParamMonetaryExpansion   = Ledger.unboundRational _rho
     , protocolParamTreasuryCut         = Ledger.unboundRational _tau
-    , protocolParamUTxOCostPerWord     = Just (8 * fromShelleyLovelace _coinsPerUTxOByte)
+    , protocolParamUTxOCostPerWord     = Nothing    -- Obsolete from babbage onwards
     , protocolParamCostModels          = fromAlonzoCostModels _costmdls
     , protocolParamPrices              = Just (fromAlonzoPrices _prices)
     , protocolParamMaxTxExUnits        = Just (fromAlonzoExUnits _maxTxExUnits)
@@ -1748,6 +1772,7 @@ fromBabbagePParams
     , protocolParamMaxValueSize        = Just _maxValSize
     , protocolParamCollateralPercent   = Just _collateralPercentage
     , protocolParamMaxCollateralInputs = Just _maxCollateralInputs
+    , protocolParamUTxOCostPerByte     = Just (fromShelleyLovelace _coinsPerUTxOByte)
     }
 
 data ProtocolParametersError =
@@ -1790,33 +1815,47 @@ checkProtocolParameters sbe ProtocolParameters{..} =
    maxValueSize = isJust protocolParamMaxValueSize
    collateralPercent = isJust protocolParamCollateralPercent
    maxCollateralInputs = isJust protocolParamMaxCollateralInputs
+   costPerByte = isJust protocolParamUTxOCostPerByte
+   decentralization = isJust protocolParamDecentralization
+   extraPraosEntropy = isJust protocolParamExtraPraosEntropy
+
+   alonzoPParamFieldsRequirements :: [Bool]
+   alonzoPParamFieldsRequirements =
+     [     costPerWord
+     ,     cModel
+     ,     prices
+     ,     maxTxUnits
+     ,     maxBlockExUnits
+     ,     maxValueSize
+     ,     collateralPercent
+     ,     maxCollateralInputs
+     , not costPerByte
+     ]
 
-   alonzoRequiredPParamFields :: [Bool]
-   alonzoRequiredPParamFields =
-     [ costPerWord
-     , cModel
-     , prices
-     , maxTxUnits
-     , maxBlockExUnits
-     , maxValueSize
-     , collateralPercent
-     , maxCollateralInputs
+   babbagePParamFieldsRequirements :: [Bool]
+   babbagePParamFieldsRequirements =
+     [ not costPerWord
+     ,     cModel
+     ,     prices
+     ,     maxTxUnits
+     ,     maxBlockExUnits
+     ,     maxValueSize
+     ,     collateralPercent
+     ,     maxCollateralInputs
+     ,     costPerByte
+     , not decentralization
+     , not extraPraosEntropy
      ]
 
    checkAlonzoParams :: Either ProtocolParametersError ()
    checkAlonzoParams = do
-     if all (== True) alonzoRequiredPParamFields
+     if all (== True) alonzoPParamFieldsRequirements
      then return ()
      else Left PParamsErrorMissingAlonzoProtocolParameter
 
-   babbageDeprecatedFields :: [Bool]
-   babbageDeprecatedFields = [ isNothing protocolParamDecentralization
-                             , isNothing protocolParamExtraPraosEntropy
-                             ]
-
    checkBabbageParams :: Either ProtocolParametersError ()
    checkBabbageParams =
-     if all (== True) $ alonzoRequiredPParamFields ++ babbageDeprecatedFields
+     if all (== True) babbagePParamFieldsRequirements
      then return ()
      else Left PParamsErrorMissingAlonzoProtocolParameter
 
diff --git a/cardano-api/src/Cardano/Api/Value.hs b/cardano-api/src/Cardano/Api/Value.hs
index 7cbf41385d6..ad69cab44b2 100644
--- a/cardano-api/src/Cardano/Api/Value.hs
+++ b/cardano-api/src/Cardano/Api/Value.hs
@@ -88,14 +88,13 @@ import           Cardano.Api.SerialiseRaw
 import           Cardano.Api.SerialiseUsing
 import           Cardano.Api.Utils (failEitherWith)
 
-
 -- ----------------------------------------------------------------------------
 -- Lovelace
 --
 
 newtype Lovelace = Lovelace Integer
   deriving stock (Eq, Ord, Show)
-  deriving newtype (Enum, Num, ToJSON, FromJSON, ToCBOR, FromCBOR)
+  deriving newtype (Enum, Real, Integral, Num, ToJSON, FromJSON, ToCBOR, FromCBOR)
 
 instance Semigroup Lovelace where
   Lovelace a <> Lovelace b = Lovelace (a + b)
diff --git a/cardano-cli/src/Cardano/CLI/Run/Friendly.hs b/cardano-cli/src/Cardano/CLI/Run/Friendly.hs
index 248115dbf85..f35a1e4c4f3 100644
--- a/cardano-cli/src/Cardano/CLI/Run/Friendly.hs
+++ b/cardano-cli/src/Cardano/CLI/Run/Friendly.hs
@@ -235,6 +235,7 @@ friendlyProtocolParametersUpdate
     , protocolUpdateMaxTxExUnits
     , protocolUpdateMaxValueSize
     , protocolUpdatePrices
+    , protocolUpdateUTxOCostPerByte
     } =
   object . catMaybes $
     [ protocolUpdateProtocolVersion <&> \(major, minor) ->
@@ -262,7 +263,7 @@ friendlyProtocolParametersUpdate
         ("monetary expansion" .=) . friendlyRational
     , protocolUpdateTreasuryCut <&> ("treasury expansion" .=) . friendlyRational
     , protocolUpdateUTxOCostPerWord <&>
-        ("UTxO storage cost per unit" .=) . friendlyLovelace
+        ("UTxO storage cost per word" .=) . friendlyLovelace
     , protocolUpdateCollateralPercent <&>
         ("collateral inputs share" .=) . (<> "%") . textShow
     , protocolUpdateMaxBlockExUnits <&> ("max block execution units" .=)
@@ -270,6 +271,8 @@ friendlyProtocolParametersUpdate
     , protocolUpdateMaxTxExUnits <&> ("max transaction execution units" .=)
     , protocolUpdateMaxValueSize <&> ("max value size" .=)
     , protocolUpdatePrices <&> ("execution prices" .=) . friendlyPrices
+    , protocolUpdateUTxOCostPerByte <&>
+        ("UTxO storage cost per byte" .=) . friendlyLovelace
     ]
 
 friendlyPrices :: ExecutionUnitPrices -> Aeson.Value
diff --git a/cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs b/cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
index 45eec8be4bd..aa17c3bce0d 100644
--- a/cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
+++ b/cardano-cli/src/Cardano/CLI/Shelley/Parsers.hs
@@ -2903,6 +2903,7 @@ pProtocolParametersUpdate =
     <*> optional pMaxValueSize
     <*> optional pCollateralPercent
     <*> optional pMaxCollateralInputs
+    <*> optional pUTxOCostPerByte
 
 pCostModels :: Parser FilePath
 pCostModels =
@@ -3062,6 +3063,14 @@ pUTxOCostPerWord =
       <> Opt.help "Cost in lovelace per unit of UTxO storage (from Alonzo era)."
       )
 
+pUTxOCostPerByte :: Parser Lovelace
+pUTxOCostPerByte =
+    Opt.option (readerFromParsecParser parseLovelace)
+      (  Opt.long "utxo-cost-per-byte"
+      <> Opt.metavar "LOVELACE"
+      <> Opt.help "Cost in lovelace per unit of UTxO storage (from Babbage era)."
+      )
+
 pExecutionUnitPrices :: Parser ExecutionUnitPrices
 pExecutionUnitPrices = ExecutionUnitPrices
   <$> Opt.option readRational
diff --git a/cardano-cli/test/data/golden/alonzo/transaction-view.out b/cardano-cli/test/data/golden/alonzo/transaction-view.out
index eed7291edbd..be86302fa9c 100644
--- a/cardano-cli/test/data/golden/alonzo/transaction-view.out
+++ b/cardano-cli/test/data/golden/alonzo/transaction-view.out
@@ -18,7 +18,7 @@ update proposal:
   updates:
   - genesis key hash: 1bafa294233a5a7ffbf539ae798da0943aa83d2a19398c2d0e5af114
     update:
-      UTxO storage cost per unit: 194 Lovelace
+      UTxO storage cost per word: 194 Lovelace
       collateral inputs share: 200%
       execution prices:
         memory: 196/197
diff --git a/cardano-node/src/Cardano/Node/Tracing/Era/Shelley.hs b/cardano-node/src/Cardano/Node/Tracing/Era/Shelley.hs
index 6bbc4d7d927..03a63ee60f6 100644
--- a/cardano-node/src/Cardano/Node/Tracing/Era/Shelley.hs
+++ b/cardano-node/src/Cardano/Node/Tracing/Era/Shelley.hs
@@ -434,7 +434,7 @@ instance ( ShelleyBasedEra era
     mconcat [ "kind" .= String "InvalidWitnessesUTXOW"
              , "invalidWitnesses" .= map textShow wits'
              ]
-  forMachine _dtal (MissingVKeyWitnessesUTXOW (WitHashes wits')) =
+  forMachine _dtal (MissingVKeyWitnessesUTXOW wits') =
     mconcat [ "kind" .= String "MissingVKeyWitnessesUTXOW"
              , "missingWitnesses" .= wits'
              ]
diff --git a/cardano-node/src/Cardano/Tracing/OrphanInstances/Shelley.hs b/cardano-node/src/Cardano/Tracing/OrphanInstances/Shelley.hs
index 986f2c20233..e2ce44b2086 100644
--- a/cardano-node/src/Cardano/Tracing/OrphanInstances/Shelley.hs
+++ b/cardano-node/src/Cardano/Tracing/OrphanInstances/Shelley.hs
@@ -372,7 +372,7 @@ instance ( ShelleyBasedEra era
     mconcat [ "kind" .= String "InvalidWitnessesUTXOW"
              , "invalidWitnesses" .= map textShow wits'
              ]
-  toObject _verb (MissingVKeyWitnessesUTXOW (WitHashes wits')) =
+  toObject _verb (MissingVKeyWitnessesUTXOW wits') =
     mconcat [ "kind" .= String "MissingVKeyWitnessesUTXOW"
              , "missingWitnesses" .= wits'
              ]