diff --git a/Simulation/Aivika/IO.hs b/Simulation/Aivika/IO.hs
--- a/Simulation/Aivika/IO.hs
+++ b/Simulation/Aivika/IO.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module re-exports the most part of the library functionality related
 -- to 'IO'-based computations.
diff --git a/Simulation/Aivika/IO/Comp.hs b/Simulation/Aivika/IO/Comp.hs
--- a/Simulation/Aivika/IO/Comp.hs
+++ b/Simulation/Aivika/IO/Comp.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Comp
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- It allows making the 'MonadIO'-based monad an instance of type class 'MonadComp'
 -- on top of which the simulation monads can be built.
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
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.DES
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- It allows making the 'MonadIO'-based monad an instance of type class 'MonadDES'
 -- used for Discrete Event Simulation (DES).
diff --git a/Simulation/Aivika/IO/Dynamics/Memo.hs b/Simulation/Aivika/IO/Dynamics/Memo.hs
--- a/Simulation/Aivika/IO/Dynamics/Memo.hs
+++ b/Simulation/Aivika/IO/Dynamics/Memo.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Dynamics.Memo
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- The 'MonadIO'-based monad can be an instance of the 'MonadMemo' type class.
 --
diff --git a/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs b/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
--- a/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
+++ b/Simulation/Aivika/IO/Dynamics/Memo/Unboxed.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Dynamics.Memo.Unboxed
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- The 'MonadIO'-based monad can be an instance of the 'MonadMemo' type class.
 --
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
@@ -3,14 +3,14 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Event
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- The module defines a template-based event queue, where
--- the 'MonadIO'-based monad can be an instance of 'EventQueueing'.
+-- the 'MonadIO'-based monad can be an instance of 'EventQueueing' and 'EventIOQueueing'.
 --
 module Simulation.Aivika.IO.Event () where
 
@@ -26,6 +26,7 @@
 import Simulation.Aivika.Trans.Comp
 import Simulation.Aivika.Trans.Template
 import Simulation.Aivika.Trans.Internal.Types
+import Simulation.Aivika.Trans.Event
 
 -- | A template-based implementation of the 'EventQueueing' type class.
 instance (Monad m, MonadIO m, MonadTemplate m) => EventQueueing m where
@@ -145,3 +146,8 @@
 processEvents EarlierEvents = processEventsIncludingEarlier
 processEvents CurrentEventsOrFromPast = processEventsIncludingCurrentCore
 processEvents EarlierEventsOrFromPast = processEventsIncludingEarlierCore
+
+-- | A template-based implementation of the 'EventIOQueueing' type class.
+instance (Monad m, MonadIO m, MonadTemplate m, MonadDES m) => EventIOQueueing m where
+
+  enqueueEventIO = enqueueEvent
diff --git a/Simulation/Aivika/IO/Exception.hs b/Simulation/Aivika/IO/Exception.hs
--- a/Simulation/Aivika/IO/Exception.hs
+++ b/Simulation/Aivika/IO/Exception.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Exception
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It provides with exception handling capabilities,
 -- where 'IO' is an instance of 'MonadException'.
diff --git a/Simulation/Aivika/IO/Generator.hs b/Simulation/Aivika/IO/Generator.hs
--- a/Simulation/Aivika/IO/Generator.hs
+++ b/Simulation/Aivika/IO/Generator.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Generator
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- Here is defined a random number generator, where
 -- the 'MonadIO'-based monad can be an instance of 'MonadGenerator'.
diff --git a/Simulation/Aivika/IO/QueueStrategy.hs b/Simulation/Aivika/IO/QueueStrategy.hs
--- a/Simulation/Aivika/IO/QueueStrategy.hs
+++ b/Simulation/Aivika/IO/QueueStrategy.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.QueueStrategy
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some queue strategy instances
 -- for the 'MonadIO'-based computations.
diff --git a/Simulation/Aivika/IO/Ref/Base.hs b/Simulation/Aivika/IO/Ref/Base.hs
--- a/Simulation/Aivika/IO/Ref/Base.hs
+++ b/Simulation/Aivika/IO/Ref/Base.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Ref.Base
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The 'MonadIO'-based monad can be an instance of 'MonadRef'.
 --
diff --git a/Simulation/Aivika/IO/Resource/Preemption.hs b/Simulation/Aivika/IO/Resource/Preemption.hs
--- a/Simulation/Aivika/IO/Resource/Preemption.hs
+++ b/Simulation/Aivika/IO/Resource/Preemption.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Resource.Preemption
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the preemptible resource, where
 -- the 'MonadIO'-based monad can be an instance of 'MonadResource'.
diff --git a/Simulation/Aivika/IO/Resource/Preemption/Base.hs b/Simulation/Aivika/IO/Resource/Preemption/Base.hs
--- a/Simulation/Aivika/IO/Resource/Preemption/Base.hs
+++ b/Simulation/Aivika/IO/Resource/Preemption/Base.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the optimised preemptible resource, where
 -- the 'MonadIO'-based monad can be an instance of 'MonadResource'.
diff --git a/Simulation/Aivika/IO/SD.hs b/Simulation/Aivika/IO/SD.hs
--- a/Simulation/Aivika/IO/SD.hs
+++ b/Simulation/Aivika/IO/SD.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.SD
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- It allows making the 'MonadIO'-based monad an instance of type class 'MonadSD'
 -- used for System Dynamics (SD).
diff --git a/Simulation/Aivika/IO/Signal.hs b/Simulation/Aivika/IO/Signal.hs
--- a/Simulation/Aivika/IO/Signal.hs
+++ b/Simulation/Aivika/IO/Signal.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Signal
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module allows collecting the signal history.
 --
diff --git a/Simulation/Aivika/IO/Var.hs b/Simulation/Aivika/IO/Var.hs
--- a/Simulation/Aivika/IO/Var.hs
+++ b/Simulation/Aivika/IO/Var.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Var
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- The 'MonadIO'-based monad can be an instance 'MonadVar'.
 --
diff --git a/Simulation/Aivika/IO/Var/Unboxed.hs b/Simulation/Aivika/IO/Var/Unboxed.hs
--- a/Simulation/Aivika/IO/Var/Unboxed.hs
+++ b/Simulation/Aivika/IO/Var/Unboxed.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.IO.Var.Unboxed
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- The 'MonadIO'-based monad can be an instance 'MonadVar'.
 --
diff --git a/Simulation/Aivika/Trans.hs b/Simulation/Aivika/Trans.hs
--- a/Simulation/Aivika/Trans.hs
+++ b/Simulation/Aivika/Trans.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module re-exports the most part of the library functionality.
 -- There are modules that must be imported explicitly, though.
@@ -30,6 +30,7 @@
         module Simulation.Aivika.Trans.Generator,
         module Simulation.Aivika.Trans.Net,
         module Simulation.Aivika.Trans.Net.Random,
+        module Simulation.Aivika.Trans.Observable,
         module Simulation.Aivika.Trans.Operation,
         module Simulation.Aivika.Trans.Operation.Random,
         module Simulation.Aivika.Trans.Parameter,
@@ -80,6 +81,7 @@
 import Simulation.Aivika.Trans.Generator
 import Simulation.Aivika.Trans.Net
 import Simulation.Aivika.Trans.Net.Random
+import Simulation.Aivika.Trans.Observable
 import Simulation.Aivika.Trans.Operation
 import Simulation.Aivika.Trans.Operation.Random
 import Simulation.Aivika.Trans.Parameter
diff --git a/Simulation/Aivika/Trans/Activity.hs b/Simulation/Aivika/Trans/Activity.hs
--- a/Simulation/Aivika/Trans/Activity.hs
+++ b/Simulation/Aivika/Trans/Activity.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Activity
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It models an activity that can be utilised. The activity is similar to a 'Server'
 -- but destined for simulation within 'Net' computation.
