diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,7 @@
 # mixed-types-num change log
 
+* v 0.5.5 2021-05-26
+  * powUsingMulRecip etc with custom multiply and recip operations
 * v 0.5.4 2021-05-21
   * remove Kleeneans (move them to aern2-mp)
 * v 0.5.3 2021-05-15
diff --git a/mixed-types-num.cabal b/mixed-types-num.cabal
--- a/mixed-types-num.cabal
+++ b/mixed-types-num.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: e8481fef82c6968e2cd9d5cd1e354653793e3030ec91c88a836dd8df6593752f
+-- hash: c613a879e0e3fe6ca50f14dc60091f6ac942b46a43b05cca7e39e7461f3cf2a4
 
 name:           mixed-types-num
-version:        0.5.4.0
+version:        0.5.5.0
 synopsis:       Alternative Prelude with numeric and logic expressions typed bottom-up
 description:    Please see the README on GitHub at <https://github.com/michalkonecny/mixed-types-num#readme>
 category:       Math
diff --git a/src/Numeric/MixedTypes/Elementary.hs b/src/Numeric/MixedTypes/Elementary.hs
--- a/src/Numeric/MixedTypes/Elementary.hs
+++ b/src/Numeric/MixedTypes/Elementary.hs
@@ -240,18 +240,16 @@
 powUsingExpLog ::
   (CanLogSameType t,
    CanExpSameType t,
-   CanMulSameType t,
    CanTestInteger t,
-   CanTestZero t,
-   CanRecipSameType t)
+   CanTestZero t)
   =>
-  t -> t -> t -> t
-powUsingExpLog one b e =
+   t -> (t -> t -> t) -> (t -> t) -> t -> t -> t
+powUsingExpLog one mul' recip' b e =
   case certainlyIntegerGetIt e of
     Just n ->
-      powUsingMulRecip one b n
+      powUsingMulRecip one mul' recip' b n
     Nothing ->
-      exp ((log b) * (e))
+      exp ((log b) `mul'` (e))
 
 {----  sine and cosine -----}
 
diff --git a/src/Numeric/MixedTypes/Power.hs b/src/Numeric/MixedTypes/Power.hs
--- a/src/Numeric/MixedTypes/Power.hs
+++ b/src/Numeric/MixedTypes/Power.hs
@@ -44,7 +44,7 @@
 -- import Numeric.MixedTypes.MinMaxAbs
 import Numeric.MixedTypes.AddSub
 import Numeric.MixedTypes.Ring
-import Numeric.MixedTypes.Div
+-- import Numeric.MixedTypes.Div ()
 
 
 
@@ -99,30 +99,30 @@
     CN.lift2 unsafePow b e
 
 powUsingMul ::
-  (CanBeInteger e,
-   CanMulSameType t)
+  (CanBeInteger e)
    =>
-   t -> t -> e -> t
-powUsingMul one x nPre
+   t -> (t -> t -> t) -> t -> e -> t
+powUsingMul one mul' x nPre
   | n < 0 = error $ "powUsingMul is not defined for negative exponent " ++ show n
   | n == 0 = one
   | otherwise = aux n
   where
+    (.*) = mul'
     n = integer nPre
     aux m
       | m == 1 = x
       | even m =
-        let s = aux (m `P.div` 2) in s * s
+        let s = aux (m `P.div` 2) in s .* s
       | otherwise =
-        let s = aux ((m-1) `P.div` 2) in x * s * s
+        let s = aux ((m-1) `P.div` 2) in x .* s .* s
 
 powUsingMulRecip ::
-  (CanBeInteger e, CanMulSameType b, CanRecipSameType b)
+  (CanBeInteger e)
    =>
-   b -> b -> e -> b
-powUsingMulRecip one x e
-  | eI < 0 = recip $ powUsingMul one x (negate eI)
-  | otherwise = powUsingMul one x eI
+   t -> (t -> t -> t) -> (t -> t) -> t -> e -> t
+powUsingMulRecip one mul' recip' x e
+  | eI < 0 = recip' $ powUsingMul one mul' x (negate eI)
+  | otherwise = powUsingMul one mul' x eI
   where
   eI = integer e
 
