diff --git a/hquantlib.cabal b/hquantlib.cabal
--- a/hquantlib.cabal
+++ b/hquantlib.cabal
@@ -1,5 +1,5 @@
 name:           hquantlib
-version:        0.0.2.5
+version:        0.0.3.0
 license:        LGPL
 license-file:   LICENSE
 author:         Pavel Ryzhov
@@ -48,7 +48,7 @@
                 QuantLib.Position
                 QuantLib.Options
                 QuantLib.Methods.MonteCarlo
-        
+
         other-modules:
                 QuantLib.Currencies.America
                 QuantLib.Currencies.Europe
@@ -61,19 +61,19 @@
                 QuantLib.Time.Date
                 QuantLib.Time.DayCounter
                 QuantLib.Math.InverseNormal
-        
-        build-depends:  
+
+        build-depends:
                         base            >3              && <5,
                         time            >= 1.4.0.0      && < 1.7.0.0,
                         containers      >= 0.5.0.0      && < 0.6.0.0,
-                        hmatrix         >= 0.16.0.0     && < 0.17.0.0,
-                        hmatrix-gsl     >= 0.16.0.0     && < 0.17.0.0,
-                        hmatrix-special >= 0.3.0        && < 0.4.0,
+                        hmatrix         >= 0.17.0.0     && < 0.18.0.0,
+                        hmatrix-gsl     >= 0.17.0.0     && < 0.18.0.0,
+                        hmatrix-special >= 0.4.0        && < 0.5.0,
                         parallel        >= 3.2.0.0      && < 3.3.0.0,
                         mersenne-random >= 1.0.0.1      && < 2.0.0.0,
                         statistics      >= 0.13.0.0     && < 0.14.0.0,
-                        vector          >= 0.10.0.0     && < 0.11.0.0,
-                        vector-algorithms >= 0.6.0.0    && < 0.7.0.0
+                        vector          >= 0.11.0.0     && < 0.12.0.0,
+                        vector-algorithms >= 0.7.0.0    && < 0.8.0.0
 
         hs-source-dirs: src
         ghc-options:    -Wall
@@ -89,6 +89,5 @@
                             test-framework  >= 0.8                && < 0.9,
                             test-framework-hunit >= 0.3.0         && < 0.4.0,
                             test-framework-quickcheck2 >= 0.3.0.0 && < 0.4.0,
-                            QuickCheck      >= 2.5.0              && < 2.6.0,
+                            QuickCheck      >= 2.8.0              && < 2.9.0,
                             HUnit           >= 1.2.5.2            && < 2.0.0.0
-
diff --git a/src/QuantLib/Event.hs b/src/QuantLib/Event.hs
--- a/src/QuantLib/Event.hs
+++ b/src/QuantLib/Event.hs
@@ -2,8 +2,8 @@
         (module QuantLib.Event
         ) where
 
-import QuantLib.Prices
-import QuantLib.Time.Date
+import           QuantLib.Prices
+import           QuantLib.Time.Date
 
 class Event a where
         evDate          :: a->Date
@@ -14,18 +14,18 @@
         evOccuredInclude event date = evDate event <= date
 
         evCompare :: a->a->Ordering
-        evCompare x y     
-                | evDate x == evDate y 		= EQ
-                | evDate x <= evDate y      	= LT
-                | otherwise                     = GT
+        evCompare x y
+                | evDate x == evDate y = EQ
+                | evDate x <= evDate y = LT
+                | otherwise            = GT
 
         evEqual :: a->a->Bool
         evEqual x y = evDate x == evDate y
 
 -- | Cash flows data type
 data CashFlow = CashFlow {
-        cfDate          :: Date,
-        cfAmount        :: Double
+        cfDate   :: Date,
+        cfAmount :: Double
         } deriving (Show)
 
 instance Event CashFlow where
@@ -40,12 +40,12 @@
 -- | Sequence of cash-flows
 type Leg        = [CashFlow]
 
