diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
 
+Version 5.8
+-----
+
+* Satisfying a new requirement of the MonadMask class type.
+
 Version 5.7
 -----
 
diff --git a/Simulation/Aivika/Trans/Internal/Dynamics.hs b/Simulation/Aivika/Trans/Internal/Dynamics.hs
--- a/Simulation/Aivika/Trans/Internal/Dynamics.hs
+++ b/Simulation/Aivika/Trans/Internal/Dynamics.hs
@@ -277,6 +277,20 @@
   invokeDynamics p (a $ q u)
   where q u (Dynamics b) = Dynamics (u . b)
 
+-- | An implementation of 'generalBracket'.
+generalBracketDynamics :: MC.MonadMask m
+                          => Dynamics m a
+                          -> (a -> MC.ExitCase b -> Dynamics m c)
+                          -> (a -> Dynamics m b)
+                          -> Dynamics m (b, c)
+{-# INLINABLE generalBracketDynamics #-}
+generalBracketDynamics acquire release use =
+  Dynamics $ \p -> do
+    MC.generalBracket
+      (invokeDynamics p acquire)
+      (\resource e -> invokeDynamics p $ release resource e)
+      (\resource -> invokeDynamics p $ use resource)
+
 instance MonadFix m => MonadFix (Dynamics m) where
 
   {-# INLINE mfix #-}
@@ -301,6 +315,9 @@
   
   {-# INLINE uninterruptibleMask #-}
   uninterruptibleMask = uninterruptibleMaskDynamics
+  
+  {-# INLINE generalBracket #-}
+  generalBracket = generalBracketDynamics
 
 -- | Computation that returns the current simulation time.
 time :: Monad m => Dynamics m Double
diff --git a/Simulation/Aivika/Trans/Internal/Event.hs b/Simulation/Aivika/Trans/Internal/Event.hs
--- a/Simulation/Aivika/Trans/Internal/Event.hs
+++ b/Simulation/Aivika/Trans/Internal/Event.hs
@@ -183,6 +183,20 @@
   invokeEvent p (a $ q u)
   where q u (Event b) = Event (u . b)
 
+-- | An implementation of 'generalBracket'.
+generalBracketEvent :: MC.MonadMask m
+                       => Event m a
+                       -> (a -> MC.ExitCase b -> Event m c)
+                       -> (a -> Event m b)
+                       -> Event m (b, c)
+{-# INLINABLE generalBracketEvent #-}
+generalBracketEvent acquire release use =
+  Event $ \p -> do
+    MC.generalBracket
+      (invokeEvent p acquire)
+      (\resource e -> invokeEvent p $ release resource e)
+      (\resource -> invokeEvent p $ use resource)
+
 instance MonadFix m => MonadFix (Event m) where
 
   {-# INLINE mfix #-}
@@ -207,6 +221,9 @@
   
   {-# INLINE uninterruptibleMask #-}
   uninterruptibleMask = uninterruptibleMaskEvent
+  
+  {-# INLINE generalBracket #-}
+  generalBracket = generalBracketEvent
 
 -- | Run the 'Event' computation in the start time involving all
 -- pending 'CurrentEvents' in the processing too.
diff --git a/Simulation/Aivika/Trans/Internal/Parameter.hs b/Simulation/Aivika/Trans/Internal/Parameter.hs
--- a/Simulation/Aivika/Trans/Internal/Parameter.hs
+++ b/Simulation/Aivika/Trans/Internal/Parameter.hs
@@ -293,6 +293,20 @@
   invokeParameter r (a $ q u)
   where q u (Parameter b) = Parameter (u . b)
 
+-- | An implementation of 'generalBracket'.
+generalBracketParameter :: MC.MonadMask m
+                           => Parameter m a
+                           -> (a -> MC.ExitCase b -> Parameter m c)
+                           -> (a -> Parameter m b)
+                           -> Parameter m (b, c)
+{-# INLINABLE generalBracketParameter #-}
+generalBracketParameter acquire release use =
+  Parameter $ \r -> do
+    MC.generalBracket
+      (invokeParameter r acquire)
+      (\resource e -> invokeParameter r $ release resource e)
+      (\resource -> invokeParameter r $ use resource)
+
 instance MonadFix m => MonadFix (Parameter m) where
 
   {-# INLINE mfix #-}
@@ -317,6 +331,9 @@
   
   {-# INLINE uninterruptibleMask #-}
   uninterruptibleMask = uninterruptibleMaskParameter
+  
+  {-# INLINE generalBracket #-}
+  generalBracket = generalBracketParameter
 
 -- | Memoize the 'Parameter' computation, always returning the same value
 -- within a simulation run. However, the value will be recalculated for other
diff --git a/Simulation/Aivika/Trans/Internal/Simulation.hs b/Simulation/Aivika/Trans/Internal/Simulation.hs
--- a/Simulation/Aivika/Trans/Internal/Simulation.hs
+++ b/Simulation/Aivika/Trans/Internal/Simulation.hs
@@ -193,6 +193,20 @@
   invokeSimulation r (a $ q u)
   where q u (Simulation b) = Simulation (u . b)
 
+-- | An implementation of 'generalBracket'.
+generalBracketSimulation :: MC.MonadMask m
+                            => Simulation m a
+                            -> (a -> MC.ExitCase b -> Simulation m c)
+                            -> (a -> Simulation m b)
+                            -> Simulation m (b, c)
+{-# INLINABLE generalBracketSimulation #-}
+generalBracketSimulation acquire release use =
+  Simulation $ \r -> do
+    MC.generalBracket
+      (invokeSimulation r acquire)
+      (\resource e -> invokeSimulation r $ release resource e)
+      (\resource -> invokeSimulation r $ use resource)
+
 instance MonadFix m => MonadFix (Simulation m) where
 
   {-# INLINE mfix #-}
@@ -217,3 +231,6 @@
   
   {-# INLINE uninterruptibleMask #-}
   uninterruptibleMask = uninterruptibleMaskSimulation
+  
+  {-# INLINE generalBracket #-}
+  generalBracket = generalBracketSimulation
diff --git a/aivika-transformers.cabal b/aivika-transformers.cabal
--- a/aivika-transformers.cabal
+++ b/aivika-transformers.cabal
@@ -1,5 +1,5 @@
 name:            aivika-transformers
-version:         5.7
+version:         5.8
 synopsis:        Transformers for the Aivika simulation library
 description:
     This package is a generalization of the aivika [1] simulation library
@@ -176,8 +176,8 @@
                      mwc-random >= 0.13.0.0,
                      vector >= 0.10.0.1,
                      semigroups >= 0.10,
-                     exceptions >= 0.6,
-                     aivika >= 5.7
+                     exceptions >= 0.9.0,
+                     aivika >= 5.8
 
     other-extensions:   FlexibleContexts,
                         FlexibleInstances,
