diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
 
+Version 5.0
+-----
+
+* Adjusted to a new API of library aivika-experiment.
+
 Version 4.3.1
 -----
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012-2015 David Sorokin <david.sorokin@gmail.com>
+Copyright (c) 2012-2017 David Sorokin <david.sorokin@gmail.com>
 
 All rights reserved.
 
diff --git a/Simulation/Aivika/Experiment/Chart.hs b/Simulation/Aivika/Experiment/Chart.hs
--- a/Simulation/Aivika/Experiment/Chart.hs
+++ b/Simulation/Aivika/Experiment/Chart.hs
@@ -1,31 +1,33 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 library functionality.
 --
 
 module Simulation.Aivika.Experiment.Chart
        (-- * Modules
+        module Simulation.Aivika.Experiment.Base,
         module Simulation.Aivika.Experiment.Chart.Types, 
-        module Simulation.Aivika.Experiment.Chart.TimeSeriesView,
-        module Simulation.Aivika.Experiment.Chart.XYChartView,
-        module Simulation.Aivika.Experiment.Chart.FinalXYChartView,
+        module Simulation.Aivika.Experiment.Chart.Utils,
         module Simulation.Aivika.Experiment.Chart.DeviationChartView,
-        module Simulation.Aivika.Experiment.Chart.HistogramView,
         module Simulation.Aivika.Experiment.Chart.FinalHistogramView,
-        module Simulation.Aivika.Experiment.Chart.Utils) where
+        module Simulation.Aivika.Experiment.Chart.FinalXYChartView,
+        module Simulation.Aivika.Experiment.Chart.HistogramView,
+        module Simulation.Aivika.Experiment.Chart.TimeSeriesView,
+        module Simulation.Aivika.Experiment.Chart.XYChartView) where
 
+import Simulation.Aivika.Experiment.Base
 import Simulation.Aivika.Experiment.Chart.Types
-import Simulation.Aivika.Experiment.Chart.TimeSeriesView
-import Simulation.Aivika.Experiment.Chart.XYChartView
-import Simulation.Aivika.Experiment.Chart.FinalXYChartView
+import Simulation.Aivika.Experiment.Chart.Utils
 import Simulation.Aivika.Experiment.Chart.DeviationChartView
-import Simulation.Aivika.Experiment.Chart.HistogramView
 import Simulation.Aivika.Experiment.Chart.FinalHistogramView
-import Simulation.Aivika.Experiment.Chart.Utils
+import Simulation.Aivika.Experiment.Chart.FinalXYChartView
+import Simulation.Aivika.Experiment.Chart.HistogramView
+import Simulation.Aivika.Experiment.Chart.TimeSeriesView
+import Simulation.Aivika.Experiment.Chart.XYChartView
diff --git a/Simulation/Aivika/Experiment/Chart/DeviationChartView.hs b/Simulation/Aivika/Experiment/Chart/DeviationChartView.hs
--- a/Simulation/Aivika/Experiment/Chart/DeviationChartView.hs
+++ b/Simulation/Aivika/Experiment/Chart/DeviationChartView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.DeviationChartView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'DeviationChartView' that plots the deviation chart using rule of 3-sigma.
 --
@@ -37,7 +37,8 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
-import Simulation.Aivika.Experiment.MRef
+import Simulation.Aivika.Experiment.Base
+import Simulation.Aivika.Experiment.Concurrent.MVar
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines, colourisePlotFillBetween)
 
@@ -123,7 +124,7 @@
 instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newDeviationChart v exp renderer dir
              let context =
                    WebPageContext $
@@ -138,7 +139,7 @@
 instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newDeviationChart v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseDeviationChart st,
@@ -153,28 +154,25 @@
                             deviationChartRenderer   :: r,
                             deviationChartDir        :: FilePath, 
                             deviationChartFile       :: IORef (Maybe FilePath),
-                            deviationChartLock       :: MVar (),
-                            deviationChartResults    :: MRef (Maybe DeviationChartResults) }
+                            deviationChartResults    :: MVar (Maybe DeviationChartResults) }
 
 -- | The deviation chart item.
 data DeviationChartResults =
   DeviationChartResults { deviationChartTimes :: IOArray Int Double,
                           deviationChartNames :: [Either String String],
-                          deviationChartStats :: [IOArray Int (SamplingStats Double)] }
+                          deviationChartStats :: [MVar (IOArray Int (SamplingStats Double))] }
   
 -- | Create a new state of the view.
 newDeviationChart :: DeviationChartView -> Experiment -> r -> FilePath -> ExperimentWriter (DeviationChartViewState r)
 newDeviationChart view exp renderer dir =
   liftIO $ 
   do f <- newIORef Nothing
-     l <- newMVar () 
-     r <- newMRef Nothing
+     r <- newMVar Nothing
      return DeviationChartViewState { deviationChartView       = view,
                                       deviationChartExperiment = exp,
                                       deviationChartRenderer   = renderer,
                                       deviationChartDir        = dir, 
                                       deviationChartFile       = f,
-                                      deviationChartLock       = l, 
                                       deviationChartResults    = r }
        
 -- | Create new chart results.
@@ -184,7 +182,7 @@
          bnds  = integIterationBnds specs
      times <- liftIO $ newListArray bnds (integTimes specs)
      stats <- forM names $ \_ -> 
-       liftIO $ newArray bnds emptySamplingStats
+       liftIO $ newArray bnds emptySamplingStats >>= newMVar
      return DeviationChartResults { deviationChartTimes = times,
                                     deviationChartNames = names,
                                     deviationChartStats = stats }
@@ -192,14 +190,14 @@
 -- | Require to return unique chart results associated with the specified state. 
 requireDeviationChartResults :: DeviationChartViewState r -> [Either String String] -> IO DeviationChartResults
 requireDeviationChartResults st names =
-  maybeWriteMRef (deviationChartResults st)
+  maybePutMVar (deviationChartResults st)
   (newDeviationChartResults names (deviationChartExperiment st)) $ \results ->
   if (names /= deviationChartNames results)
   then error "Series with different names are returned for different runs: requireDeviationChartResults"
   else return results
        
 -- | Simulate the specified series.
-simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Event DisposableEvent
+simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Composite ()
 simulateDeviationChart st expdata =
   do let view    = deviationChartView st
          rs1     = deviationChartLeftYSeries view $
@@ -216,18 +214,24 @@
          names   = map Left names1 ++ map Right names2
          signals = experimentPredefinedSignals expdata
          signal  = resultSignalInIntegTimes signals
