diff --git a/hecc.cabal b/hecc.cabal
--- a/hecc.cabal
+++ b/hecc.cabal
@@ -1,5 +1,5 @@
 Name:                hecc
-Version:             0.4.1.0
+Version:             0.4.1.1
 Synopsis:	     Elliptic Curve Cryptography for Haskell
 Description:         Pure math & algorithms for Elliptic Curve Cryptography in Haskell. 
 		     The implementation should be timing-attack resistant, pure Haskell and reasonably fast.
diff --git a/src/Codec/Crypto/ECC/Base.hs b/src/Codec/Crypto/ECC/Base.hs
--- a/src/Codec/Crypto/ECC/Base.hs
+++ b/src/Codec/Crypto/ECC/Base.hs
@@ -12,7 +12,7 @@
 -----------------------------------------------------------------------------
 
 {-# OPTIONS_GHC -O2 -fllvm -optlo-O3 -feager-blackholing #-}
-{-# LANGUAGE GADTs, PatternGuards, FlexibleInstances #-}
+{-# LANGUAGE GADTs, PatternGuards, FlexibleInstances, BangPatterns #-}
 
 module Codec.Crypto.ECC.Base (EC(..),
                               getBitLength,
@@ -569,7 +569,7 @@
 montgladder b@(ECPa _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` (p - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
@@ -577,7 +577,7 @@
 montgladder b@(ECPp _ _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` (p - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
@@ -585,7 +585,7 @@
 montgladder b@(ECPj _ _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` (p - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
@@ -593,7 +593,7 @@
 montgladder b@(ECPmj _ _ _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` (p - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
@@ -601,7 +601,7 @@
 montgladder b@(ECPaF2 _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` ((F2.toInteger p) - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
@@ -609,7 +609,7 @@
 montgladder b@(ECPpF2 _ _ _ _) k'  = 
   let p = getp $ getCurve b
       k = k' `mod` ((F2.toInteger p) - 1)
-      ex p1 p2 i
+      ex !p1 !p2 i
         | i < 0 = p1
         | not (B.testBit k i) = ex (pdouble p1) (padd p1 p2) (i - 1)
         | otherwise = ex (padd p1 p2) (pdouble p2) (i - 1)
