diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -297,4 +297,10 @@
 * Functions `numberOfRealRoots`, `numberOfRealRootsInOpenInterval` and 
 `numberOfRealRootsInClosedInterval`, to compute the total number of real 
 roots of a suitable univariate spray or its number of real roots in a given 
-interval. This can be very slow if the degree of the spray is not small.
+interval. This can be very slow if the degree of the spray is not small.
+
+
+## 0.5.3.0 - 2024-06-03
+
+* Now the denominator of a `RatioOfSprays` is always monic, i.e. it is a 
+polynomial whose leading coefficient is 1.
diff --git a/hspray.cabal b/hspray.cabal
--- a/hspray.cabal
+++ b/hspray.cabal
@@ -1,5 +1,5 @@
 name:                hspray
-version:             0.5.2.0
+version:             0.5.3.0
 synopsis:            Multivariate polynomials and fractions of multivariate polynomials.
 description:         Manipulation of multivariate polynomials over a commutative ring and fractions of multivariate polynomials over a commutative field, Gröbner bases, resultant, subresultants, Sturm-Habicht sequence, and greatest common divisor. It is possible to deal with multivariate polynomials whose coefficients are fractions of multivariate polynomials, and they can be interpreted as parametric polynomials with symbolic parameters.
 homepage:            https://github.com/stla/hspray#readme
diff --git a/src/Math/Algebra/Hspray.hs b/src/Math/Algebra/Hspray.hs
--- a/src/Math/Algebra/Hspray.hs
+++ b/src/Math/Algebra/Hspray.hs
@@ -1282,7 +1282,7 @@
 
 -- | helper function for lone and lone'
 lonePower :: Int -> Int -> Powers
-lonePower n p = if n == 0 
+lonePower n p = if n == 0 || p == 0
   then nullPowers
   else Powers (S.replicate (n - 1) 0 |> p) n
 
@@ -2277,7 +2277,7 @@
   | k < 0 || n < 0 
     = error "psPolynomial: both arguments must be positive integers."
   | k > n     = AlgAdd.zero
-  | k == 0    = n .^ unitSpray
+  | k == 0    = unitSpray
   | otherwise = spray
   where
     spray = HM.fromList $ map f [1 .. n]
@@ -3223,12 +3223,11 @@
       exactDivision p q = fst (sprayDivision0 p q)
       g = gcdSpray sprayA sprayB
       go oldr r olds s oldt t 
-        | isZeroSpray r = (c *^ AlgAdd.negate t, c *^ s) -- monic denominator
+        | isZeroSpray r = (AlgAdd.negate t, s)
         | otherwise     = 
             go r remainder s (olds ^-^ quo ^*^ s) t (oldt ^-^ quo ^*^ t)
           where
             (quo, remainder) = univariateSprayDivision oldr r
-            c = AlgField.recip (snd $ leadingTerm s)
 
 -- | irreducible fraction of sprays
 irreducibleFraction ::
@@ -3239,11 +3238,11 @@
       then RatioOfSprays p q 
       else let (a, b) = quotientsByGCD p q in RatioOfSprays a b
 
--- | set denominator to 1 if it is constant
+-- | make monic denominator
 adjustFraction :: (Eq a, AlgField.C a) => RatioOfSprays a -> RatioOfSprays a
-adjustFraction (RatioOfSprays p q) = if isConstant q 
-  then RatioOfSprays (p /^ getConstantTerm q) unitSpray
-  else RatioOfSprays p q
+adjustFraction (RatioOfSprays p q) = 
+  let leadingCoeff = snd $ leadingTerm q in
+  RatioOfSprays (p /^ leadingCoeff) (q /^ leadingCoeff)
 
 instance (AlgRing.C a, Eq a) => Eq (RatioOfSprays a) where
   (==) :: RatioOfSprays a -> RatioOfSprays a -> Bool