-         lock    = deviationChartLock st
-     results <- liftIO $ requireDeviationChartResults st names
-     let stats   = deviationChartStats results
-     handleSignal signal $ \_ ->
-       do xs <- forM exts resultValueData
-          i  <- liftDynamics integIteration
-          liftIO $
-            forM_ (zip xs stats) $ \(x, stats) ->
-            withMVar lock $ \() ->
-            do y <- readArray stats i
-               let y' = combineSamplingStatsEither x y
-               y' `seq` writeArray stats i y'
+     hs <- forM exts $ \ext ->
+           newSignalHistory $
+           flip mapSignalM signal $ \t ->
+           resultValueData ext
+     disposableComposite $
+       DisposableEvent $
+       do results <- liftIO $ requireDeviationChartResults st names
+          let stats = deviationChartStats results
+          forM_ (zip hs stats) $ \(h, stats') ->
+            do (ts, xs) <- readSignalHistory h
+               let (lo, hi) = bounds ts
+               liftIO $
+                 withMVar stats' $ \stats'' ->
+                 forM_ [lo..hi] $ \i ->
+                 do let x = xs ! i
+                    y <- readArray stats'' i
+                    let y' = combineSamplingStatsEither x y
+                    y' `seq` writeArray stats'' i y'
      
 -- | Plot the deviation chart after the simulation is complete.
 finaliseDeviationChart :: ChartRendering r => DeviationChartViewState r -> ExperimentWriter ()
@@ -249,7 +253,7 @@
              mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $
              expandFilePath (deviationChartFileName view) $
              M.fromList [("$TITLE", title)]
-     results <- liftIO $ readMRef $ deviationChartResults st
+     results <- liftIO $ readMVar $ deviationChartResults st
      case results of
        Nothing -> return ()
        Just results ->
@@ -257,8 +261,9 @@
          do let times = deviationChartTimes results
                 names = deviationChartNames results
                 stats = deviationChartStats results
-            ps1 <- forM (zip3 names stats plotLines) $ \(name, stats, plotLines) ->
-              do xs <- getAssocs stats
+            ps1 <- forM (zip3 names stats plotLines) $ \(name, stats', plotLines) ->
+              do stats'' <- readMVar stats'
+                 xs <- getAssocs stats''
                  zs <- forM xs $ \(i, stats) ->
                    do t <- readArray times i
                       return (t, samplingStatsMean stats)
@@ -270,8 +275,9 @@
                  case name of
                    Left _  -> return $ Left p
                    Right _ -> return $ Right p
-            ps2 <- forM (zip3 names stats plotFillBetween) $ \(name, stats, plotFillBetween) ->
-              do xs <- getAssocs stats
+            ps2 <- forM (zip3 names stats plotFillBetween) $ \(name, stats', plotFillBetween) ->
+              do stats'' <- readMVar stats'
+                 xs <- getAssocs stats''
                  zs <- forM xs $ \(i, stats) ->
                    do t <- readArray times i
                       let mu    = samplingStatsMean stats
diff --git a/Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs b/Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs
--- a/Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs
+++ b/Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalHistogramView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'FinalHistogramView' that plots a histogram
 -- by the specified series in final time points collected from different 
@@ -39,7 +39,8 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
-import Simulation.Aivika.Experiment.MRef
+import Simulation.Aivika.Experiment.Base
+import Simulation.Aivika.Experiment.Concurrent.MVar
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotBars)
 
@@ -115,7 +116,7 @@
 instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newFinalHistogram v exp renderer dir
              let context =
                    WebPageContext $
@@ -130,7 +131,7 @@
 instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newFinalHistogram v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseFinalHistogram st,
@@ -145,19 +146,19 @@
                             finalHistogramRenderer   :: r,
                             finalHistogramDir        :: FilePath, 
                             finalHistogramFile       :: IORef (Maybe FilePath),
-                            finalHistogramResults    :: MRef (Maybe FinalHistogramResults) }
+                            finalHistogramResults    :: MVar (Maybe FinalHistogramResults) }
 
 -- | The histogram item.
 data FinalHistogramResults =
   FinalHistogramResults { finalHistogramNames  :: [String],
-                          finalHistogramValues :: [MRef [Double]] }
+                          finalHistogramValues :: [MVar [Double]] }
   
 -- | Create a new state of the view.
 newFinalHistogram :: FinalHistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (FinalHistogramViewState r)
 newFinalHistogram view exp renderer dir =
   liftIO $
   do f <- newIORef Nothing
-     r <- newMRef Nothing
+     r <- newMVar Nothing
      return FinalHistogramViewState { finalHistogramView       = view,
                                       finalHistogramExperiment = exp,
                                       finalHistogramRenderer   = renderer,
@@ -168,21 +169,21 @@
 -- | Create new histogram results.
 newFinalHistogramResults :: [String] -> Experiment -> IO FinalHistogramResults
 newFinalHistogramResults names exp =
-  do values <- forM names $ \_ -> liftIO $ newMRef []
+  do values <- forM names $ \_ -> liftIO $ newMVar []
      return FinalHistogramResults { finalHistogramNames  = names,
                                     finalHistogramValues = values }
        
 -- | Require to return unique results associated with the specified state. 
 requireFinalHistogramResults :: FinalHistogramViewState r -> [String] -> IO FinalHistogramResults
 requireFinalHistogramResults st names =
-  maybeWriteMRef (finalHistogramResults st)
+  maybePutMVar (finalHistogramResults st)
   (newFinalHistogramResults names (finalHistogramExperiment st)) $ \results ->
   if (names /= finalHistogramNames results)
   then error "Series with different names are returned for different runs: requireFinalHistogramResults"
   else return results
 
 -- | Simulation of the specified series.
-simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Event DisposableEvent
+simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Composite ()
 simulateFinalHistogram st expdata =
   do let view    = finalHistogramView st
          rs      = finalHistogramSeries view $
@@ -196,11 +197,11 @@
          predicate = finalHistogramPredicate view
      results <- liftIO $ requireFinalHistogramResults st names
      let values = finalHistogramValues results
-     handleSignal signal $ \_ ->
+     handleSignalComposite signal $ \_ ->
        do xs <- forM exts resultValueData
           liftIO $
             forM_ (zip xs values) $ \(x, values) ->
-            modifyMRef_ values $ return . (++) x
+            modifyMVar_ values $ return . (++) x
      
 -- | Plot the histogram after the simulation is complete.
 finaliseFinalHistogram :: ChartRendering r => FinalHistogramViewState r -> ExperimentWriter ()
@@ -221,14 +222,14 @@
              mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $
              expandFilePath (finalHistogramFileName view) $
              M.fromList [("$TITLE", title)]
-     results <- liftIO $ readMRef $ finalHistogramResults st
+     results <- liftIO $ readMVar $ finalHistogramResults st
      case results of
        Nothing -> return ()
        Just results ->
          liftIO $
          do let names  = finalHistogramNames results
                 values = finalHistogramValues results
-            xs <- forM values readMRef
+            xs <- forM values readMVar
             let zs = histogramToBars . filterHistogram . histogram $ 
                      map filterData xs
                 p  = plotBars $
diff --git a/Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs b/Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs
--- a/Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs
+++ b/Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalXYChartView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'FinalXYChartView' that plots a single XY chart
 -- in final time points for different simulation runs sequentially
@@ -39,7 +39,8 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
-import Simulation.Aivika.Experiment.MRef
+import Simulation.Aivika.Experiment.Base
+import Simulation.Aivika.Experiment.Concurrent.MVar
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines)
 
@@ -132,7 +133,7 @@
 instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newFinalXYChart v exp renderer dir
              let context =
                    WebPageContext $
@@ -147,7 +148,7 @@
 instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newFinalXYChart v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseFinalXYChart st,
@@ -163,7 +164,7 @@
                           finalXYChartDir        :: FilePath, 
                           finalXYChartFile       :: IORef (Maybe FilePath),
                           finalXYChartLock       :: MVar (),
-                          finalXYChartResults    :: MRef (Maybe FinalXYChartResults) }
+                          finalXYChartResults    :: MVar (Maybe FinalXYChartResults) }
 
 -- | The XY chart results.
 data FinalXYChartResults =
