diff --git a/Simulation/Aivika/IO/DES.hs b/Simulation/Aivika/IO/DES.hs
--- a/Simulation/Aivika/IO/DES.hs
+++ b/Simulation/Aivika/IO/DES.hs
@@ -27,6 +27,6 @@
 import Simulation.Aivika.IO.QueueStrategy
 
 -- | A template-based instantiation of the 'MonadDES' type class.
-instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m) => MonadDES m where
+instance (Monad m, MonadComp m, MonadIO m, MonadTemplate m, MonadEventQueueTemplate m) => MonadDES m where
 
   {-# SPECIALISE instance MonadDES IO #-}
diff --git a/Simulation/Aivika/IO/Event.hs b/Simulation/Aivika/IO/Event.hs
--- a/Simulation/Aivika/IO/Event.hs
+++ b/Simulation/Aivika/IO/Event.hs
@@ -29,7 +29,7 @@
 import Simulation.Aivika.Trans.Event
 
 -- | A template-based implementation of the 'EventQueueing' type class.
-instance (Monad m, MonadIO m, MonadTemplate m) => EventQueueing m where
+instance (Monad m, MonadIO m, MonadEventQueueTemplate m) => EventQueueing m where
 
   {-# SPECIALISE instance EventQueueing IO #-}
 
@@ -70,7 +70,7 @@
     liftIO . PQ.queueCount . queuePQ . runEventQueue . pointRun
 
 -- | Process the pending events.
-processPendingEventsCore :: (MonadIO m, MonadTemplate m) => Bool -> Dynamics m ()
+processPendingEventsCore :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m ()
 {-# INLINE processPendingEventsCore #-}
 processPendingEventsCore includingCurrentEvents = Dynamics r where
   r p =
@@ -105,7 +105,7 @@
                  call q p
 
 -- | Process the pending events synchronously, i.e. without past.
-processPendingEvents :: (MonadIO m, MonadTemplate m) => Bool -> Dynamics m ()
+processPendingEvents :: (MonadIO m, MonadEventQueueTemplate m) => Bool -> Dynamics m ()
 {-# INLINE processPendingEvents #-}
 processPendingEvents includingCurrentEvents = Dynamics r where
   r p =
@@ -120,27 +120,27 @@
   m = processPendingEventsCore includingCurrentEvents
 
 -- | A memoized value.
-processEventsIncludingCurrent :: (MonadIO m, MonadTemplate m) => Dynamics m ()
+processEventsIncludingCurrent :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()
 {-# INLINE processEventsIncludingCurrent #-}
 processEventsIncludingCurrent = processPendingEvents True
 
 -- | A memoized value.
-processEventsIncludingEarlier :: (MonadIO m, MonadTemplate m) => Dynamics m ()
+processEventsIncludingEarlier :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()
 {-# INLINE processEventsIncludingEarlier #-}
 processEventsIncludingEarlier = processPendingEvents False
 
 -- | A memoized value.
-processEventsIncludingCurrentCore :: (MonadIO m, MonadTemplate m) => Dynamics m ()
+processEventsIncludingCurrentCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()
 {-# INLINE processEventsIncludingCurrentCore #-}
 processEventsIncludingCurrentCore = processPendingEventsCore True
 
 -- | A memoized value.
-processEventsIncludingEarlierCore :: (MonadIO m, MonadTemplate m) => Dynamics m ()
+processEventsIncludingEarlierCore :: (MonadIO m, MonadEventQueueTemplate m) => Dynamics m ()
 {-# INLINE processEventsIncludingEarlierCore #-}
 processEventsIncludingEarlierCore = processPendingEventsCore True
 
 -- | Process the events.
-processEvents :: (MonadIO m, MonadTemplate m) => EventProcessing -> Dynamics m ()
+processEvents :: (MonadIO m, MonadEventQueueTemplate m) => EventProcessing -> Dynamics m ()
 {-# INLINABLE processEvents #-}
 processEvents CurrentEvents = processEventsIncludingCurrent
 processEvents EarlierEvents = processEventsIncludingEarlier
@@ -148,6 +148,6 @@
 processEvents EarlierEventsOrFromPast = processEventsIncludingEarlierCore
 
 -- | A template-based implementation of the 'EventIOQueueing' type class.
-instance (Monad m, MonadIO m, MonadTemplate m, MonadDES m) => EventIOQueueing m where
+instance (Monad m, MonadIO m, MonadEventQueueTemplate m, MonadDES m) => EventIOQueueing m where
 
   enqueueEventIO = enqueueEvent
diff --git a/Simulation/Aivika/Trans/Template.hs b/Simulation/Aivika/Trans/Template.hs
--- a/Simulation/Aivika/Trans/Template.hs
+++ b/Simulation/Aivika/Trans/Template.hs
@@ -7,15 +7,23 @@
 -- Stability  : experimental
 -- Tested with: GHC 8.0.1
 --
--- It defines an explicit type sub-class of 'IO'-based monads on top of which
+-- It defines explicit type sub-classes of 'IO'-based monads on top of which
 -- the simulation monads can be automatically generated.
 --
-module Simulation.Aivika.Trans.Template (MonadTemplate) where
+module Simulation.Aivika.Trans.Template
+       (MonadTemplate,
+        MonadEventQueueTemplate) where
 
 import Control.Monad.Trans
 
 -- | It defines a type class based on which the simulation computations can be automatically generated.
 class Monad m => MonadTemplate m
 
+-- | It defines a type class based on which the event queue can be automatically generated.
+class Monad m => MonadEventQueueTemplate m
+
 -- | An instance of the type class.
 instance MonadTemplate IO
+
+-- | An instance of the type class.
+instance MonadEventQueueTemplate IO
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:         4.5
+version:         4.5.1
 synopsis:        Transformers for the Aivika simulation library
 description:
     This package is a generalization of the aivika [1] simulation library