diff --git a/Simulation/Aivika/Trans/Activity/Random.hs b/Simulation/Aivika/Trans/Activity/Random.hs
--- a/Simulation/Aivika/Trans/Activity/Random.hs
+++ b/Simulation/Aivika/Trans/Activity/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Activity.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some useful predefined activities that
 -- hold the current process for the corresponding random time
diff --git a/Simulation/Aivika/Trans/Agent.hs b/Simulation/Aivika/Trans/Agent.hs
--- a/Simulation/Aivika/Trans/Agent.hs
+++ b/Simulation/Aivika/Trans/Agent.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Agent
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module introduces basic entities for the agent-based modeling.
 --
diff --git a/Simulation/Aivika/Trans/Array.hs b/Simulation/Aivika/Trans/Array.hs
--- a/Simulation/Aivika/Trans/Array.hs
+++ b/Simulation/Aivika/Trans/Array.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Array
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines helper functions for creating mutable arrays.
 --
diff --git a/Simulation/Aivika/Trans/Arrival.hs b/Simulation/Aivika/Trans/Arrival.hs
--- a/Simulation/Aivika/Trans/Arrival.hs
+++ b/Simulation/Aivika/Trans/Arrival.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Arrival
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the types and functions for working with the events
 -- that can represent something that arrive from outside the model, or
diff --git a/Simulation/Aivika/Trans/Circuit.hs b/Simulation/Aivika/Trans/Circuit.hs
--- a/Simulation/Aivika/Trans/Circuit.hs
+++ b/Simulation/Aivika/Trans/Circuit.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Circuit
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It represents a circuit synchronized with the event queue.
 -- Also it allows creating the recursive links with help of
diff --git a/Simulation/Aivika/Trans/Comp.hs b/Simulation/Aivika/Trans/Comp.hs
--- a/Simulation/Aivika/Trans/Comp.hs
+++ b/Simulation/Aivika/Trans/Comp.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Comp
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines a type class of monads based on which the simulation monads can be built.
 --
diff --git a/Simulation/Aivika/Trans/Cont.hs b/Simulation/Aivika/Trans/Cont.hs
--- a/Simulation/Aivika/Trans/Cont.hs
+++ b/Simulation/Aivika/Trans/Cont.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Cont
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The 'Cont' monad is a variation of the standard Cont monad 
 -- and F# async workflow, where the result of applying 
diff --git a/Simulation/Aivika/Trans/DES.hs b/Simulation/Aivika/Trans/DES.hs
--- a/Simulation/Aivika/Trans/DES.hs
+++ b/Simulation/Aivika/Trans/DES.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.DES
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines a type class of monads for Discrete Event Simulation (DES).
 --
diff --git a/Simulation/Aivika/Trans/DoubleLinkedList.hs b/Simulation/Aivika/Trans/DoubleLinkedList.hs
--- a/Simulation/Aivika/Trans/DoubleLinkedList.hs
+++ b/Simulation/Aivika/Trans/DoubleLinkedList.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.DoubleLinkedList
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- An imperative double-linked list.
 --
diff --git a/Simulation/Aivika/Trans/Dynamics.hs b/Simulation/Aivika/Trans/Dynamics.hs
--- a/Simulation/Aivika/Trans/Dynamics.hs
+++ b/Simulation/Aivika/Trans/Dynamics.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Dynamics
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Dynamics' monad tranformer representing a time varying polymorphic function. 
 --
diff --git a/Simulation/Aivika/Trans/Dynamics/Extra.hs b/Simulation/Aivika/Trans/Dynamics/Extra.hs
--- a/Simulation/Aivika/Trans/Dynamics/Extra.hs
+++ b/Simulation/Aivika/Trans/Dynamics/Extra.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Dynamics.Extra
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines auxiliary functions such as interpolation ones
 -- that complement the memoization, for example. There are scan functions too.
diff --git a/Simulation/Aivika/Trans/Dynamics/Memo.hs b/Simulation/Aivika/Trans/Dynamics/Memo.hs
--- a/Simulation/Aivika/Trans/Dynamics/Memo.hs
+++ b/Simulation/Aivika/Trans/Dynamics/Memo.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Dynamics.Memo
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines memo functions. The memoization creates such 'Dynamics'
 -- computations, which values are cached in the integration time points. Then
diff --git a/Simulation/Aivika/Trans/Dynamics/Memo/Unboxed.hs b/Simulation/Aivika/Trans/Dynamics/Memo/Unboxed.hs
--- a/Simulation/Aivika/Trans/Dynamics/Memo/Unboxed.hs
+++ b/Simulation/Aivika/Trans/Dynamics/Memo/Unboxed.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Dynamics.Memo.Unboxed
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the unboxed memo functions. The memoization creates such 'Dynamics'
 -- computations, which values are cached in the integration time points. Then
diff --git a/Simulation/Aivika/Trans/Dynamics/Random.hs b/Simulation/Aivika/Trans/Dynamics/Random.hs
--- a/Simulation/Aivika/Trans/Dynamics/Random.hs
+++ b/Simulation/Aivika/Trans/Dynamics/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Dynamics.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the random functions that always return the same values
 -- in the integration time points within a single simulation run. The values
diff --git a/Simulation/Aivika/Trans/Event.hs b/Simulation/Aivika/Trans/Event.hs
--- a/Simulation/Aivika/Trans/Event.hs
+++ b/Simulation/Aivika/Trans/Event.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Event
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Event' monad which is very similar to the 'Dynamics'
 -- monad but only now the computation is strongly synchronized with the event queue.
@@ -20,6 +20,8 @@
         -- * Event Queue
         EventQueueing(..),
         enqueueEventWithCancellation,
+        enqueueEventWithStartTime,
+        enqueueEventWithStopTime,
         enqueueEventWithTimes,
         enqueueEventWithIntegTimes,
         yieldEvent,
@@ -39,6 +41,12 @@
         DisposableEvent(..),
         -- * Retrying Computation
         retryEvent,
+        -- * Synchronizing IO Actions
+        EventIOQueueing(..),
+        enqueueEventIOWithStartTime,
+        enqueueEventIOWithStopTime,
+        enqueueEventIOWithTimes,
+        enqueueEventIOWithIntegTimes,
         -- * Debugging
         traceEvent) where
 
diff --git a/Simulation/Aivika/Trans/Exception.hs b/Simulation/Aivika/Trans/Exception.hs
--- a/Simulation/Aivika/Trans/Exception.hs
+++ b/Simulation/Aivika/Trans/Exception.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Exception
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines a type class of monads with exception handling capabilities.
 --
diff --git a/Simulation/Aivika/Trans/Gate.hs b/Simulation/Aivika/Trans/Gate.hs
--- a/Simulation/Aivika/Trans/Gate.hs
+++ b/Simulation/Aivika/Trans/Gate.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Gate
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines a gate which can be either opened or closed.
 --
diff --git a/Simulation/Aivika/Trans/Generator.hs b/Simulation/Aivika/Trans/Generator.hs
--- a/Simulation/Aivika/Trans/Generator.hs
+++ b/Simulation/Aivika/Trans/Generator.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Generator
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- Below is defined a random number generator.
 --
diff --git a/Simulation/Aivika/Trans/Generator/Primitive.hs b/Simulation/Aivika/Trans/Generator/Primitive.hs
--- a/Simulation/Aivika/Trans/Generator/Primitive.hs
+++ b/Simulation/Aivika/Trans/Generator/Primitive.hs
@@ -5,7 +5,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This helper module defines primitives for generating random numbers.
 --