@@ -177,7 +178,7 @@
   liftIO $
   do f <- newIORef Nothing
      l <- newMVar () 
-     r <- newMRef Nothing
+     r <- newMVar Nothing
      return FinalXYChartViewState { finalXYChartView       = view,
                                     finalXYChartExperiment = exp,
                                     finalXYChartRenderer   = renderer,
@@ -199,14 +200,14 @@
 -- | Require to return unique results associated with the specified state. 
 requireFinalXYChartResults :: FinalXYChartViewState r -> String -> [Either String String] -> IO FinalXYChartResults
 requireFinalXYChartResults st xname ynames =
-  maybeWriteMRef (finalXYChartResults st)
+  maybePutMVar (finalXYChartResults st)
   (newFinalXYChartResults xname ynames (finalXYChartExperiment st)) $ \results ->
   if (xname /= finalXYChartXName results) || (ynames /= finalXYChartYNames results)
   then error "Series with different names are returned for different runs: requireFinalXYChartResults"
   else return results
        
 -- | Simulation.
-simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Event DisposableEvent
+simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Composite ()
 simulateFinalXYChart st expdata =
   do let view    = finalXYChartView st
          rs0     = finalXYChartXSeries view $
@@ -237,7 +238,7 @@
          lock = finalXYChartLock st
      results <- liftIO $ requireFinalXYChartResults st name0 names
      let xys = finalXYChartXY results
-     handleSignal signal $ \_ ->
+     handleSignalComposite signal $ \_ ->
        do x  <- resultValueData ext0
           ys <- forM exts resultValueData
           i  <- liftParameter simulationIndex
@@ -265,7 +266,7 @@
              mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $
              expandFilePath (finalXYChartFileName view) $
              M.fromList [("$TITLE", title)]
-     results <- liftIO $ readMRef $ finalXYChartResults st
+     results <- liftIO $ readMVar $ finalXYChartResults st
      case results of
        Nothing -> return ()
        Just results ->
diff --git a/Simulation/Aivika/Experiment/Chart/HistogramView.hs b/Simulation/Aivika/Experiment/Chart/HistogramView.hs
--- a/Simulation/Aivika/Experiment/Chart/HistogramView.hs
+++ b/Simulation/Aivika/Experiment/Chart/HistogramView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.HistogramView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'HistogramView' that plots the histogram
 -- collecting statistics in all integration time points and does
@@ -37,6 +37,7 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Base
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotBars)
 import Simulation.Aivika.Experiment.Histogram
@@ -125,7 +126,7 @@
 instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newHistogram v exp renderer dir
              let context =
                    WebPageContext $
@@ -140,7 +141,7 @@
 instance ChartRendering r => ExperimentView HistogramView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newHistogram v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
@@ -176,7 +177,7 @@
                                  histogramMap        = m }
        
 -- | Plot the histogram during the simulation.
-simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Event DisposableEvent
+simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Composite ()
 simulateHistogram st expdata =
   do let view    = histogramView st
          rs      = histogramSeries view $
@@ -213,7 +214,7 @@
        mapSignalM (const $ resultValueData ext) $
        filterSignalM (const predicate) $
        resultSignalInIntegTimes signals
-     return $
+     disposableComposite $
        DisposableEvent $
        do xs <- forM hs readSignalHistory
           let zs = histogramToBars . filterHistogram . build $ 
diff --git a/Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs b/Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs
--- a/Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs
+++ b/Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.TimeSeriesView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'TimeSeriesView' that plots the time series charts.
 --
@@ -36,6 +36,7 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Base
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines)
 
@@ -130,7 +131,7 @@
 instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newTimeSeries v exp renderer dir
              let context =
                    WebPageContext $
@@ -145,7 +146,7 @@
 instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newTimeSeries v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
@@ -181,7 +182,7 @@
                                   timeSeriesMap        = m }
        
 -- | Plot the time series chart within simulation.
-simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent
+simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Composite ()
 simulateTimeSeries st expdata =
   do let view    = timeSeriesView st
          rs1     = timeSeriesLeftYSeries view $
@@ -229,7 +230,7 @@
               resultValueSignal ext
      hs1 <- inputHistory exts1
      hs2 <- inputHistory exts2
-     return $
+     disposableComposite $
        DisposableEvent $
        do let plots hs exts plotLineTails =
                 do ps <-
diff --git a/Simulation/Aivika/Experiment/Chart/Types.hs b/Simulation/Aivika/Experiment/Chart/Types.hs
--- a/Simulation/Aivika/Experiment/Chart/Types.hs
+++ b/Simulation/Aivika/Experiment/Chart/Types.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.Types
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 type class for rendering charts.
 --
diff --git a/Simulation/Aivika/Experiment/Chart/Utils.hs b/Simulation/Aivika/Experiment/Chart/Utils.hs
--- a/Simulation/Aivika/Experiment/Chart/Utils.hs
+++ b/Simulation/Aivika/Experiment/Chart/Utils.hs
@@ -1,11 +1,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.Utils
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 some utilities used in the charting.
 --
diff --git a/Simulation/Aivika/Experiment/Chart/XYChartView.hs b/Simulation/Aivika/Experiment/Chart/XYChartView.hs
--- a/Simulation/Aivika/Experiment/Chart/XYChartView.hs
+++ b/Simulation/Aivika/Experiment/Chart/XYChartView.hs
@@ -3,11 +3,11 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.XYChartView
--- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2017, 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 'XYChartView' that plots the XY charts.
 --
@@ -36,6 +36,7 @@
 
 import Simulation.Aivika
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Base
 import Simulation.Aivika.Experiment.Chart.Types
 import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines)
 
@@ -139,7 +140,7 @@
 instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp (WebPageRenderer renderer) dir =
+    let reporter exp (WebPageRenderer renderer _) dir =
           do st <- newXYChart v exp renderer dir
              let context =
                    WebPageContext $
@@ -154,7 +155,7 @@
 instance ChartRendering r => ExperimentView XYChartView (FileRenderer r) where
   
   outputView v = 
-    let reporter exp (FileRenderer renderer) dir =
+    let reporter exp (FileRenderer renderer _) dir =
           do st <- newXYChart v exp renderer dir
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
@@ -190,7 +191,7 @@
                                xyChartMap        = m }
        
 -- | Plot the XY chart during the simulation.
-simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Event DisposableEvent
+simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Composite ()
 simulateXYChart st expdata =
   do let view    = xyChartView st
          rs0     = xyChartXSeries view $
@@ -249,7 +250,7 @@
               signalx <> signaly
      hs1 <- inputHistory exts1
      hs2 <- inputHistory exts2
-     return $
+     disposableComposite $
        DisposableEvent $
        do let plots hs exts plotLineTails =
                 do ps <-
diff --git a/aivika-experiment-chart.cabal b/aivika-experiment-chart.cabal
--- a/aivika-experiment-chart.cabal
+++ b/aivika-experiment-chart.cabal
@@ -1,5 +1,5 @@
 name:            aivika-experiment-chart
-version:         4.3.2
+version:         5.0
 synopsis:        Simulation experiments with charting for the Aivika library
 description:
     This package complements the aivika [1] and aivika-experiment [2] packages with