-data Callability = Call { 
-        cPrice  :: CallPrice,
-        cDate   :: Date
+data Callability = Call {
+        cPrice :: CallPrice,
+        cDate  :: Date
         } | Put {
-        cPrice  :: CallPrice,
-        cDate   :: Date
+        cPrice :: CallPrice,
+        cDate  :: Date
         } deriving (Show)
 
 instance Event Callability where
diff --git a/src/QuantLib/Math/Copulas.hs b/src/QuantLib/Math/Copulas.hs
--- a/src/QuantLib/Math/Copulas.hs
+++ b/src/QuantLib/Math/Copulas.hs
@@ -1,9 +1,9 @@
 module QuantLib.Math.Copulas
-        ( Copula,
-          Copulas (..) 
+        ( Copula (..),
+          Copulas (..)
         ) where
 
-{-| Copula type class. 
+{-| Copula type class.
  -| Normally instance should implement only copulaFunc.
  -| Method copula provides a precheck for [0..1] range for x and y but real implementation is in copulaFunc
  -}
@@ -47,7 +47,7 @@
         copulaFunc (GalambosCopula theta)                   = galambosCopula theta
         copulaFunc (GaussianCopula rho)                     = gaussianCopula rho
         copulaFunc (GumbelCopula theta)                     = gumbelCopula theta
-        copulaFunc (HuslerReissCopula theta)                = huslerReissCopula theta 
+        copulaFunc (HuslerReissCopula theta)                = huslerReissCopula theta
         copulaFunc IndependentCopula                        = independentCopula
         copulaFunc (MarshallOlkinCopula a b)                = marshallOlkinCopula a b
         copulaFunc (PlackettCopula theta)                   = plackettCopula theta
@@ -69,17 +69,17 @@
                 = Nothing
 
 {-|  Original code and algorithm from the Quantlib project
-     implemented in Haskell by Nicholas Pezolano 
+     implemented in Haskell by Nicholas Pezolano
                                   npezolano "at" gmail.com
 -}
 claytonCopula :: Double -> Double -> Double -> Maybe Double
 claytonCopula theta x y
-	|  theta ==0 
-	|| theta < -1.0
-	 = Nothing
+  |  theta ==0
+  || theta < -1.0
+   = Nothing
 
-	| otherwise 
-	= Just $ max( (x ** (-theta) ) +   (y ** (-theta)-1.0)  **   (-1.0/theta)) 0
+   | otherwise
+   = Just $ max( (x ** (-theta) ) +   (y ** (-theta)-1.0)  **   (-1.0/theta)) 0
 
 minCopula ::  Ord a => a -> a -> Maybe a
 minCopula x y = Just (min x y)
@@ -91,7 +91,7 @@
 frankCopula theta x y
     | theta     == 0.0 = Nothing
     | otherwise = Just (-1.0/theta * log (1 + (exp (-theta*x) - 1.0) * (exp (-theta*y) -1.0) / (exp (-theta) - 1.0)   ))
- 
+
 galambosCopula ::  (Floating a, Ord a) => a -> a -> a -> Maybe a
 galambosCopula theta x y
     | theta <= 0.0  = Nothing
diff --git a/src/QuantLib/Methods/MonteCarlo.hs b/src/QuantLib/Methods/MonteCarlo.hs
--- a/src/QuantLib/Methods/MonteCarlo.hs
+++ b/src/QuantLib/Methods/MonteCarlo.hs
@@ -1,12 +1,14 @@
-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, BangPatterns #-}
+{-# LANGUAGE BangPatterns           #-}
+{-# LANGUAGE FunctionalDependencies #-}
+{-# LANGUAGE MultiParamTypeClasses  #-}
 module QuantLib.Methods.MonteCarlo
         ( module QuantLib.Methods.MonteCarlo
         ) where
 
-import Control.Monad()
-import Control.Parallel.Strategies
-import QuantLib.Stochastic.Process
-import QuantLib.Stochastic.Random
+import           Control.Monad               ()
+import           Control.Parallel.Strategies
+import           QuantLib.Stochastic.Process
+import           QuantLib.Stochastic.Random
 
 -- | Summary type class aggregates all priced values of paths
 class PathPricer p => Summary m p | m->p where
@@ -26,18 +28,18 @@
 
 
 -- | Monte Carlo engine function
-monteCarlo :: (Summary s p, PathPricer p, PathGenerator g) => PathMonteCarlo s p g->Int->IO s
+monteCarlo :: (Summary s p, PathGenerator g) => PathMonteCarlo s p g->Int->IO s
 monteCarlo (PathMonteCarlo s p g) size = do
-        priced <- mapM (\_ -> pricing) [1..size]
+        priced <- mapM (const pricing) [1..size]
         return $ sSummarize s priced
         where   pricing = do
                         !path <- pgGenerate g
                         return $! ppPrice p path
 
 -- | Monte Carlo engine function. Parallelized version
-monteCarloParallel :: (Summary s p, PathPricer p, PathGenerator g) => PathMonteCarlo s p g->Int->IO s
+monteCarloParallel :: (Summary s p, PathGenerator g) => PathMonteCarlo s p g->Int->IO s
 monteCarloParallel (PathMonteCarlo s p g) size = do
-        priced <- mapM (\_ -> pricing) [1..size] `using` rpar
+        priced <- mapM (const pricing) [1..size] `using` rpar
         return $ sSummarize s priced
         where   pricing = do
                         !path <- pgGenerate g
@@ -46,25 +48,25 @@
 -- | Path-dependant Monte Carlo engine
 data PathMonteCarlo s p g =
         PathMonteCarlo {
-                pmcSummary      :: s,
-                pmcPricer       :: p,
-                pmcGenerator    :: g
+                pmcSummary   :: s,
+                pmcPricer    :: p,
+                pmcGenerator :: g
         }
 
 -- | This pricer gets the last point of path
 data LastPointPricer = LastPointPricer Dot
 
 instance PathPricer LastPointPricer where
-        ppPrice _ path = LastPointPricer (last path) 
+        ppPrice _ path = LastPointPricer (last path)
 
 -- | Stochastic process generator
-data ProcessGenerator sp b d = 
+data ProcessGenerator sp b d =
         ProcessGenerator {
-                pgStart         :: Dot,
-                pgLength        :: Int,
-                pgProcess       :: sp,
-                pgGenerator     :: b,
-                pgDiscretize    :: d
+                pgStart      :: Dot,
+                pgLength     :: Int,
+                pgProcess    :: sp,
+                pgGenerator  :: b,
+                pgDiscretize :: d
         }
 
 instance (StochasticProcess sp, NormalGenerator b, Discretize d) => PathGenerator (ProcessGenerator sp b d) where
@@ -72,4 +74,3 @@
                 newRnd <- ngMkNew rnd
                 return $! ProcessGenerator start len process newRnd d
         pgGenerate (ProcessGenerator start len sp b d) = generatePath b d sp len start
-
diff --git a/src/QuantLib/Stochastic/Process.hs b/src/QuantLib/Stochastic/Process.hs
--- a/src/QuantLib/Stochastic/Process.hs
+++ b/src/QuantLib/Stochastic/Process.hs
@@ -3,9 +3,9 @@
         ( module QuantLib.Stochastic.Process )
         where
 
-import Control.Monad (foldM)
-import Data.List (foldl')
-import QuantLib.Stochastic.Random (NormalGenerator (..))
+import           Control.Monad              (foldM)
+import           Data.List                  (foldl')
+import           QuantLib.Stochastic.Random (NormalGenerator (..))
 
 -- | Discretization of stochastic process over given interval
 class Discretize b where
@@ -21,7 +21,7 @@
         evolve discr p dot dw = Dot newT newX
                 where   !newT = getT dot + dDt p discr dot
                         !newX = getX dot + dDrift p discr dot + dDiff p discr dot * dw
- 
+
 -- | Dot. t and x pair
 data Dot = Dot { getT :: {-# UNPACK #-} !Double, getX :: {-# UNPACK #-} !Double }
         deriving (Show, Eq)
@@ -42,9 +42,9 @@
 
 
 -- | Geometric Brownian motion
-data GeometricBrownian = GeometricBrownian { 
-        gbDrift :: Double, 
-        gbDiff :: Double 
+data GeometricBrownian = GeometricBrownian {
+        gbDrift :: Double,
+        gbDiff  :: Double
         } deriving (Show)
 
 instance StochasticProcess GeometricBrownian where
@@ -52,9 +52,9 @@
         diff  p (Dot _ x) = gbDiff p  * x
 
 -- | Ito process
-data ItoProcess = ItoProcess { 
-        ipDrift :: Dot->Double, 
-        ipDiff :: Dot->Double 
+data ItoProcess = ItoProcess {
+        ipDrift :: Dot->Double,
+        ipDiff  :: Dot->Double
         }
 
 instance StochasticProcess ItoProcess where
@@ -62,10 +62,10 @@
         diff    = ipDiff
 
 -- | Square-root process
-data SquareRootProcess = SquareRootProcess { 
-        srpSpeed        :: Double, 
-        srpMean         :: Double,
-        srpSigma        :: Double
+data SquareRootProcess = SquareRootProcess {
+        srpSpeed :: Double,
+        srpMean  :: Double,
+        srpSigma :: Double
         } deriving (Show)
 
 instance StochasticProcess SquareRootProcess where
@@ -74,9 +74,9 @@
 
 -- | Ornstein-Uhlenbeck process
 data OrnsteinUhlenbeckProcess = OrnsteinUhlenbeckProcess {
-        oupSpeed        :: Double,
-        oupLevel        :: Double,
-        oupSigma        :: Double
+        oupSpeed :: Double,
+        oupLevel :: Double,
+        oupSigma :: Double
         } deriving (Show)
 
 instance StochasticProcess OrnsteinUhlenbeckProcess where
@@ -85,13 +85,11 @@
 
 -- | Generalized Black-Scholes process
 data BlackScholesProcess = BlackScholesProcess {
-        bspRiskFree     :: Double->Double,
-        bspDividend     :: Double->Double,
-        bspBlackVol     :: Dot->Double
+        bspRiskFree :: Double->Double,
+        bspDividend :: Double->Double,
+        bspBlackVol :: Dot->Double
         }
 
 instance StochasticProcess BlackScholesProcess where
-        drift (BlackScholesProcess r q v) dot 	= r (getT dot) - q ( getT dot) - 0.5 * v dot ** 2 
-        diff    				= bspBlackVol
-
-
+        drift (BlackScholesProcess r q v) dot = r (getT dot) - q ( getT dot) - 0.5 * v dot ** 2
+        diff = bspBlackVol