diff --git a/Simulation/Aivika/Trans/Internal/Cont.hs b/Simulation/Aivika/Trans/Internal/Cont.hs
--- a/Simulation/Aivika/Trans/Internal/Cont.hs
+++ b/Simulation/Aivika/Trans/Internal/Cont.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Cont
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The 'Cont' monad is a variation of the standard Cont monad 
 -- and F# async workflow, where the result of applying 
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
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Dynamics
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Dynamics' monad transformer representing a time varying polymorphic function. 
 --
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
@@ -1,13 +1,13 @@
 
-{-# LANGUAGE RecursiveDo, MultiParamTypeClasses, FlexibleInstances #-}
+{-# LANGUAGE RecursiveDo, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Event
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Event' monad transformer which is very similar to the 'Dynamics'
 -- monad transformer but only now the computation is strongly synchronized with the event queue.
@@ -23,6 +23,8 @@
         -- * Event Queue
         EventQueueing(..),
         enqueueEventWithCancellation,
+        enqueueEventWithStartTime,
+        enqueueEventWithStopTime,
         enqueueEventWithTimes,
         enqueueEventWithPoints,
         enqueueEventWithIntegTimes,
@@ -43,6 +45,13 @@
         DisposableEvent(..),
         -- * Retrying Computation
         retryEvent,
+        -- * Synchronizing IO Actions
+        EventIOQueueing(..),
+        enqueueEventIOWithStartTime,
+        enqueueEventIOWithStopTime,
+        enqueueEventIOWithTimes,
+        enqueueEventIOWithPoints,
+        enqueueEventIOWithIntegTimes,
         -- * Debugging
         traceEvent) where
 
@@ -198,6 +207,22 @@
   let points = integPointsStartingFrom p
   in invokeEvent p $ enqueueEventWithPoints points e
 
+-- | Actuate the event handler in the start time point.
+enqueueEventWithStartTime :: MonadDES m => Event m () -> Event m ()
+{-# INLINABLE enqueueEventWithStartTime #-}
+enqueueEventWithStartTime e =
+  Event $ \p ->
+  let p0 = integStartPoint $ pointRun p
+  in invokeEvent p $ enqueueEventWithPoints [p0] e
+
+-- | Actuate the event handler in the final time point.
+enqueueEventWithStopTime :: MonadDES m => Event m () -> Event m ()
+{-# INLINABLE enqueueEventWithStopTime #-}
+enqueueEventWithStopTime e =
+  Event $ \p ->
+  let p0 = integStopPoint $ pointRun p
+  in invokeEvent p $ enqueueEventWithPoints [p0] e
+
 -- | It allows cancelling the event.
 data EventCancellation m =
   EventCancellation { cancelEvent :: Event m (),
@@ -300,7 +325,9 @@
   mappend (DisposableEvent x) (DisposableEvent y) = DisposableEvent $ x >> y
 
 -- | Retry the current computation as possible, using the specified argument
--- as a 'SimulationRetry' exception message in case of failure.
+-- as a 'SimulationRetry' exception message in case of failure. It makes sense
+-- for parallel distributed simulation, when we have to make a rollback,
+-- awaiting for incoming messages.
 retryEvent :: MonadException m => String -> Event m a
 retryEvent message = throwEvent $ SimulationRetry message
 
@@ -311,3 +338,60 @@
   Event $ \p ->
   trace ("t = " ++ show (pointTime p) ++ ": " ++ message) $
   invokeEvent p m
+
+-- | A type class of monads that allows synchronizing the global modeling time
+-- before calling the event handler so that it is rather safe to perform 'IO' actions
+-- within such a handler. It is mainly destined for parallel distributed simulation,
+-- but it should be supported in other cases too.
+--
+class (EventQueueing m, MonadIO (Event m)) => EventIOQueueing m where
+
+  -- | Like 'enqueueEvent' but synchronizes the global modeling time before
+  -- calling the specified event handler.
+  enqueueEventIO :: Double -> Event m () -> Event m ()
+
+-- | Like 'enqueueEventWithTimes' but synchronizes the global modeling time
+-- before calling the specified event handler.
+enqueueEventIOWithTimes :: (MonadDES m, EventIOQueueing m) => [Double] -> Event m () -> Event m ()
+{-# INLINABLE enqueueEventIOWithTimes #-}
+enqueueEventIOWithTimes ts e = loop ts
+  where loop []       = return ()
+        loop (t : ts) = enqueueEventIO t $ e >> loop ts
+       
+-- | Like 'enqueueEventWithPoints' but synchronizes the global modeling time
+-- before calling the specified event handler.
+enqueueEventIOWithPoints :: (MonadDES m, EventIOQueueing m) => [Point m] -> Event m () -> Event m ()
+{-# INLINABLE enqueueEventIOWithPoints #-}
+enqueueEventIOWithPoints xs (Event e) = loop xs
+  where loop []       = return ()
+        loop (x : xs) = enqueueEventIO (pointTime x) $ 
+                        Event $ \p ->
+                        do e x    -- N.B. we substitute the time point!
+                           invokeEvent p $ loop xs
+                           
+-- | Like 'enqueueEventWithIntegTimes' but synchronizes the global modeling time
+-- before calling the specified event handler.
+enqueueEventIOWithIntegTimes :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+{-# INLINABLE enqueueEventIOWithIntegTimes #-}
+enqueueEventIOWithIntegTimes e =
+  Event $ \p ->
+  let points = integPointsStartingFrom p
+  in invokeEvent p $ enqueueEventIOWithPoints points e
+
+-- | Like 'enqueueEventWithStartTime' but synchronizes the global modeling time
+-- before calling the specified event handler.
+enqueueEventIOWithStartTime :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+{-# INLINABLE enqueueEventIOWithStartTime #-}
+enqueueEventIOWithStartTime e =
+  Event $ \p ->
+  let p0 = integStartPoint $ pointRun p
+  in invokeEvent p $ enqueueEventIOWithPoints [p0] e
+
+-- | Like 'enqueueEventWithStopTime' but synchronizes the global modeling time
+-- before calling the specified event handler.
+enqueueEventIOWithStopTime :: (MonadDES m, EventIOQueueing m) => Event m () -> Event m ()
+{-# INLINABLE enqueueEventIOWithStopTime #-}
+enqueueEventIOWithStopTime e =
+  Event $ \p ->
+  let p0 = integStopPoint $ pointRun p
+  in invokeEvent p $ enqueueEventIOWithPoints [p0] e
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
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Parameter
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Parameter' monad transformer that allows representing the model
 -- parameters. For example, they can be used when running the Monte-Carlo simulation.
diff --git a/Simulation/Aivika/Trans/Internal/Process.hs b/Simulation/Aivika/Trans/Internal/Process.hs
--- a/Simulation/Aivika/Trans/Internal/Process.hs
+++ b/Simulation/Aivika/Trans/Internal/Process.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Process
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- A value in the 'Process' monad represents a discontinuous process that 
 -- can suspend in any simulation time point and then resume later in the same 
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
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Simulation
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Simulation' monad transformer that represents a computation
 -- within the simulation run.
diff --git a/Simulation/Aivika/Trans/Internal/Specs.hs b/Simulation/Aivika/Trans/Internal/Specs.hs
--- a/Simulation/Aivika/Trans/Internal/Specs.hs
+++ b/Simulation/Aivika/Trans/Internal/Specs.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Specs
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines the simulation specs and related stuff.
 module Simulation.Aivika.Trans.Internal.Specs
diff --git a/Simulation/Aivika/Trans/Internal/Types.hs b/Simulation/Aivika/Trans/Internal/Types.hs
--- a/Simulation/Aivika/Trans/Internal/Types.hs
+++ b/Simulation/Aivika/Trans/Internal/Types.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Internal.Types
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines the implementation details of some types. You should never
 -- use it in ordinary simulation models. The module is destined for those
diff --git a/Simulation/Aivika/Trans/Net.hs b/Simulation/Aivika/Trans/Net.hs
--- a/Simulation/Aivika/Trans/Net.hs
+++ b/Simulation/Aivika/Trans/Net.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Net
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines a 'Net' arrow that can be applied to modeling the queue networks
 -- like the 'Processor' arrow from another module. Only the former has a more efficient
diff --git a/Simulation/Aivika/Trans/Net/Random.hs b/Simulation/Aivika/Trans/Net/Random.hs
--- a/Simulation/Aivika/Trans/Net/Random.hs
+++ b/Simulation/Aivika/Trans/Net/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Net.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some useful random network computations that
 -- hold the current process for the corresponding time interval,
diff --git a/Simulation/Aivika/Trans/Observable.hs b/Simulation/Aivika/Trans/Observable.hs
new file mode 100644
--- /dev/null
+++ b/Simulation/Aivika/Trans/Observable.hs
@@ -0,0 +1,24 @@
+
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
+
+-- |
+-- Module     : Simulation.Aivika.Trans.Observable
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
+-- License    : BSD3
+-- Maintainer : David Sorokin <david.sorokin@gmail.com>
+-- Stability  : experimental
+-- Tested with: GHC 8.0.1
+--
+-- This module defines an observable entity, which value can be read within some computation.
+--
+module Simulation.Aivika.Trans.Observable
+       (Observable(..)) where
+
+import Control.Monad
+import Control.Monad.Trans
+
+-- | A class of observable entities.
+class Observable o m where
+
+  -- | Read the observable entity value within the specified computation.
+  readObservable :: o a -> m a
diff --git a/Simulation/Aivika/Trans/Operation.hs b/Simulation/Aivika/Trans/Operation.hs
--- a/Simulation/Aivika/Trans/Operation.hs
+++ b/Simulation/Aivika/Trans/Operation.hs
@@ -5,7 +5,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- It defines a stateless activity, some simplification of 'Server' and 'Activity'.
 module Simulation.Aivika.Trans.Operation
diff --git a/Simulation/Aivika/Trans/Operation/Random.hs b/Simulation/Aivika/Trans/Operation/Random.hs
--- a/Simulation/Aivika/Trans/Operation/Random.hs
+++ b/Simulation/Aivika/Trans/Operation/Random.hs
@@ -5,7 +5,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some useful predefined operations that
 -- hold the current process for the corresponding random time
diff --git a/Simulation/Aivika/Trans/Parameter.hs b/Simulation/Aivika/Trans/Parameter.hs
--- a/Simulation/Aivika/Trans/Parameter.hs
+++ b/Simulation/Aivika/Trans/Parameter.hs
@@ -1,10 +1,10 @@
 -- |
 -- Module     : Simulation.Aivika.Trans.Parameter
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Parameter' monad transformer that allows representing the model
 -- parameters. For example, they can be used when running the Monte-Carlo simulation.
diff --git a/Simulation/Aivika/Trans/Parameter/Random.hs b/Simulation/Aivika/Trans/Parameter/Random.hs
--- a/Simulation/Aivika/Trans/Parameter/Random.hs
+++ b/Simulation/Aivika/Trans/Parameter/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Parameter.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the random parameters of simulation experiments.
 --
diff --git a/Simulation/Aivika/Trans/Process.hs b/Simulation/Aivika/Trans/Process.hs
--- a/Simulation/Aivika/Trans/Process.hs
+++ b/Simulation/Aivika/Trans/Process.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Process
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- A value in the 'Process' monad represents a discontinuous process that 
 -- can suspend in any simulation time point and then resume later in the same 
diff --git a/Simulation/Aivika/Trans/Process/Random.hs b/Simulation/Aivika/Trans/Process/Random.hs
--- a/Simulation/Aivika/Trans/Process/Random.hs
+++ b/Simulation/Aivika/Trans/Process/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Process.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines helper functions, which are useful to hold 
 -- the 'Process' computation for a time interval according to some
diff --git a/Simulation/Aivika/Trans/Processor.hs b/Simulation/Aivika/Trans/Processor.hs
--- a/Simulation/Aivika/Trans/Processor.hs
+++ b/Simulation/Aivika/Trans/Processor.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Processor
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The processor of simulation data.
 --
diff --git a/Simulation/Aivika/Trans/Processor/Random.hs b/Simulation/Aivika/Trans/Processor/Random.hs
--- a/Simulation/Aivika/Trans/Processor/Random.hs
+++ b/Simulation/Aivika/Trans/Processor/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Processor.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some useful random processors that
 -- hold the current process for the corresponding time interval,
diff --git a/Simulation/Aivika/Trans/Processor/RoundRobbin.hs b/Simulation/Aivika/Trans/Processor/RoundRobbin.hs
--- a/Simulation/Aivika/Trans/Processor/RoundRobbin.hs
+++ b/Simulation/Aivika/Trans/Processor/RoundRobbin.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Processor.RoundRobbin
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the Round-Robbin processor.
 --
diff --git a/Simulation/Aivika/Trans/Queue.hs b/Simulation/Aivika/Trans/Queue.hs
--- a/Simulation/Aivika/Trans/Queue.hs
+++ b/Simulation/Aivika/Trans/Queue.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Queue
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines a queue that can use the specified strategies. So, having only
 -- the 'FCFS', 'LCFS', 'SIRO' and 'StaticPriorities' strategies, you can build
diff --git a/Simulation/Aivika/Trans/Queue/Base.hs b/Simulation/Aivika/Trans/Queue/Base.hs
--- a/Simulation/Aivika/Trans/Queue/Base.hs
+++ b/Simulation/Aivika/Trans/Queue/Base.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an optimised finite queue, which has no counters nor signals.
 --
diff --git a/Simulation/Aivika/Trans/Queue/Infinite.hs b/Simulation/Aivika/Trans/Queue/Infinite.hs
--- a/Simulation/Aivika/Trans/Queue/Infinite.hs
+++ b/Simulation/Aivika/Trans/Queue/Infinite.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Queue.Infinite
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an infinite queue that can use the specified strategies.
 --
diff --git a/Simulation/Aivika/Trans/Queue/Infinite/Base.hs b/Simulation/Aivika/Trans/Queue/Infinite/Base.hs
--- a/Simulation/Aivika/Trans/Queue/Infinite/Base.hs
+++ b/Simulation/Aivika/Trans/Queue/Infinite/Base.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an infinite optimised queue, which has no counters nor signals.
 --
diff --git a/Simulation/Aivika/Trans/QueueStrategy.hs b/Simulation/Aivika/Trans/QueueStrategy.hs
--- a/Simulation/Aivika/Trans/QueueStrategy.hs
+++ b/Simulation/Aivika/Trans/QueueStrategy.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.QueueStrategy
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the queue strategies.
 --
diff --git a/Simulation/Aivika/Trans/Ref.hs b/Simulation/Aivika/Trans/Ref.hs
--- a/Simulation/Aivika/Trans/Ref.hs
+++ b/Simulation/Aivika/Trans/Ref.hs
@@ -1,11 +1,13 @@
 
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, UndecidableInstances #-}
+
 -- |
 -- Module     : Simulation.Aivika.Trans.Ref
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an updatable reference that depends on the event queue.
 --
@@ -29,6 +31,7 @@
 import Simulation.Aivika.Trans.Signal
 import qualified Simulation.Aivika.Trans.Ref.Base as B
 import Simulation.Aivika.Trans.DES
+import Simulation.Aivika.Trans.Observable
 
 -- | The 'Ref' type represents a mutable variable similar to the 'IORef' variable 
 -- but only dependent on the event queue, which allows synchronizing the reference
@@ -91,3 +94,8 @@
 
   {-# INLINE (==) #-}
   r1 == r2 = (refValue r1) == (refValue r2)
+
+instance (MonadDES m, Observable (B.Ref m) (t m))  => Observable (Ref m) (t m) where
+
+  {-# INLINE readObservable #-}
+  readObservable r = readObservable (refValue r)
diff --git a/Simulation/Aivika/Trans/Ref/Base.hs b/Simulation/Aivika/Trans/Ref/Base.hs
--- a/Simulation/Aivika/Trans/Ref/Base.hs
+++ b/Simulation/Aivika/Trans/Ref/Base.hs
@@ -1,13 +1,13 @@
 
-{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Ref.Base
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines a plain and more fast version of an updatable reference
 -- that depends on the event queue but that doesn't supply with the signal notification.
@@ -22,11 +22,12 @@
 import Control.Monad.Trans
 
 import Simulation.Aivika.Trans.Internal.Types
+import Simulation.Aivika.Trans.Observable
 
 -- | A monad within which we can create mutable references.
 class Monad m => MonadRef m where
 
-  -- | The 'ProtoRef' type represents a mutable variable similar to the 'IORef' variable 
+  -- | The 'Ref' type represents a mutable variable similar to the 'IORef' variable 
   -- but only dependent on the event queue, which allows synchronizing the reference
   -- with the model explicitly through the 'Event' monad.
   data Ref m a
@@ -56,3 +57,8 @@
 
   -- | Create a new reference within more low level computation than 'Simulation'.
   newRef0 :: a -> m (Ref m a)
+
+instance (Monad m, MonadRef m) => Observable (Ref m) (Event m) where
+
+  {-# INLINE readObservable #-}
+  readObservable = readRef
diff --git a/Simulation/Aivika/Trans/Resource.hs b/Simulation/Aivika/Trans/Resource.hs
--- a/Simulation/Aivika/Trans/Resource.hs
+++ b/Simulation/Aivika/Trans/Resource.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the resource which can be acquired and 
 -- then released by the discontinuous process 'Process'.
diff --git a/Simulation/Aivika/Trans/Resource/Base.hs b/Simulation/Aivika/Trans/Resource/Base.hs
--- a/Simulation/Aivika/Trans/Resource/Base.hs
+++ b/Simulation/Aivika/Trans/Resource/Base.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an optimised version of the resource 
 -- which can be acquired and then released by the discontinuous 
diff --git a/Simulation/Aivika/Trans/Resource/Preemption.hs b/Simulation/Aivika/Trans/Resource/Preemption.hs
--- a/Simulation/Aivika/Trans/Resource/Preemption.hs
+++ b/Simulation/Aivika/Trans/Resource/Preemption.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Resource.Preemption
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the preemptible resource.
 --
diff --git a/Simulation/Aivika/Trans/Resource/Preemption/Base.hs b/Simulation/Aivika/Trans/Resource/Preemption/Base.hs
--- a/Simulation/Aivika/Trans/Resource/Preemption/Base.hs
+++ b/Simulation/Aivika/Trans/Resource/Preemption/Base.hs
@@ -7,7 +7,7 @@
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.3
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the preemptible resource.
 --
diff --git a/Simulation/Aivika/Trans/Results.hs b/Simulation/Aivika/Trans/Results.hs
--- a/Simulation/Aivika/Trans/Results.hs
+++ b/Simulation/Aivika/Trans/Results.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Results
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module allows exporting the simulation results from the model.
 --
diff --git a/Simulation/Aivika/Trans/Results/IO.hs b/Simulation/Aivika/Trans/Results/IO.hs
--- a/Simulation/Aivika/Trans/Results/IO.hs
+++ b/Simulation/Aivika/Trans/Results/IO.hs
@@ -1,11 +1,13 @@
 
+{-# LANGUAGE FlexibleContexts #-}
+
 -- |
 -- Module     : Simulation.Aivika.Trans.Results.IO
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module allows printing and converting the 'Simulation' 'Results' to a 'String'.
 --
@@ -48,6 +50,15 @@
         printResultSource,
         printResultSourceInRussian,
         printResultSourceInEnglish,
+        -- * Enqueue Printing of the Result Source
+        hEnqueuePrintingResultSourceIndented,
+        hEnqueuePrintingResultSource,
+        hEnqueuePrintingResultSourceInRussian,
+        hEnqueuePrintingResultSourceInEnglish,
+        enqueuePrintingResultSourceIndented,
+        enqueuePrintingResultSource,
+        enqueuePrintingResultSourceInRussian,
+        enqueuePrintingResultSourceInEnglish,
         -- * Showing the Result Source
         showResultSourceIndented,
         showResultSource,
@@ -68,6 +79,7 @@
 import Simulation.Aivika.Trans.Simulation
 import Simulation.Aivika.Trans.Dynamics
 import Simulation.Aivika.Trans.Event
+import Simulation.Aivika.Trans.Ref
 import Simulation.Aivika.Trans.Results
 import Simulation.Aivika.Trans.Results.Locale
 
@@ -81,7 +93,7 @@
 
 -- | Print a localised text representation of the results by the specified source
 -- and with the given indent.
-hPrintResultSourceIndented :: (MonadDES m, MonadIO m)
+hPrintResultSourceIndented :: (MonadDES m, MonadIO (Event m))
                               => Handle
                               -- ^ a handle
                               -> Int
@@ -101,7 +113,7 @@
 
 -- | Print an indented and labelled text representation of the results by
 -- the specified source.
-hPrintResultSourceIndentedLabelled :: (MonadDES m, MonadIO m)
+hPrintResultSourceIndentedLabelled :: (MonadDES m, MonadIO (Event m))
                                       => Handle
                                       -- ^ a handle
                                       -> Int
@@ -167,7 +179,7 @@
 
 -- | Print a localised text representation of the results by the specified source
 -- and with the given indent.
-printResultSourceIndented :: (MonadDES m, MonadIO m)
+printResultSourceIndented :: (MonadDES m, MonadIO (Event m))
                              => Int
                              -- ^ an indent
                              -> ResultLocalisation
@@ -177,7 +189,7 @@
 printResultSourceIndented = hPrintResultSourceIndented stdout
 
 -- | Print a localised text representation of the results by the specified source.
-hPrintResultSource :: (MonadDES m, MonadIO m)
+hPrintResultSource :: (MonadDES m, MonadIO (Event m))
                       => Handle
                       -- ^ a handle
                       -> ResultLocalisation
@@ -187,7 +199,7 @@
 hPrintResultSource h = hPrintResultSourceIndented h 0
 
 -- | Print a localised text representation of the results by the specified source.
-printResultSource :: (MonadDES m, MonadIO m)
+printResultSource :: (MonadDES m, MonadIO (Event m))
                      => ResultLocalisation
                      -- ^ a localisation
                      -> ResultSourcePrint m
@@ -195,25 +207,90 @@
 printResultSource = hPrintResultSource stdout
 
 -- | Print in Russian a text representation of the results by the specified source.
-hPrintResultSourceInRussian :: (MonadDES m, MonadIO m) => Handle -> ResultSourcePrint m
+hPrintResultSourceInRussian :: (MonadDES m, MonadIO (Event m)) => Handle -> ResultSourcePrint m
 {-# INLINABLE hPrintResultSourceInRussian #-}
 hPrintResultSourceInRussian h = hPrintResultSource h russianResultLocalisation
 
 -- | Print in English a text representation of the results by the specified source.
-hPrintResultSourceInEnglish :: (MonadDES m, MonadIO m) => Handle -> ResultSourcePrint m
+hPrintResultSourceInEnglish :: (MonadDES m, MonadIO (Event m)) => Handle -> ResultSourcePrint m
 {-# INLINABLE hPrintResultSourceInEnglish #-}
 hPrintResultSourceInEnglish h = hPrintResultSource h englishResultLocalisation
 
 -- | Print in Russian a text representation of the results by the specified source.
-printResultSourceInRussian :: (MonadDES m, MonadIO m) => ResultSourcePrint m
+printResultSourceInRussian :: (MonadDES m, MonadIO (Event m)) => ResultSourcePrint m
 {-# INLINABLE printResultSourceInRussian #-}
 printResultSourceInRussian = hPrintResultSourceInRussian stdout
 
 -- | Print in English a text representation of the results by the specified source.
-printResultSourceInEnglish :: (MonadDES m, MonadIO m) => ResultSourcePrint m
+printResultSourceInEnglish :: (MonadDES m, MonadIO (Event m)) => ResultSourcePrint m
 {-# INLINABLE printResultSourceInEnglish #-}
 printResultSourceInEnglish = hPrintResultSourceInEnglish stdout
 
+-- | Enqueue printing of a localised text representation of the results by the specified source
+-- and with the given indent.
+hEnqueuePrintingResultSourceIndented :: (MonadDES m, EventIOQueueing m)
+                                        => Handle
+                                        -- ^ a handle
+                                        -> Int
+                                        -- ^ an indent
+                                        -> ResultLocalisation
+                                        -- ^ a localisation
+                                        -> ResultSourcePrint m
+{-# INLINABLE hEnqueuePrintingResultSourceIndented #-}
+hEnqueuePrintingResultSourceIndented h indent loc source =
+  do t <- liftDynamics time
+     enqueueEventIO t $
+       hPrintResultSourceIndented h indent loc source
+
+-- | Enqueue printing of a localised text representation of the results by the specified source
+-- and with the given indent.
+enqueuePrintingResultSourceIndented :: (MonadDES m, EventIOQueueing m)
+                                       => Int
+                                       -- ^ an indent
+                                       -> ResultLocalisation
+                                       -- ^ a localisation
+                                       -> ResultSourcePrint m
+{-# INLINABLE enqueuePrintingResultSourceIndented #-}
+enqueuePrintingResultSourceIndented = hEnqueuePrintingResultSourceIndented stdout
+
+-- | Enqueue printing of a localised text representation of the results by the specified source.
+hEnqueuePrintingResultSource :: (MonadDES m, EventIOQueueing m)
+                                => Handle
+                                -- ^ a handle
+                                -> ResultLocalisation
+                                -- ^ a localisation
+                                -> ResultSourcePrint m
+{-# INLINABLE hEnqueuePrintingResultSource #-}
+hEnqueuePrintingResultSource h = hEnqueuePrintingResultSourceIndented h 0
+
+-- | Enqueue printing of a localised text representation of the results by the specified source.
+enqueuePrintingResultSource :: (MonadDES m, EventIOQueueing m)
+                               => ResultLocalisation
+                               -- ^ a localisation
+                               -> ResultSourcePrint m
+{-# INLINABLE enqueuePrintingResultSource #-}
+enqueuePrintingResultSource = hEnqueuePrintingResultSource stdout
+
+-- | Enqueue printing in Russian of a text representation of the results by the specified source.
+hEnqueuePrintingResultSourceInRussian :: (MonadDES m, EventIOQueueing m) => Handle -> ResultSourcePrint m
+{-# INLINABLE hEnqueuePrintingResultSourceInRussian #-}
+hEnqueuePrintingResultSourceInRussian h = hEnqueuePrintingResultSource h russianResultLocalisation
+
+-- | Enqueue printing in English of a text representation of the results by the specified source.
+hEnqueuePrintingResultSourceInEnglish :: (MonadDES m, EventIOQueueing m) => Handle -> ResultSourcePrint m
+{-# INLINABLE hEnqueuePrintingResultSourceInEnglish #-}
+hEnqueuePrintingResultSourceInEnglish h = hEnqueuePrintingResultSource h englishResultLocalisation
+
+-- | Enqueue printing in Russian of a text representation of the results by the specified source.
+enqueuePrintingResultSourceInRussian :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m
+{-# INLINABLE enqueuePrintingResultSourceInRussian #-}
+enqueuePrintingResultSourceInRussian = hEnqueuePrintingResultSourceInRussian stdout
+
+-- | Enqueue printing in English of a text representation of the results by the specified source.
+enqueuePrintingResultSourceInEnglish :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m
+{-# INLINABLE enqueuePrintingResultSourceInEnglish #-}
+enqueuePrintingResultSourceInEnglish = hEnqueuePrintingResultSourceInEnglish stdout
+
 -- | Show a localised text representation of the results by the specified source
 -- and with the given indent.
 showResultSourceIndented :: MonadDES m
@@ -317,7 +394,7 @@
 showResultSourceInEnglish = showResultSource englishResultLocalisation
 
 -- | Print the results with the information about the modeling time.
-printResultsWithTime :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Results m -> Event m ()
+printResultsWithTime :: (MonadDES m, MonadIO (Event m)) => ResultSourcePrint m -> Results m -> Event m ()
 {-# INLINABLE printResultsWithTime #-}
 printResultsWithTime print results =
   do let x1 = textResultSource "----------"
@@ -331,43 +408,54 @@
      -- print x3
 
 -- | Print the simulation results in start time.
-printResultsInStartTime :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Results m -> Simulation m ()
+printResultsInStartTime :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Results m -> Simulation m ()
 {-# INLINABLE printResultsInStartTime #-}
 printResultsInStartTime print results =
-  runEventInStartTime $ printResultsWithTime print results
+  do runEventInStartTime $
+       enqueueEventIOWithStartTime $
+       printResultsWithTime print results
+     runEventInStopTime $
+       return ()
 
 -- | Print the simulation results in stop time.
-printResultsInStopTime :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Results m -> Simulation m ()
+printResultsInStopTime :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Results m -> Simulation m ()
 {-# INLINABLE printResultsInStopTime #-}
 printResultsInStopTime print results =
-  runEventInStopTime $ printResultsWithTime print results
+  do runEventInStartTime $
+       enqueueEventIOWithStopTime $
+       printResultsWithTime print results
+     runEventInStopTime $
+       return ()
 
 -- | Print the simulation results in the integration time points.
-printResultsInIntegTimes :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Results m -> Simulation m ()
+printResultsInIntegTimes :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Results m -> Simulation m ()
 {-# INLINABLE printResultsInIntegTimes #-}
 printResultsInIntegTimes print results =
-  do let loop (m : ms) = m >> loop ms
-         loop [] = return ()
-     ms <- runDynamicsInIntegTimes $ runEvent $
-           printResultsWithTime print results
-     liftComp $ loop ms
+  do runEventInStartTime $
+       enqueueEventIOWithIntegTimes $
+       printResultsWithTime print results
+     runEventInStopTime $
+       return ()
 
 -- | Print the simulation results in the specified time.
-printResultsInTime :: (MonadDES m, MonadIO m) => Double -> ResultSourcePrint m -> Results m -> Simulation m ()
+printResultsInTime :: (MonadDES m, EventIOQueueing m) => Double -> ResultSourcePrint m -> Results m -> Simulation m ()
 {-# INLINABLE printResultsInTime #-}
 printResultsInTime t print results =
-  runDynamicsInTime t $ runEvent $
-  printResultsWithTime print results
+  do runEventInStartTime $
+       enqueueEventIO t $
+       printResultsWithTime print results
+     runEventInStopTime $
+       return ()
 
 -- | Print the simulation results in the specified time points.
-printResultsInTimes :: (MonadDES m, MonadIO m) => [Double] -> ResultSourcePrint m -> Results m -> Simulation m ()
+printResultsInTimes :: (MonadDES m, EventIOQueueing m) => [Double] -> ResultSourcePrint m -> Results m -> Simulation m ()
 {-# INLINABLE printResultsInTimes #-}
 printResultsInTimes ts print results =
-  do let loop (m : ms) = m >> loop ms
-         loop [] = return ()
-     ms <- runDynamicsInTimes ts $ runEvent $
-           printResultsWithTime print results
-     liftComp $ loop ms
+  do runEventInStartTime $
+       enqueueEventIOWithTimes ts $
+       printResultsWithTime print results
+     runEventInStopTime $
+       return ()
 
 -- | Show the results with the information about the modeling time.
 showResultsWithTime :: MonadDES m => ResultSourceShowS m -> Results m -> Event m ShowS
@@ -392,7 +480,8 @@
 showResultsInStartTime :: MonadDES m => ResultSourceShowS m -> Results m -> Simulation m ShowS
 {-# INLINABLE showResultsInStartTime #-}
 showResultsInStartTime f results =
-  runEventInStartTime $ showResultsWithTime f results
+  do g <- runEventInStartTime $ showResultsWithTime f results
+     runEventInStopTime $ return g
 
 -- | Show the simulation results in stop time.
 showResultsInStopTime :: MonadDES m => ResultSourceShowS m -> Results m -> Simulation m ShowS
@@ -407,18 +496,25 @@
 showResultsInIntegTimes :: MonadDES m => ResultSourceShowS m -> Results m -> Simulation m ShowS
 {-# INLINABLE showResultsInIntegTimes #-}
 showResultsInIntegTimes f results =
-  do let loop (m : ms) = return (.) `ap` m `ap` loop ms
-         loop [] = return id
-     ms <- runDynamicsInIntegTimes $ runEvent $
-           showResultsWithTime f results
-     liftComp $ loop ms
+  do r <- newRef id
+     runEventInStartTime $
+       enqueueEventWithIntegTimes $
+       do g <- showResultsWithTime f results
+          modifyRef r (. g)
+     runEventInStopTime $
+       readRef r
 
 -- | Show the simulation results in the specified time point.
 showResultsInTime :: MonadDES m => Double -> ResultSourceShowS m -> Results m -> Simulation m ShowS
 {-# INLINABLE showResultsInTime #-}
 showResultsInTime t f results =
-  runDynamicsInTime t $ runEvent $
-  showResultsWithTime f results
+  do r <- newRef id
+     runEventInStartTime $
+       enqueueEvent t $
+       do g <- showResultsWithTime f results
+          writeRef r g
+     runEventInStopTime $
+       readRef r
 
 -- | Show the simulation results in the specified time points.
 --
@@ -427,42 +523,44 @@
 showResultsInTimes :: MonadDES m => [Double] -> ResultSourceShowS m -> Results m -> Simulation m ShowS
 {-# INLINABLE showResultsInTimes #-}
 showResultsInTimes ts f results =
-  do let loop (m : ms) = return (.) `ap` m `ap` loop ms
-         loop [] = return id
-     ms <- runDynamicsInTimes ts $ runEvent $
-           showResultsWithTime f results
-     liftComp $ loop ms
+  do r <- newRef id
+     runEventInStartTime $
+       enqueueEventWithTimes ts $
+       do g <- showResultsWithTime f results
+          modifyRef r (. g)
+     runEventInStopTime $
+       readRef r
 
 -- | Run the simulation and then print the results in the start time.
-printSimulationResultsInStartTime :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
+printSimulationResultsInStartTime :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
 {-# INLINABLE printSimulationResultsInStartTime #-}
 printSimulationResultsInStartTime print model specs =
   flip runSimulation specs $
   model >>= printResultsInStartTime print
 
 -- | Run the simulation and then print the results in the final time.
-printSimulationResultsInStopTime :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
+printSimulationResultsInStopTime :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
 {-# INLINABLE printSimulationResultsInStopTime #-}
 printSimulationResultsInStopTime print model specs =
   flip runSimulation specs $
   model >>= printResultsInStopTime print
 
 -- | Run the simulation and then print the results in the integration time points.
-printSimulationResultsInIntegTimes :: (MonadDES m, MonadIO m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
+printSimulationResultsInIntegTimes :: (MonadDES m, EventIOQueueing m) => ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
 {-# INLINABLE printSimulationResultsInIntegTimes #-}
 printSimulationResultsInIntegTimes print model specs =
   flip runSimulation specs $
   model >>= printResultsInIntegTimes print
 
 -- | Run the simulation and then print the results in the specified time point.
-printSimulationResultsInTime :: (MonadDES m, MonadIO m) => Double -> ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
+printSimulationResultsInTime :: (MonadDES m, EventIOQueueing m) => Double -> ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
 {-# INLINABLE printSimulationResultsInTime #-}
 printSimulationResultsInTime t print model specs =
   flip runSimulation specs $
   model >>= printResultsInTime t print
 
 -- | Run the simulation and then print the results in the specified time points.
-printSimulationResultsInTimes :: (MonadDES m, MonadIO m) => [Double] -> ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
+printSimulationResultsInTimes :: (MonadDES m, EventIOQueueing m) => [Double] -> ResultSourcePrint m -> Simulation m (Results m) -> Specs m -> m ()
 {-# INLINABLE printSimulationResultsInTimes #-}
 printSimulationResultsInTimes ts print model specs =
   flip runSimulation specs $
diff --git a/Simulation/Aivika/Trans/Results/Locale.hs b/Simulation/Aivika/Trans/Results/Locale.hs
--- a/Simulation/Aivika/Trans/Results/Locale.hs
+++ b/Simulation/Aivika/Trans/Results/Locale.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Results.Locale
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines locales for outputting and printing the simulation results.
 --
diff --git a/Simulation/Aivika/Trans/SD.hs b/Simulation/Aivika/Trans/SD.hs
--- a/Simulation/Aivika/Trans/SD.hs
+++ b/Simulation/Aivika/Trans/SD.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.SD
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines a type class of monads for System Dynamics (SD).
 --
diff --git a/Simulation/Aivika/Trans/Server.hs b/Simulation/Aivika/Trans/Server.hs
--- a/Simulation/Aivika/Trans/Server.hs
+++ b/Simulation/Aivika/Trans/Server.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Server
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It models the server that prodives a service.
 module Simulation.Aivika.Trans.Server
diff --git a/Simulation/Aivika/Trans/Server/Random.hs b/Simulation/Aivika/Trans/Server/Random.hs
--- a/Simulation/Aivika/Trans/Server/Random.hs
+++ b/Simulation/Aivika/Trans/Server/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Server.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines some useful predefined servers that
 -- hold the current process for the corresponding random time
diff --git a/Simulation/Aivika/Trans/Signal.hs b/Simulation/Aivika/Trans/Signal.hs
--- a/Simulation/Aivika/Trans/Signal.hs
+++ b/Simulation/Aivika/Trans/Signal.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Signal
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the signal which we can subscribe handlers to. 
 -- These handlers can be disposed. The signal is triggered in the 
diff --git a/Simulation/Aivika/Trans/Simulation.hs b/Simulation/Aivika/Trans/Simulation.hs
--- a/Simulation/Aivika/Trans/Simulation.hs
+++ b/Simulation/Aivika/Trans/Simulation.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Simulation
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines the 'Simulation' monad transformer that represents a simulation run.
 -- 
diff --git a/Simulation/Aivika/Trans/Specs.hs b/Simulation/Aivika/Trans/Specs.hs
--- a/Simulation/Aivika/Trans/Specs.hs
+++ b/Simulation/Aivika/Trans/Specs.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Specs
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines the simulation specs and functions for this data type.
 module Simulation.Aivika.Trans.Specs
diff --git a/Simulation/Aivika/Trans/Statistics.hs b/Simulation/Aivika/Trans/Statistics.hs
--- a/Simulation/Aivika/Trans/Statistics.hs
+++ b/Simulation/Aivika/Trans/Statistics.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Statistics
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- Represents statistics.
 --
diff --git a/Simulation/Aivika/Trans/Statistics/Accumulator.hs b/Simulation/Aivika/Trans/Statistics/Accumulator.hs
--- a/Simulation/Aivika/Trans/Statistics/Accumulator.hs
+++ b/Simulation/Aivika/Trans/Statistics/Accumulator.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Statistics.Accumulator
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This small utility module allows accumulating the timing statistics based on 'Signalable' data
 -- such as the queue size or the number of lost items in the queue.
diff --git a/Simulation/Aivika/Trans/Stream.hs b/Simulation/Aivika/Trans/Stream.hs
--- a/Simulation/Aivika/Trans/Stream.hs
+++ b/Simulation/Aivika/Trans/Stream.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Stream
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The infinite stream of data in time.
 --
diff --git a/Simulation/Aivika/Trans/Stream/Random.hs b/Simulation/Aivika/Trans/Stream/Random.hs
--- a/Simulation/Aivika/Trans/Stream/Random.hs
+++ b/Simulation/Aivika/Trans/Stream/Random.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Stream.Random
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines random streams of events, which are useful
 -- for describing the input of the model.
diff --git a/Simulation/Aivika/Trans/SystemDynamics.hs b/Simulation/Aivika/Trans/SystemDynamics.hs
--- a/Simulation/Aivika/Trans/SystemDynamics.hs
+++ b/Simulation/Aivika/Trans/SystemDynamics.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.SystemDynamics
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines integrals and other functions of System Dynamics.
 --
diff --git a/Simulation/Aivika/Trans/Table.hs b/Simulation/Aivika/Trans/Table.hs
--- a/Simulation/Aivika/Trans/Table.hs
+++ b/Simulation/Aivika/Trans/Table.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Table
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines the table functions.
 --
diff --git a/Simulation/Aivika/Trans/Task.hs b/Simulation/Aivika/Trans/Task.hs
--- a/Simulation/Aivika/Trans/Task.hs
+++ b/Simulation/Aivika/Trans/Task.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Task
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The 'Task' value represents a process that was already started in background.
 -- We can check the completion of the task, receive notifications about changing
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
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Template
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- It defines an explicit type sub-class of 'IO'-based monads on top of which
 -- the simulation monads can be automatically generated.
diff --git a/Simulation/Aivika/Trans/Transform.hs b/Simulation/Aivika/Trans/Transform.hs
--- a/Simulation/Aivika/Trans/Transform.hs
+++ b/Simulation/Aivika/Trans/Transform.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Transform
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- The module defines something which is most close to the notion of
 -- analogous circuit as an opposite to the digital one.
@@ -93,15 +93,15 @@
        c' <- g b
        return $ liftM2 (,) c c'
 
-instance (MonadSD m, MonadFix m) => ArrowLoop (Transform m) where
-
-  {-# INLINABLE loop #-}
-  loop (Transform f) =
-    Transform $ \b ->
-    mdo let bd = liftM2 (,) b d
-        cd <- f bd
-        (c, d) <- M.unzip0Dynamics cd
-        return c
+-- instance (MonadSD m, MonadFix m) => ArrowLoop (Transform m) where
+-- 
+--   {-# INLINABLE loop #-}
+--   loop (Transform f) =
+--     Transform $ \b ->
+--     mdo let bd = liftM2 (,) b d
+--         cd <- f bd
+--         (c, d) <- M.unzip0Dynamics cd
+--         return c
 
 -- | A transform that returns the current modeling time.
 timeTransform :: Monad m => Transform m a Double
diff --git a/Simulation/Aivika/Trans/Transform/Extra.hs b/Simulation/Aivika/Trans/Transform/Extra.hs
--- a/Simulation/Aivika/Trans/Transform/Extra.hs
+++ b/Simulation/Aivika/Trans/Transform/Extra.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Transform.Extra
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines auxiliary computations such as interpolation ones
 -- that complement the memoization, for example. There are scan computations too.
diff --git a/Simulation/Aivika/Trans/Transform/Memo.hs b/Simulation/Aivika/Trans/Transform/Memo.hs
--- a/Simulation/Aivika/Trans/Transform/Memo.hs
+++ b/Simulation/Aivika/Trans/Transform/Memo.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Transform.Memo
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines memoization transforms. The memoization creates such 'Dynamics'
 -- computations, which values are cached in the integration time points. Then
diff --git a/Simulation/Aivika/Trans/Transform/Memo/Unboxed.hs b/Simulation/Aivika/Trans/Transform/Memo/Unboxed.hs
--- a/Simulation/Aivika/Trans/Transform/Memo/Unboxed.hs
+++ b/Simulation/Aivika/Trans/Transform/Memo/Unboxed.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Transform.Memo.Unboxed
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines the unboxed memoization transforms. The memoization creates such 'Dynamics'
 -- computations, which values are cached in the integration time points. Then
diff --git a/Simulation/Aivika/Trans/Var.hs b/Simulation/Aivika/Trans/Var.hs
--- a/Simulation/Aivika/Trans/Var.hs
+++ b/Simulation/Aivika/Trans/Var.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Var
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines a variable that is bound up with the event queue and 
 -- that keeps the history of changes storing the values in arrays, which
diff --git a/Simulation/Aivika/Trans/Var/Unboxed.hs b/Simulation/Aivika/Trans/Var/Unboxed.hs
--- a/Simulation/Aivika/Trans/Var/Unboxed.hs
+++ b/Simulation/Aivika/Trans/Var/Unboxed.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Trans.Var.Unboxed
--- Copyright  : Copyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2009-2016, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
--- Tested with: GHC 7.10.1
+-- Tested with: GHC 8.0.1
 --
 -- This module defines an unboxed variable that is bound up with the event queue and 
 -- that keeps the history of changes storing the values in unboxed arrays, which
diff --git a/aivika-transformers.cabal b/aivika-transformers.cabal
--- a/aivika-transformers.cabal
+++ b/aivika-transformers.cabal
@@ -1,8 +1,8 @@
 name:            aivika-transformers
-version:         4.3.5
+version:         4.5
 synopsis:        Transformers for the Aivika simulation library
 description:
-    This package is a generalization of the Aivika [1] simulation library
+    This package is a generalization of the aivika [1] simulation library
     with extensive use of monad transformers and type families.
     .
     \[1] <http://hackage.haskell.org/package/aivika>
@@ -70,6 +70,7 @@
                      Simulation.Aivika.Trans.Internal.Types
                      Simulation.Aivika.Trans.Net
                      Simulation.Aivika.Trans.Net.Random
+                     Simulation.Aivika.Trans.Observable
                      Simulation.Aivika.Trans.Operation
                      Simulation.Aivika.Trans.Operation.Random
                      Simulation.Aivika.Trans.Parameter
@@ -144,7 +145,7 @@
                      containers >= 0.4.0.0,
                      random >= 1.0.0.3,
                      vector >= 0.10.0.1,
-                     aivika >= 4.3.5
+                     aivika >= 4.5
 
     other-extensions:   FlexibleContexts,
                         FlexibleInstances,