@@ -23,10 +23,10 @@
 category:        Simulation
 license:         BSD3
 license-file:    LICENSE
-copyright:       (c) 2012-2015. David Sorokin <david.sorokin@gmail.com>
+copyright:       (c) 2012-2017. David Sorokin <david.sorokin@gmail.com>
 author:          David Sorokin
 maintainer:      David Sorokin <david.sorokin@gmail.com>
-homepage:        http://github.com/dsorokin/aivika-experiment-chart
+homepage:        http://www.aivikasoft.com
 cabal-version:   >= 1.6
 build-type:      Simple
 tested-with:     GHC == 7.10.1
@@ -61,6 +61,16 @@
                      examples/Furnace/MainUsingCairo.hs
                      examples/Furnace/MainUsingDiagrams.hs
                      examples/Furnace/README
+                     examples/GPSSExample7-26/Model.hs
+                     examples/GPSSExample7-26/Experiment.hs
+                     examples/GPSSExample7-26/MainUsingCairo.hs
+                     examples/GPSSExample7-26/MainUsingDiagrams.hs
+                     examples/GPSSExample7-26/README
+                     examples/GPSSExample7-31/Model.hs
+                     examples/GPSSExample7-31/Experiment.hs
+                     examples/GPSSExample7-31/MainUsingCairo.hs
+                     examples/GPSSExample7-31/MainUsingDiagrams.hs
+                     examples/GPSSExample7-31/README
                      examples/InspectionAdjustmentStations/Model.hs
                      examples/InspectionAdjustmentStations/Experiment.hs
                      examples/InspectionAdjustmentStations/MainUsingCairo.hs
@@ -117,13 +127,13 @@
 
     exposed-modules: Simulation.Aivika.Experiment.Chart
                      Simulation.Aivika.Experiment.Chart.Types
-                     Simulation.Aivika.Experiment.Chart.TimeSeriesView
-                     Simulation.Aivika.Experiment.Chart.XYChartView
-                     Simulation.Aivika.Experiment.Chart.FinalXYChartView
+                     Simulation.Aivika.Experiment.Chart.Utils
                      Simulation.Aivika.Experiment.Chart.DeviationChartView
-                     Simulation.Aivika.Experiment.Chart.HistogramView
                      Simulation.Aivika.Experiment.Chart.FinalHistogramView
-                     Simulation.Aivika.Experiment.Chart.Utils
+                     Simulation.Aivika.Experiment.Chart.FinalXYChartView
+                     Simulation.Aivika.Experiment.Chart.HistogramView
+                     Simulation.Aivika.Experiment.Chart.TimeSeriesView
+                     Simulation.Aivika.Experiment.Chart.XYChartView
 
     build-depends:   base >= 3 && < 6,
                      mtl >= 1.1.0.2,
@@ -135,8 +145,8 @@
                      lens >= 3.9,
                      data-default-class >= 0.0.1,
                      colour >= 2.3.3,
-                     aivika >= 4.3,
-                     aivika-experiment >= 4.0.3
+                     aivika >= 5.1,
+                     aivika-experiment >= 5.0
 
     extensions:      MultiParamTypeClasses
 
diff --git a/examples/BassDiffusion/MainUsingCairo.hs b/examples/BassDiffusion/MainUsingCairo.hs
--- a/examples/BassDiffusion/MainUsingCairo.hs
+++ b/examples/BassDiffusion/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/BassDiffusion/MainUsingDiagrams.hs b/examples/BassDiffusion/MainUsingDiagrams.hs
--- a/examples/BassDiffusion/MainUsingDiagrams.hs
+++ b/examples/BassDiffusion/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/BouncingBall/MainUsingCairo.hs b/examples/BouncingBall/MainUsingCairo.hs
--- a/examples/BouncingBall/MainUsingCairo.hs
+++ b/examples/BouncingBall/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/BouncingBall/MainUsingDiagrams.hs b/examples/BouncingBall/MainUsingDiagrams.hs
--- a/examples/BouncingBall/MainUsingDiagrams.hs
+++ b/examples/BouncingBall/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/ChemicalReaction/MainUsingCairo.hs b/examples/ChemicalReaction/MainUsingCairo.hs
--- a/examples/ChemicalReaction/MainUsingCairo.hs
+++ b/examples/ChemicalReaction/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/ChemicalReaction/MainUsingDiagrams.hs b/examples/ChemicalReaction/MainUsingDiagrams.hs
--- a/examples/ChemicalReaction/MainUsingDiagrams.hs
+++ b/examples/ChemicalReaction/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/DifferenceEquations/MainUsingCairo.hs b/examples/DifferenceEquations/MainUsingCairo.hs
--- a/examples/DifferenceEquations/MainUsingCairo.hs
+++ b/examples/DifferenceEquations/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/DifferenceEquations/MainUsingDiagrams.hs b/examples/DifferenceEquations/MainUsingDiagrams.hs
--- a/examples/DifferenceEquations/MainUsingDiagrams.hs
+++ b/examples/DifferenceEquations/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/Financial/MainUsingCairo.hs b/examples/Financial/MainUsingCairo.hs
--- a/examples/Financial/MainUsingCairo.hs
+++ b/examples/Financial/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -15,11 +16,11 @@
   putStrLn "*** The simulation with default parameters..."
   runExperiment
     singleExperiment singleGenerators
-    (WebPageRenderer $ CairoRenderer PNG) (model defaultParams)
+    (WebPageRenderer (CairoRenderer PNG) experimentFilePath) (model defaultParams)
   putStrLn ""
 
   -- run the Monte-Carlo simulation
   putStrLn "*** The Monte-Carlo simulation..."
   randomParams >>= runExperimentParallel
     monteCarloExperiment monteCarloGenerators
-    (WebPageRenderer $ CairoRenderer PNG) . model
+    (WebPageRenderer (CairoRenderer PNG) experimentFilePath) . model
diff --git a/examples/Financial/MainUsingDiagrams.hs b/examples/Financial/MainUsingDiagrams.hs
--- a/examples/Financial/MainUsingDiagrams.hs
+++ b/examples/Financial/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -11,16 +12,18 @@
 import Experiment
 
 main = do
+  fonts <- loadCommonFonts
+  let renderer = DiagramsRenderer SVG (return fonts)
   
   -- run the ordinary simulation
   putStrLn "*** The simulation with default parameters..."
   runExperiment
     singleExperiment singleGenerators
-    (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) (model defaultParams)
+    (WebPageRenderer renderer experimentFilePath) (model defaultParams)
   putStrLn ""
 
   -- run the Monte-Carlo simulation
   putStrLn "*** The Monte-Carlo simulation..."
   randomParams >>= runExperimentParallel
     monteCarloExperiment monteCarloGenerators
-    (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) . model
+    (WebPageRenderer renderer experimentFilePath) . model
diff --git a/examples/Furnace/Experiment.hs b/examples/Furnace/Experiment.hs
--- a/examples/Furnace/Experiment.hs
+++ b/examples/Furnace/Experiment.hs
@@ -37,10 +37,10 @@
 outputIngotTemp  = resultByName outputIngotTempName
 
 furnaceQueue     = T.Queue $ resultByName furnaceQueueName
-furnaceQueueCount      = T.tr $ T.queueCount furnaceQueue
+furnaceQueueCount      = T.queueCount furnaceQueue
 furnaceQueueCountStats = T.tr $ T.queueCountStats furnaceQueue
 furnaceQueueWaitTime   = T.tr $ T.queueWaitTime furnaceQueue
-furnaceQueueRate       = T.tr $ T.queueRate furnaceQueue
+furnaceQueueRate       = T.queueRate furnaceQueue
 
 generators :: ChartRendering r => [WebPageGenerator r]
 generators =
diff --git a/examples/Furnace/MainUsingCairo.hs b/examples/Furnace/MainUsingCairo.hs
--- a/examples/Furnace/MainUsingCairo.hs
+++ b/examples/Furnace/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/Furnace/MainUsingDiagrams.hs b/examples/Furnace/MainUsingDiagrams.hs
--- a/examples/Furnace/MainUsingDiagrams.hs
+++ b/examples/Furnace/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/GPSSExample7-26/Experiment.hs b/examples/GPSSExample7-26/Experiment.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-26/Experiment.hs
@@ -0,0 +1,89 @@
+
+{-# LANGUAGE FlexibleContexts #-}
+
+module Experiment (experiment, generators) where
+
+import Data.Monoid
+
+import Control.Arrow
+
+import Simulation.Aivika
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+
+import qualified Simulation.Aivika.Results.Transform as T
+import qualified Simulation.Aivika.GPSS.Results.Transform as GpssT
+
+-- | The simulation specs.
+specs = Specs { spcStartTime = 0.0,
+                spcStopTime = 500000.0,
+                spcDT = 1000.0,
+                spcMethod = RungeKutta4,
+                spcGeneratorType = SimpleGenerator }
+
+-- | The experiment.
+experiment :: Experiment
+experiment =
+  defaultExperiment {
+    experimentSpecs = specs,
+    experimentRunCount = 500,
+    -- experimentRunCount = 10,
+    experimentTitle = "The GPSS module 7.31" }
+
+line = GpssT.Queue $ resultByName "line"
+lineContent = GpssT.queueContent line
+lineContentStats = T.tr $ GpssT.queueContentStats line
+lineWaitTime = T.tr $ GpssT.queueWaitTime line
+lineNonZeroEntryWaitTime = T.tr $ GpssT.queueNonZeroEntryWaitTime line
+
+prof = GpssT.Facility $ resultByName "prof"
+profUtilCount = GpssT.facilityUtilisationCount prof
+profUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats prof
+profHoldingTime = T.tr $ GpssT.facilityHoldingTime prof
+
+statsView title series =
+  defaultFinalStatsView {
+    finalStatsTitle = title,
+    finalStatsSeries = series
+  }
+
+chartView title series =
+  defaultDeviationChartView {
+    deviationChartTitle = title,
+    deviationChartRightYSeries = series
+  }
+  
+histogramView title series = 
+  defaultFinalHistogramView {
+    finalHistogramTitle = title,
+    finalHistogramSeries = series
+  }
+
+generators :: ChartRendering r => [WebPageGenerator r]
+generators =
+  [outputView defaultExperimentSpecsView,
+   outputView defaultInfoView,
+   outputView $ statsView "PROF Utilisation" $
+     profUtilCount <>
+     profUtilCountStats,
+   outputView $ chartView "PROF Utilisation" $
+     profUtilCount <> 
+     profUtilCountStats,
+   outputView $ statsView "PROF Holding Time"
+     profHoldingTime,
+   outputView $ chartView "PROF Holding Time"
+     profHoldingTime,
+   outputView $ statsView "LINE Content" $
+     lineContent <>
+     lineContentStats,
+   outputView $ chartView "LINE Content" $
+     lineContent <>
+     lineContentStats,
+   outputView $ histogramView "LINE Content"
+     lineContent,
+   outputView $ statsView "LINE Wait Time" $
+     lineWaitTime <>
+     lineNonZeroEntryWaitTime,
+   outputView $ chartView "LINE Wait Time" $
+     lineWaitTime <>
+     lineNonZeroEntryWaitTime]
diff --git a/examples/GPSSExample7-26/MainUsingCairo.hs b/examples/GPSSExample7-26/MainUsingCairo.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-26/MainUsingCairo.hs
@@ -0,0 +1,13 @@
+
+-- To run, package aivika-experiment-cairo must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+import Simulation.Aivika.Experiment.Chart.Backend.Cairo
+
+import Graphics.Rendering.Chart.Backend.Cairo
+
+import Model
+import Experiment
+
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/GPSSExample7-26/MainUsingDiagrams.hs b/examples/GPSSExample7-26/MainUsingDiagrams.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-26/MainUsingDiagrams.hs
@@ -0,0 +1,16 @@
+
+-- To run, package aivika-experiment-diagrams must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
+
+import Graphics.Rendering.Chart.Backend.Diagrams
+
+import Model
+import Experiment
+
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/GPSSExample7-26/Model.hs b/examples/GPSSExample7-26/Model.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-26/Model.hs
@@ -0,0 +1,95 @@
+
+{-
+        GENERATE 2000,500,,,1
+        GATE NI PROF,Busy
+        PREEMPT PROF,PR,Add,5
+        ADVANCE (Exponential(1,0,200))
+        RETURN PROF
+Busy    TERMINATE
+
+        GENERATE 2000,500
+        QUEUE LINE
+        SEIZE PROF
+        DEPART LINE
+        ADVANCE (Exponential(1,0,1000))
+LetGo   RELEASE PROF
+        TERMINATE
+
+Add     ASSIGN 5+,300
+        ADVANCE P5
+        TRANSFER ,LetGo
+
+        GENERATE 10000000
+        TERMINATE 1
+
+        START 1
+ -}
+ 
+module Model (model) where
+
+import Prelude hiding (id)
+
+import Control.Category
+import Control.Monad.Trans
+
+import Data.Maybe
+
+import Simulation.Aivika
+import Simulation.Aivika.GPSS
+import qualified Simulation.Aivika.GPSS.Queue as Q
+
+model :: Simulation Results
+model =
+  do line <- runEventInStartTime Q.newQueue
+     prof <- runEventInStartTime newFacility
+
+     let phoneCallStream = randomUniformStream (2000 - 500) (2000 + 500)
+         studentStream   = randomUniformStream (2000 - 500) (2000 + 500)
+
+     let phoneCalls     = streamGeneratorBlock phoneCallStream 1
+         phoneCallChain =
+           Block (\a ->
+                   do f <- liftEvent (facilityInterrupted prof)
+                      if f
+                        then blockProcess (transferBlock busy) a
+                        else return a) >>>
+           preemptBlock prof
+           (PreemptBlockMode { preemptBlockPriorityMode = True,
+                               preemptBlockTransfer     = Just add,
+                               -- preemptBlockTransfer     = Nothing,
+                               preemptBlockRemoveMode   = False }) >>>
+           advanceBlock (randomExponentialProcess_ 200) >>>
+           returnBlock prof >>>
+           busy
+         busy           = terminateBlock
+         
+         students       = streamGeneratorBlock studentStream 0
+         studentChain   =
+           queueBlock line 1 >>>
+           seizeBlock prof >>>
+           departBlock line 1 >>>
+           advanceBlock (randomExponentialProcess_ 1000) >>>
+           letGo
+         letGo          =
+           releaseBlock prof >>>
+           terminateBlock
+         add dt0        =
+           let dt = maybe 0 id dt0
+           in advanceBlock (holdProcess (dt + 300)) >>>
+              transferBlock letGo
+
+     runProcessInStartTime $
+       runGeneratorBlock phoneCalls phoneCallChain 
+
+     runProcessInStartTime $
+       runGeneratorBlock students studentChain 
+
+     runEventInStartTime $
+       enqueueEvent 100000 $
+       do Q.resetQueue line
+          resetFacility prof
+  
+     return $
+       results
+       [resultSource "line" "Line" line,
+        resultSource "prof" "Prof" prof]
diff --git a/examples/GPSSExample7-26/README b/examples/GPSSExample7-26/README
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-26/README
@@ -0,0 +1,2 @@
+
+Here is an example of the GPSS model. You need to have aivika-gpss installed on your computer.
diff --git a/examples/GPSSExample7-31/Experiment.hs b/examples/GPSSExample7-31/Experiment.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-31/Experiment.hs
@@ -0,0 +1,69 @@
+
+{-# LANGUAGE FlexibleContexts #-}
+
+module Experiment (experiment, generators) where
+
+import Data.Monoid
+
+import Control.Arrow
+
+import Simulation.Aivika
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+
+import qualified Simulation.Aivika.Results.Transform as T
+import qualified Simulation.Aivika.GPSS.Results.Transform as GpssT
+
+-- | The simulation specs.
+specs = Specs { spcStartTime = 0.0,
+                spcStopTime = 20000.0,
+                spcDT = 10.0,
+                spcMethod = RungeKutta4,
+                spcGeneratorType = SimpleGenerator }
+
+-- | The experiment.
+experiment :: Experiment
+experiment =
+  defaultExperiment {
+    experimentSpecs = specs,
+    experimentRunCount = 100,
+    -- experimentRunCount = 10,
+    experimentTitle = "The GPSS module 7.31" }
+
+worker = GpssT.Facility $ resultByName "workr"
+workerUtilCount = GpssT.facilityUtilisationCount worker
+workerUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats worker
+workerHoldingTime = T.tr $ GpssT.facilityHoldingTime worker
+
+tatym = resultByName "stats"
+
+statsView title series =
+  defaultFinalStatsView {
+    finalStatsTitle = title,
+    finalStatsSeries = series
+  }
+
+chartView title series =
+  defaultDeviationChartView {
+    deviationChartTitle = title,
+    deviationChartRightYSeries = series
+  }
+
+generators :: ChartRendering r => [WebPageGenerator r]
+generators =
+  [outputView defaultExperimentSpecsView,
+   outputView defaultInfoView,
+   outputView $ statsView "Worker Utilisation (WORKR)" $
+     workerUtilCount <>
+     workerUtilCountStats,
+   outputView $ chartView "Worker Utilisation (WORKR)" $
+     workerUtilCount <> 
+     workerUtilCountStats,
+   outputView $ statsView "Worker Holding Time (WORKR)"
+     workerHoldingTime,
+   outputView $ chartView "Worker Holding Time (WORKR)"
+     workerHoldingTime,
+   outputView $ statsView "Processing Time (TATYM)" $
+     tatym,
+   outputView $ chartView "Processing Time (TATYM)" $
+     tatym]
diff --git a/examples/GPSSExample7-31/MainUsingCairo.hs b/examples/GPSSExample7-31/MainUsingCairo.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-31/MainUsingCairo.hs
@@ -0,0 +1,13 @@
+
+-- To run, package aivika-experiment-cairo must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+import Simulation.Aivika.Experiment.Chart.Backend.Cairo
+
+import Graphics.Rendering.Chart.Backend.Cairo
+
+import Model
+import Experiment
+
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/GPSSExample7-31/MainUsingDiagrams.hs b/examples/GPSSExample7-31/MainUsingDiagrams.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-31/MainUsingDiagrams.hs
@@ -0,0 +1,16 @@
+
+-- To run, package aivika-experiment-diagrams must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
+
+import Graphics.Rendering.Chart.Backend.Diagrams
+
+import Model
+import Experiment
+
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/GPSSExample7-31/Model.hs b/examples/GPSSExample7-31/Model.hs
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-31/Model.hs
@@ -0,0 +1,83 @@
+
+{-
+TATYM   TABLE M1,450,20,20
+
+        GENERATE ,,,1
+Back1   MARK
+        SEIZE WORKR
+        ADVANCE 8,3
+        SPLIT 1,Back1
+        RELEASE WORKR
+        PRIORITY 1
+        GATHER 24
+
+        SEIZE WORKR
+        ADVANCE 16,3
+        RELEASE WORKR
+        ASSEMBLE 12
+        TABULATE TATYM
+        TERMINATE
+
+        GENERATE 100000
+        TERMINATE 1
+
+        START 1
+ -}
+
+module Model (model) where
+
+import Prelude hiding (id)
+
+import Control.Category
+import Control.Monad.Trans
+
+import Data.Maybe
+
+import Simulation.Aivika
+import Simulation.Aivika.GPSS
+
+model :: Simulation Results
+model =
+  do workr <- runEventInStartTime newFacility
+     stats <- newRef emptySamplingStats
+
+     let bottleStream = takeStream 1 $
+                        randomUniformStream 0 0
+
+     let bottles     = streamGeneratorBlock bottleStream 0
+         bottleChain =
+           Block (\a ->
+                   do t <- liftDynamics time
+                      return $ assignTransactValue a (const t)) >>>
+           seizeBlock workr >>>
+           advanceBlock (randomUniformProcess_ (8 - 3) (8 + 3)) >>>
+           splitBlock [bottleChain] >>>
+           releaseBlock workr >>>
+           priorityBlock 1 >>>
+           gatherBlock 24 >>>
+           
+           seizeBlock workr >>>
+           advanceBlock (randomUniformProcess_ (16 - 3) (16 + 3)) >>>
+           releaseBlock workr >>>
+           assembleBlock 12 >>>
+           Block (\a ->
+                   do t <- liftDynamics time
+                      let t0 = transactValue a
+                      liftEvent $
+                        modifyRef stats $
+                        addSamplingStats (t - t0)
+                      return a) >>>
+           terminateBlock
+
+     runProcessInStartTime $
+       runGeneratorBlock bottles bottleChain
+
+     runEventInStartTime $
+       enqueueEvent 5000 $
+       do resetFacility workr
+          writeRef stats emptySamplingStats 
+  
+     return $
+       results
+       [resultSource "workr" "WORKR" workr,
+        resultSource "stats" "TATYM" stats]
diff --git a/examples/GPSSExample7-31/README b/examples/GPSSExample7-31/README
new file mode 100644
--- /dev/null
+++ b/examples/GPSSExample7-31/README
@@ -0,0 +1,2 @@
+
+Here is an example of the GPSS model. You need to have aivika-gpss installed on your computer.
diff --git a/examples/InspectionAdjustmentStations/Experiment.hs b/examples/InspectionAdjustmentStations/Experiment.hs
--- a/examples/InspectionAdjustmentStations/Experiment.hs
+++ b/examples/InspectionAdjustmentStations/Experiment.hs
@@ -43,14 +43,14 @@
 
 resultProcessingFactor :: ResultTransform
 resultProcessingFactor =
-  (T.tr $ T.serverProcessingFactor inspectionStations) <>
-  (T.tr $ T.serverProcessingFactor adjustmentStations)
+  (T.serverProcessingFactor inspectionStations) <>
+  (T.serverProcessingFactor adjustmentStations)
 
-inspectionQueueCount      = T.tr $ T.queueCount inspectionQueue
+inspectionQueueCount      = T.queueCount inspectionQueue
 inspectionQueueCountStats = T.tr $ T.queueCountStats inspectionQueue
 inspectionWaitTime        = T.tr $ T.queueWaitTime inspectionQueue
 
-adjustmentQueueCount      = T.tr $ T.queueCount adjustmentQueue
+adjustmentQueueCount      = T.queueCount adjustmentQueue
 adjustmentQueueCountStats = T.tr $ T.queueCountStats adjustmentQueue
 adjustmentWaitTime        = T.tr $ T.queueWaitTime adjustmentQueue
 
diff --git a/examples/InspectionAdjustmentStations/MainUsingCairo.hs b/examples/InspectionAdjustmentStations/MainUsingCairo.hs
--- a/examples/InspectionAdjustmentStations/MainUsingCairo.hs
+++ b/examples/InspectionAdjustmentStations/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs b/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
--- a/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
+++ b/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/InventorySystem/Experiment.hs b/examples/InventorySystem/Experiment.hs
--- a/examples/InventorySystem/Experiment.hs
+++ b/examples/InventorySystem/Experiment.hs
@@ -28,16 +28,15 @@
     experimentTitle = "Inventory System with Lost Sales and Backorders" }
 
 radio = T.Resource $ resultByName "radio"
-radioCount      = T.tr $ T.resourceCount radio
+radioCount      = T.resourceCount radio
 radioCountStats = T.tr $ T.resourceCountStats radio
 
 invPos = T.TimingCounter $ resultByName "invPos"
-invPosValue = T.tr $ T.timingCounterValue invPos
+invPosValue = T.timingCounterValue invPos
 invPosStats = T.tr $ T.timingCounterStats invPos
 
 tbLostSales = resultByName "tbLostSales"
 tbLostSalesCount = 
-  T.tr $
   T.samplingStatsCount $
   T.SamplingStats tbLostSales
 
diff --git a/examples/InventorySystem/MainUsingCairo.hs b/examples/InventorySystem/MainUsingCairo.hs
--- a/examples/InventorySystem/MainUsingCairo.hs
+++ b/examples/InventorySystem/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/InventorySystem/MainUsingDiagrams.hs b/examples/InventorySystem/MainUsingDiagrams.hs
--- a/examples/InventorySystem/MainUsingDiagrams.hs
+++ b/examples/InventorySystem/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/LinearArray/MainUsingCairo.hs b/examples/LinearArray/MainUsingCairo.hs
--- a/examples/LinearArray/MainUsingCairo.hs
+++ b/examples/LinearArray/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) (model 51)
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) (model 51)
diff --git a/examples/LinearArray/MainUsingDiagrams.hs b/examples/LinearArray/MainUsingDiagrams.hs
--- a/examples/LinearArray/MainUsingDiagrams.hs
+++ b/examples/LinearArray/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) (model 51)
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) (model 51)
diff --git a/examples/MachRep3/MainUsingCairo.hs b/examples/MachRep3/MainUsingCairo.hs
--- a/examples/MachRep3/MainUsingCairo.hs
+++ b/examples/MachRep3/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/MachRep3/MainUsingDiagrams.hs b/examples/MachRep3/MainUsingDiagrams.hs
--- a/examples/MachRep3/MainUsingDiagrams.hs
+++ b/examples/MachRep3/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/MachineBreakdowns/Experiment.hs b/examples/MachineBreakdowns/Experiment.hs
--- a/examples/MachineBreakdowns/Experiment.hs
+++ b/examples/MachineBreakdowns/Experiment.hs
@@ -33,7 +33,7 @@
 machineProcessing = T.Server $ resultByName "machineProcessing"
 
 jobsCompletedCount =
-  T.tr $ T.samplingStatsCount $
+  T.samplingStatsCount $
   T.arrivalProcessingTime jobsCompleted
   
 processingTime :: ResultTransform
@@ -46,7 +46,7 @@
 
 queueCount :: ResultTransform
 queueCount =
-  T.tr $ T.queueCount inputQueue
+  T.queueCount inputQueue
 
 queueCountStats :: ResultTransform
 queueCountStats =
@@ -54,7 +54,7 @@
 
 processingFactor :: ResultTransform
 processingFactor =
-  T.tr $ T.serverProcessingFactor machineProcessing
+  T.serverProcessingFactor machineProcessing
 
 generators :: ChartRendering r => [WebPageGenerator r]
 generators =
diff --git a/examples/MachineBreakdowns/MainUsingCairo.hs b/examples/MachineBreakdowns/MainUsingCairo.hs
--- a/examples/MachineBreakdowns/MainUsingCairo.hs
+++ b/examples/MachineBreakdowns/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperimentParallel experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/MachineBreakdowns/MainUsingDiagrams.hs b/examples/MachineBreakdowns/MainUsingDiagrams.hs
--- a/examples/MachineBreakdowns/MainUsingDiagrams.hs
+++ b/examples/MachineBreakdowns/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperimentParallel experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/PERT/Experiment.hs b/examples/PERT/Experiment.hs
--- a/examples/PERT/Experiment.hs
+++ b/examples/PERT/Experiment.hs
@@ -42,7 +42,6 @@
   T.ArrivalTimer series
 
 completionTimeMean series = 
-  T.tr $ 
   T.samplingStatsMean $
   T.arrivalProcessingTime $
   T.ArrivalTimer series
diff --git a/examples/PERT/MainUsingCairo.hs b/examples/PERT/MainUsingCairo.hs
--- a/examples/PERT/MainUsingCairo.hs
+++ b/examples/PERT/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/PERT/MainUsingDiagrams.hs b/examples/PERT/MainUsingDiagrams.hs
--- a/examples/PERT/MainUsingDiagrams.hs
+++ b/examples/PERT/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/PortOperations/Experiment.hs b/examples/PortOperations/Experiment.hs
--- a/examples/PortOperations/Experiment.hs
+++ b/examples/PortOperations/Experiment.hs
@@ -32,14 +32,14 @@
 berth                 = T.Resource $ resultByName "berth"
 berthCountStats       = T.tr $ T.resourceCountStats berth
 berthUtilisationCount = T.tr $ T.resourceUtilisationCountStats berth
-berthQueueCount       = T.tr $ T.resourceQueueCount berth
+berthQueueCount       = T.resourceQueueCount berth
 berthQueueCountStats  = T.tr $ T.resourceQueueCountStats berth
 berthWaitTime         = T.tr $ T.resourceWaitTime berth
 
 tug                 = T.Resource $ resultByName "tug"
 tugCountStats       = T.tr $ T.resourceCountStats tug
 tugUtilisationCount = T.tr $ T.resourceUtilisationCountStats tug
-tugQueueCount       = T.tr $ T.resourceQueueCount tug
+tugQueueCount       = T.resourceQueueCount tug
 tugQueueCountStats  = T.tr $ T.resourceQueueCountStats tug
 tugWaitTime         = T.tr $ T.resourceWaitTime tug
 
diff --git a/examples/PortOperations/MainUsingCairo.hs b/examples/PortOperations/MainUsingCairo.hs
--- a/examples/PortOperations/MainUsingCairo.hs
+++ b/examples/PortOperations/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/PortOperations/MainUsingDiagrams.hs b/examples/PortOperations/MainUsingDiagrams.hs
--- a/examples/PortOperations/MainUsingDiagrams.hs
+++ b/examples/PortOperations/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/QuarryOperations/Experiment.hs b/examples/QuarryOperations/Experiment.hs
--- a/examples/QuarryOperations/Experiment.hs
+++ b/examples/QuarryOperations/Experiment.hs
@@ -32,18 +32,18 @@
 shovelActvty  = T.Activity $ resultByName "shovelActvty"
 crusherActvty = T.Activity $ resultByName "crusherActvty"
 
-shovelQueueCount      = T.tr $ T.queueCount shovelQueue
+shovelQueueCount      = T.queueCount shovelQueue
 shovelQueueCountStats = T.tr $ T.queueCountStats shovelQueue
 shovelQueueWaitTime   = T.tr $ T.queueWaitTime shovelQueue
-shovelQueueRate       = T.tr $ T.queueRate shovelQueue
+shovelQueueRate       = T.queueRate shovelQueue
 
-crusherQueueCount      = T.tr $ T.queueCount crusherQueue
+crusherQueueCount      = T.queueCount crusherQueue
 crusherQueueCountStats = T.tr $ T.queueCountStats crusherQueue
 crusherQueueWaitTime   = T.tr $ T.queueWaitTime crusherQueue
-crusherQueueRate       = T.tr $ T.queueRate crusherQueue
+crusherQueueRate       = T.queueRate crusherQueue
 
-shovelUtilisationFactor  = T.tr $ T.activityUtilisationFactor shovelActvty
-crusherUtilisationFactor = T.tr $ T.activityUtilisationFactor crusherActvty
+shovelUtilisationFactor  = T.activityUtilisationFactor shovelActvty
+crusherUtilisationFactor = T.activityUtilisationFactor crusherActvty
 
 subgenerators1 :: ChartRendering r => String -> ResultTransform -> [WebPageGenerator r]
 subgenerators1 title series =
diff --git a/examples/QuarryOperations/MainUsingCairo.hs b/examples/QuarryOperations/MainUsingCairo.hs
--- a/examples/QuarryOperations/MainUsingCairo.hs
+++ b/examples/QuarryOperations/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/QuarryOperations/MainUsingDiagrams.hs b/examples/QuarryOperations/MainUsingDiagrams.hs
--- a/examples/QuarryOperations/MainUsingDiagrams.hs
+++ b/examples/QuarryOperations/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
diff --git a/examples/SingleLaneTraffic/Experiment.hs b/examples/SingleLaneTraffic/Experiment.hs
--- a/examples/SingleLaneTraffic/Experiment.hs
+++ b/examples/SingleLaneTraffic/Experiment.hs
@@ -31,7 +31,7 @@
 greenLightTime = resultByName "greenLightTime"
 
 start                      = T.Resource $ resultByName "start"
-startQueueCount            = T.tr $ T.resourceQueueCount start
+startQueueCount            = T.resourceQueueCount start
 startQueueCountStats       = T.tr $ T.resourceQueueCountStats start
 startWaitTime              = T.tr $ T.resourceWaitTime start
 startCountStats            = T.tr $ T.resourceCountStats start
diff --git a/examples/SingleLaneTraffic/MainUsingCairo.hs b/examples/SingleLaneTraffic/MainUsingCairo.hs
--- a/examples/SingleLaneTraffic/MainUsingCairo.hs
+++ b/examples/SingleLaneTraffic/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -10,6 +11,6 @@
 import Experiment
 
 main = do
-  runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model1
-  runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model2
-  runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model3
+  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model1
+  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model2
+  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model3
diff --git a/examples/SingleLaneTraffic/MainUsingDiagrams.hs b/examples/SingleLaneTraffic/MainUsingDiagrams.hs
--- a/examples/SingleLaneTraffic/MainUsingDiagrams.hs
+++ b/examples/SingleLaneTraffic/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -10,6 +11,8 @@
 import Experiment
 
 main = do
-  runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model1
-  runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model2
-  runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model3
+  fonts <- loadCommonFonts
+  let renderer = DiagramsRenderer SVG (return fonts)
+  runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model1
+  runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model2
+  runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model3
diff --git a/examples/TruckHaulingSituation/Experiment.hs b/examples/TruckHaulingSituation/Experiment.hs
--- a/examples/TruckHaulingSituation/Experiment.hs
+++ b/examples/TruckHaulingSituation/Experiment.hs
@@ -30,23 +30,23 @@
     experimentTitle = "A Truck Hauling Situation" }
 
 loadQueue           = T.Queue $ resultByName "loadQueue"
-loadQueueCount      = T.tr $ T.queueCount loadQueue
+loadQueueCount      = T.queueCount loadQueue
 loadQueueCountStats = T.tr $ T.queueCountStats loadQueue
 loadWaitTime        = T.tr $ T.queueWaitTime loadQueue
 
 truckQueue           = T.Queue $ resultByName "truckQueue"
-truckQueueCount      = T.tr $ T.queueCount truckQueue
+truckQueueCount      = T.queueCount truckQueue
 truckQueueCountStats = T.tr $ T.queueCountStats truckQueue
 truckWaitTime        = T.tr $ T.queueWaitTime truckQueue
 
 loaderQueue           = T.Queue $ resultByName "loaderQueue"
-loaderQueueCount      = T.tr $ T.queueCount loaderQueue
+loaderQueueCount      = T.queueCount loaderQueue
 loaderQueueCountStats = T.tr $ T.queueCountStats loaderQueue
 loaderWaitTime        = T.tr $ T.queueWaitTime loaderQueue
 
 loaderOps               = T.Operation $ resultByName "loaderOps"
 loaderUtilisationTime   = T.tr $ T.operationUtilisationTime loaderOps
-loaderUtilisationFactor = T.tr $ T.operationUtilisationFactor loaderOps
+loaderUtilisationFactor = T.operationUtilisationFactor loaderOps
 
 statsView title series =
   defaultFinalStatsView {
diff --git a/examples/TruckHaulingSituation/MainUsingCairo.hs b/examples/TruckHaulingSituation/MainUsingCairo.hs
--- a/examples/TruckHaulingSituation/MainUsingCairo.hs
+++ b/examples/TruckHaulingSituation/MainUsingCairo.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-cairo must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Cairo
 
 import Graphics.Rendering.Chart.Backend.Cairo
@@ -9,4 +10,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
diff --git a/examples/TruckHaulingSituation/MainUsingDiagrams.hs b/examples/TruckHaulingSituation/MainUsingDiagrams.hs
--- a/examples/TruckHaulingSituation/MainUsingDiagrams.hs
+++ b/examples/TruckHaulingSituation/MainUsingDiagrams.hs
@@ -2,6 +2,7 @@
 -- To run, package aivika-experiment-diagrams must be installed.
 
 import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
 import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
 
 import Graphics.Rendering.Chart.Backend.Diagrams
@@ -9,4 +10,7 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model
+main = 
+  do fonts <- loadCommonFonts
+     let renderer = DiagramsRenderer SVG (return fonts)
+     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
