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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.DeviationChartView
@@ -120,20 +120,32 @@
                        deviationChartBottomAxis  = id,
                        deviationChartLayout      = id }
 
-instance WebPageCharting r => ExperimentView DeviationChartView r WebPageWriter where
+instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newDeviationChart v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = deviationChartTOCHtml st,
                                    reporterWriteHtml    = deviationChartHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseDeviationChart st,
                                          reporterSimulate   = simulateDeviationChart st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newDeviationChart v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = finaliseDeviationChart st,
+                                         reporterSimulate   = simulateDeviationChart st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data DeviationChartViewState r =
   DeviationChartViewState { deviationChartView       :: DeviationChartView,
@@ -218,7 +230,7 @@
                y' `seq` writeArray stats i y'
      
 -- | Plot the deviation chart after the simulation is complete.
-finaliseDeviationChart :: WebPageCharting r => DeviationChartViewState r -> ExperimentWriter ()
+finaliseDeviationChart :: ChartRendering r => DeviationChartViewState r -> ExperimentWriter ()
 finaliseDeviationChart st =
   do let view = deviationChartView st
          title = deviationChartTitle view
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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalHistogramView
@@ -112,20 +112,32 @@
                        finalHistogramPlotBars    = colourisePlotBars,
                        finalHistogramLayout      = id }
 
-instance WebPageCharting r => ExperimentView FinalHistogramView r WebPageWriter where
+instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newFinalHistogram v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = finalHistogramTOCHtml st,
                                    reporterWriteHtml    = finalHistogramHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseFinalHistogram st,
                                          reporterSimulate   = simulateFinalHistogram st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newFinalHistogram v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = finaliseFinalHistogram st,
+                                         reporterSimulate   = simulateFinalHistogram st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data FinalHistogramViewState r =
   FinalHistogramViewState { finalHistogramView       :: FinalHistogramView,
@@ -191,7 +203,7 @@
             modifyMRef_ values $ return . (++) x
      
 -- | Plot the histogram after the simulation is complete.
-finaliseFinalHistogram :: WebPageCharting r => FinalHistogramViewState r -> ExperimentWriter ()
+finaliseFinalHistogram :: ChartRendering r => FinalHistogramViewState r -> ExperimentWriter ()
 finaliseFinalHistogram st =
   do let view = finalHistogramView st
          title = finalHistogramTitle view
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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalXYChartView
@@ -129,20 +129,32 @@
                      finalXYChartBottomAxis  = id,
                      finalXYChartLayout      = id }
 
-instance WebPageCharting r => ExperimentView FinalXYChartView r WebPageWriter where
+instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newFinalXYChart v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = finalXYChartTOCHtml st,
                                    reporterWriteHtml    = finalXYChartHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = finaliseFinalXYChart st,
                                          reporterSimulate   = simulateFinalXYChart st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newFinalXYChart v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = finaliseFinalXYChart st,
+                                         reporterSimulate   = simulateFinalXYChart st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data FinalXYChartViewState r =
   FinalXYChartViewState { finalXYChartView       :: FinalXYChartView,
@@ -235,7 +247,7 @@
             x `seq` y `seq` writeArray xy i $ Just (x, y)
      
 -- | Plot the XY chart after the simulation is complete.
-finaliseFinalXYChart :: WebPageCharting r => FinalXYChartViewState r -> ExperimentWriter ()
+finaliseFinalXYChart :: ChartRendering r => FinalXYChartViewState r -> ExperimentWriter ()
 finaliseFinalXYChart st =
   do let view = finalXYChartView st 
          title = finalXYChartTitle view
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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.HistogramView
@@ -122,20 +122,32 @@
                   histogramPlotBars    = colourisePlotBars,
                   histogramLayout      = id }
 
-instance WebPageCharting r => ExperimentView HistogramView r WebPageWriter where
+instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newHistogram v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = histogramTOCHtml st,
                                    reporterWriteHtml    = histogramHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
                                          reporterSimulate   = simulateHistogram st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView HistogramView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newHistogram v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = return (),
+                                         reporterSimulate   = simulateHistogram st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data HistogramViewState r =
   HistogramViewState { histogramView       :: HistogramView,
@@ -145,7 +157,7 @@
                        histogramMap        :: M.Map Int FilePath }
   
 -- | Create a new state of the view.
-newHistogram :: WebPageCharting r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r)
+newHistogram :: ChartRendering r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r)
 newHistogram view exp renderer dir =
   do let n = experimentRunCount exp
      fs <- forM [0..(n - 1)] $ \i ->
@@ -164,7 +176,7 @@
                                  histogramMap        = m }
        
 -- | Plot the histogram during the simulation.
-simulateHistogram :: WebPageCharting r => HistogramViewState r -> ExperimentData -> Event DisposableEvent
+simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Event DisposableEvent
 simulateHistogram st expdata =
   do let view    = histogramView st
          rs      = histogramSeries view $
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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.TimeSeriesView
@@ -127,20 +127,32 @@
                    timeSeriesBottomAxis  = id,
                    timeSeriesLayout      = id }
 
-instance WebPageCharting r => ExperimentView TimeSeriesView r WebPageWriter where
+instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newTimeSeries v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = timeSeriesTOCHtml st,
                                    reporterWriteHtml    = timeSeriesHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
                                          reporterSimulate   = simulateTimeSeries st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newTimeSeries v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = return (),
+                                         reporterSimulate   = simulateTimeSeries st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data TimeSeriesViewState r =
   TimeSeriesViewState { timeSeriesView       :: TimeSeriesView,
@@ -150,7 +162,7 @@
                         timeSeriesMap        :: M.Map Int FilePath }
   
 -- | Create a new state of the view.
-newTimeSeries :: WebPageCharting r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r)
+newTimeSeries :: ChartRendering r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r)
 newTimeSeries view exp renderer dir =
   do let n = experimentRunCount exp
      fs <- forM [0..(n - 1)] $ \i ->
@@ -169,7 +181,7 @@
                                   timeSeriesMap        = m }
        
 -- | Plot the time series chart within simulation.
-simulateTimeSeries :: WebPageCharting r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent
+simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent
 simulateTimeSeries st expdata =
   do let view    = timeSeriesView st
          rs1     = timeSeriesLeftYSeries view $
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
@@ -11,14 +11,14 @@
 --
 
 module Simulation.Aivika.Experiment.Chart.Types
-       (WebPageCharting(..)) where
+       (ChartRendering(..)) where
 
 import Graphics.Rendering.Chart
 
 import Simulation.Aivika.Experiment
 
 -- | A type class of chart renderers.
-class WebPageRendering r => WebPageCharting r where
+class ChartRendering r where
 
   -- | The file extension used when rendering.
   renderableChartExtension :: r -> String
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
@@ -1,5 +1,5 @@
 
-{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.XYChartView
@@ -136,20 +136,32 @@
                 xyChartBottomAxis  = id,
                 xyChartLayout      = id }
 
-instance WebPageCharting r => ExperimentView XYChartView r WebPageWriter where
+instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r) where
   
   outputView v = 
-    let reporter exp renderer dir =
+    let reporter exp (WebPageRenderer renderer) dir =
           do st <- newXYChart v exp renderer dir
-             let writer =
+             let context =
+                   WebPageContext $
                    WebPageWriter { reporterWriteTOCHtml = xyChartTOCHtml st,
                                    reporterWriteHtml    = xyChartHtml st }
              return ExperimentReporter { reporterInitialise = return (),
                                          reporterFinalise   = return (),
                                          reporterSimulate   = simulateXYChart st,
-                                         reporterRequest    = writer }
+                                         reporterContext    = context }
     in ExperimentGenerator { generateReporter = reporter }
+
+instance ChartRendering r => ExperimentView XYChartView (FileRenderer r) where
   
+  outputView v = 
+    let reporter exp (FileRenderer renderer) dir =
+          do st <- newXYChart v exp renderer dir
+             return ExperimentReporter { reporterInitialise = return (),
+                                         reporterFinalise   = return (),
+                                         reporterSimulate   = simulateXYChart st,
+                                         reporterContext    = FileContext }
+    in ExperimentGenerator { generateReporter = reporter }
+  
 -- | The state of the view.
 data XYChartViewState r =
   XYChartViewState { xyChartView       :: XYChartView,
@@ -159,7 +171,7 @@
                      xyChartMap        :: M.Map Int FilePath }
   
 -- | Create a new state of the view.
-newXYChart :: WebPageCharting r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r)
+newXYChart :: ChartRendering r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r)
 newXYChart view exp renderer dir =
   do let n = experimentRunCount exp
      fs <- forM [0..(n - 1)] $ \i ->
@@ -178,7 +190,7 @@
                                xyChartMap        = m }
        
 -- | Plot the XY chart during the simulation.
-simulateXYChart :: WebPageCharting r => XYChartViewState r -> ExperimentData -> Event DisposableEvent
+simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Event DisposableEvent
 simulateXYChart st expdata =
   do let view    = xyChartView st
          rs0     = xyChartXSeries view $
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:         2.1
+version:         3.0
 synopsis:        Simulation experiments with charting for the Aivika library
 description:
     This package complements the Aivika and Aivika Experiment packages with
@@ -28,6 +28,11 @@
                      examples/BassDiffusion/MainUsingCairo.hs
                      examples/BassDiffusion/MainUsingDiagrams.hs
                      examples/BassDiffusion/README
+                     examples/BouncingBall/Model.hs
+                     examples/BouncingBall/Experiment.hs
+                     examples/BouncingBall/MainUsingCairo.hs
+                     examples/BouncingBall/MainUsingDiagrams.hs
+                     examples/BouncingBall/README
                      examples/ChemicalReaction/Model.hs
                      examples/ChemicalReaction/Experiment.hs
                      examples/ChemicalReaction/MainUsingCairo.hs
@@ -86,11 +91,10 @@
                      lens >= 3.9,
                      data-default-class < 0.1,
                      colour >= 2.3.3,
-                     aivika >= 2.1,
-                     aivika-experiment >= 2.1
+                     aivika >= 3.0,
+                     aivika-experiment >= 3.0
 
-    extensions:      FlexibleInstances,
-                     MultiParamTypeClasses
+    extensions:      MultiParamTypeClasses
 
     ghc-options:     -O2
 
diff --git a/examples/BassDiffusion/Experiment.hs b/examples/BassDiffusion/Experiment.hs
--- a/examples/BassDiffusion/Experiment.hs
+++ b/examples/BassDiffusion/Experiment.hs
@@ -20,7 +20,7 @@
     experimentRunCount = 20,
     experimentDescription = "This is the famous Bass Diffusion model solved with help of the agent-based modelling." }
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultDeviationChartView {
diff --git a/examples/BassDiffusion/MainUsingCairo.hs b/examples/BassDiffusion/MainUsingCairo.hs
--- a/examples/BassDiffusion/MainUsingCairo.hs
+++ b/examples/BassDiffusion/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/BassDiffusion/MainUsingDiagrams.hs b/examples/BassDiffusion/MainUsingDiagrams.hs
--- a/examples/BassDiffusion/MainUsingDiagrams.hs
+++ b/examples/BassDiffusion/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/BouncingBall/Experiment.hs b/examples/BouncingBall/Experiment.hs
new file mode 100644
--- /dev/null
+++ b/examples/BouncingBall/Experiment.hs
@@ -0,0 +1,42 @@
+
+module Experiment (experiment, generators) where
+
+import Data.Monoid
+
+import Simulation.Aivika
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart
+
+specs = Specs { spcStartTime = 0, 
+                spcStopTime = 25, 
+                spcDT = 0.01,
+                spcMethod = RungeKutta4,
+                spcGeneratorType = SimpleGenerator }
+
+experiment :: Experiment
+experiment =
+  defaultExperiment {
+    experimentSpecs = specs,
+    experimentRunCount = 1,
+    experimentTitle = "Bouncing Ball",
+    experimentDescription = "Simulation of a Bouncing Ball as described in " ++
+                            "the corresponded MATLAB & Simulink example" }
+
+generators :: ChartRendering r => [WebPageGenerator r]
+generators =
+  [outputView defaultExperimentSpecsView,
+   outputView $ defaultTableView {
+     tableSeries =
+        resultByName "t" <>
+        resultByName "x" <>
+        resultByName "v" },
+   outputView $ defaultTimeSeriesView {
+     timeSeriesDescription = "The chart shows the position of the ball",
+     timeSeriesTitle = "Position",
+     timeSeriesLeftYSeries =
+        resultByName "x" },
+   outputView $ defaultTimeSeriesView {
+     timeSeriesDescription = "The chart shows the velocity of the ball",
+     timeSeriesTitle = "Velocity",
+     timeSeriesLeftYSeries =
+        resultByName "v" } ]
diff --git a/examples/BouncingBall/MainUsingCairo.hs b/examples/BouncingBall/MainUsingCairo.hs
new file mode 100644
--- /dev/null
+++ b/examples/BouncingBall/MainUsingCairo.hs
@@ -0,0 +1,12 @@
+
+-- To run, package aivika-experiment-cairo must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart.Backend.Cairo
+
+import Graphics.Rendering.Chart.Backend.Cairo
+
+import Model
+import Experiment
+
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/BouncingBall/MainUsingDiagrams.hs b/examples/BouncingBall/MainUsingDiagrams.hs
new file mode 100644
--- /dev/null
+++ b/examples/BouncingBall/MainUsingDiagrams.hs
@@ -0,0 +1,14 @@
+
+-- To run, package aivika-experiment-diagrams must be installed.
+
+import Simulation.Aivika.Experiment
+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams
+
+import Graphics.Rendering.Chart.Backend.Diagrams
+
+import qualified Data.Map as M
+
+import Model
+import Experiment
+
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/BouncingBall/Model.hs b/examples/BouncingBall/Model.hs
new file mode 100644
--- /dev/null
+++ b/examples/BouncingBall/Model.hs
@@ -0,0 +1,50 @@
+
+{-# LANGUAGE RecursiveDo #-}
+
+-- Example: Simulation of a Bouncing Ball.
+--
+-- It is described in MATLAB & Simulink example available by the following link:
+--
+-- http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html
+
+module Model (model) where
+
+import Control.Monad
+import Control.Monad.Trans
+
+import Simulation.Aivika
+import Simulation.Aivika.SystemDynamics
+
+-- the acceleration due to gravity
+g = 9.81
+
+-- the initial velocity
+v0 = 15
+
+-- the initial position
+x0 = 10
+
+-- the coefficient of restitution of the ball
+k = 0.8
+
+model :: Simulation Results
+model = mdo
+  v <- integEither dv v0
+  x <- integEither dx x0
+  let dv = do
+        x' <- x
+        v' <- v
+        if x' < 0
+          then return $ Left (- k * v')
+          else return $ Right (- g)
+      dx = do
+        x' <- x
+        v' <- v
+        if x' < 0
+          then return $ Left 0
+          else return $ Right v'
+  return $
+    results
+    [resultSource "t" "time" time,
+     resultSource "x" "position" x,
+     resultSource "v" "velocity" v]
diff --git a/examples/BouncingBall/README b/examples/BouncingBall/README
new file mode 100644
--- /dev/null
+++ b/examples/BouncingBall/README
@@ -0,0 +1,5 @@
+Example: Simulation of a Bouncing Ball.
+
+It is described in MATLAB & Simulink example available by the following link:
+
+http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html
diff --git a/examples/ChemicalReaction/Experiment.hs b/examples/ChemicalReaction/Experiment.hs
--- a/examples/ChemicalReaction/Experiment.hs
+++ b/examples/ChemicalReaction/Experiment.hs
@@ -22,7 +22,7 @@
     experimentDescription = "Chemical Reaction as described in " ++
                             "the 5-minute tutorial of Berkeley-Madonna" }
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultLastValueView {
diff --git a/examples/ChemicalReaction/MainUsingCairo.hs b/examples/ChemicalReaction/MainUsingCairo.hs
--- a/examples/ChemicalReaction/MainUsingCairo.hs
+++ b/examples/ChemicalReaction/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/ChemicalReaction/MainUsingDiagrams.hs b/examples/ChemicalReaction/MainUsingDiagrams.hs
--- a/examples/ChemicalReaction/MainUsingDiagrams.hs
+++ b/examples/ChemicalReaction/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/DifferenceEquations/Experiment.hs b/examples/DifferenceEquations/Experiment.hs
--- a/examples/DifferenceEquations/Experiment.hs
+++ b/examples/DifferenceEquations/Experiment.hs
@@ -23,7 +23,7 @@
                             "the corresponded tutorial of Berkeley-Madonna " ++
                             "with small modification for calculating std." }
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultTableView {
diff --git a/examples/DifferenceEquations/MainUsingCairo.hs b/examples/DifferenceEquations/MainUsingCairo.hs
--- a/examples/DifferenceEquations/MainUsingCairo.hs
+++ b/examples/DifferenceEquations/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/DifferenceEquations/MainUsingDiagrams.hs b/examples/DifferenceEquations/MainUsingDiagrams.hs
--- a/examples/DifferenceEquations/MainUsingDiagrams.hs
+++ b/examples/DifferenceEquations/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/Financial/Experiment.hs b/examples/Financial/Experiment.hs
--- a/examples/Financial/Experiment.hs
+++ b/examples/Financial/Experiment.hs
@@ -25,7 +25,7 @@
     experimentDescription = "Financial Model (the Monte-Carlo simulation) as described in " ++
                             "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." }
 
-monteCarloGenerators :: WebPageCharting r => [WebPageGenerator r]
+monteCarloGenerators :: ChartRendering r => [WebPageGenerator r]
 monteCarloGenerators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultDeviationChartView {
@@ -72,7 +72,7 @@
     experimentDescription = "Financial Model as described in " ++
                             "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." }
 
-singleGenerators :: WebPageCharting r => [WebPageGenerator r]
+singleGenerators :: ChartRendering r => [WebPageGenerator r]
 singleGenerators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultTimeSeriesView {
diff --git a/examples/Financial/MainUsingCairo.hs b/examples/Financial/MainUsingCairo.hs
--- a/examples/Financial/MainUsingCairo.hs
+++ b/examples/Financial/MainUsingCairo.hs
@@ -15,11 +15,11 @@
   putStrLn "*** The simulation with default parameters..."
   runExperiment
     singleExperiment singleGenerators
-    (CairoRenderer PNG) (model defaultParams)
+    (WebPageRenderer $ CairoRenderer PNG) (model defaultParams)
   putStrLn ""
 
   -- run the Monte-Carlo simulation
   putStrLn "*** The Monte-Carlo simulation..."
   randomParams >>= runExperimentParallel
     monteCarloExperiment monteCarloGenerators
-    (CairoRenderer PNG) . model
+    (WebPageRenderer $ CairoRenderer PNG) . model
diff --git a/examples/Financial/MainUsingDiagrams.hs b/examples/Financial/MainUsingDiagrams.hs
--- a/examples/Financial/MainUsingDiagrams.hs
+++ b/examples/Financial/MainUsingDiagrams.hs
@@ -17,11 +17,11 @@
   putStrLn "*** The simulation with default parameters..."
   runExperiment
     singleExperiment singleGenerators
-    (DiagramsRenderer SVG M.empty) (model defaultParams)
+    (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model defaultParams)
   putStrLn ""
 
   -- run the Monte-Carlo simulation
   putStrLn "*** The Monte-Carlo simulation..."
   randomParams >>= runExperimentParallel
     monteCarloExperiment monteCarloGenerators
-    (DiagramsRenderer SVG M.empty) . model
+    (WebPageRenderer $ DiagramsRenderer SVG M.empty) . model
diff --git a/examples/Furnace/Experiment.hs b/examples/Furnace/Experiment.hs
--- a/examples/Furnace/Experiment.hs
+++ b/examples/Furnace/Experiment.hs
@@ -27,7 +27,7 @@
     experimentRunCount = 100,
     experimentTitle = "The Furnace model (the Monte-Carlo simulation)" }
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultDeviationChartView {
@@ -72,39 +72,39 @@
      deviationChartTitle = "Deviation Chart - 3",
      deviationChartPlotTitle = "The queue size",
      deviationChartRightYSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },
+       resultByName furnaceQueueName >>> resultById QueueCountId },
    outputView $ defaultFinalHistogramView {
      finalHistogramTitle = "Final Histogram - 3",
      finalHistogramPlotTitle = "The queue size in the final time point.",
      finalHistogramSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },
+       resultByName furnaceQueueName >>> resultById QueueCountId },
    outputView $ defaultFinalStatsView {
      finalStatsTitle = "Final Statistics - 3",
      finalStatsDescription = "The summary of the queue size in the final time point.",
      finalStatsSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },
+       resultByName furnaceQueueName >>> resultById QueueCountId },
    outputView $ defaultDeviationChartView {
      deviationChartTitle = "Deviation Chart - 4",
      deviationChartPlotTitle = "The mean wait time",
      deviationChartRightYSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },
+       resultByName furnaceQueueName >>> resultById QueueWaitTimeId },
    outputView $ defaultFinalStatsView {
      finalStatsTitle = "Final Statistics - 4",
      finalStatsDescription = "The summary of the mean wait time in " ++
                              "the final time point.",
      finalStatsSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },
+       resultByName furnaceQueueName >>> resultById QueueWaitTimeId },
    outputView $ defaultDeviationChartView {
      deviationChartTitle = "Deviation Chart - 5",
      deviationChartPlotTitle = "The queue rate",
      deviationChartRightYSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueRate" },
+       resultByName furnaceQueueName >>> resultById QueueRateId },
    outputView $ defaultFinalStatsView {
      finalStatsTitle = "Final Statistics - 5",
      finalStatsDescription = "The summary of the queue rate in " ++
                              "the final time point.",
      finalStatsSeries =
-       resultByName furnaceQueueName >>> resultByProperty "queueRate" },
+       resultByName furnaceQueueName >>> resultById QueueRateId },
    outputView $ defaultDeviationChartView {
      deviationChartTitle = "Deviation Chart - 6",
      deviationChartPlotTitle = "The mean heating time",
diff --git a/examples/Furnace/MainUsingCairo.hs b/examples/Furnace/MainUsingCairo.hs
--- a/examples/Furnace/MainUsingCairo.hs
+++ b/examples/Furnace/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/Furnace/MainUsingDiagrams.hs b/examples/Furnace/MainUsingDiagrams.hs
--- a/examples/Furnace/MainUsingDiagrams.hs
+++ b/examples/Furnace/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/InspectionAdjustmentStations/Experiment.hs b/examples/InspectionAdjustmentStations/Experiment.hs
--- a/examples/InspectionAdjustmentStations/Experiment.hs
+++ b/examples/InspectionAdjustmentStations/Experiment.hs
@@ -28,36 +28,36 @@
 resultProcessingTime :: ResultTransform
 resultProcessingTime =
   (resultByName "inputArrivalTimer" >>>
-   resultByProperty "processingTime")
+   resultById ArrivalProcessingTimeId)
   <>
   (resultByName "outputArrivalTimer" >>>
-   resultByProperty "processingTime")
+   resultById ArrivalProcessingTimeId)
 
 resultProcessingFactor :: ResultTransform
 resultProcessingFactor =
   (resultByName "inspectionStations" >>>
-   resultByProperty "processingFactor")
+   resultById ServerProcessingFactorId)
   <>
   (resultByName "adjustmentStations" >>>
-   resultByProperty "processingFactor")
+   resultById ServerProcessingFactorId)
 
 resultQueueSize :: ResultTransform
 resultQueueSize =
   (resultByName "inspectionQueue" >>>
-   resultByProperty "queueCount")
+   resultById QueueCountId)
   <>
   (resultByName "adjustmentQueue" >>>
-   resultByProperty "queueCount")
+   resultById QueueCountId)
 
 resultWaitTime :: ResultTransform
 resultWaitTime =
   (resultByName "inspectionQueue" >>>
-   resultByProperty "queueWaitTime")
+   resultById QueueWaitTimeId)
   <>
   (resultByName "adjustmentQueue" >>>
-   resultByProperty "queueWaitTime")
+   resultById QueueWaitTimeId)
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultFinalStatsView {
diff --git a/examples/InspectionAdjustmentStations/MainUsingCairo.hs b/examples/InspectionAdjustmentStations/MainUsingCairo.hs
--- a/examples/InspectionAdjustmentStations/MainUsingCairo.hs
+++ b/examples/InspectionAdjustmentStations/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs b/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
--- a/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
+++ b/examples/InspectionAdjustmentStations/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
diff --git a/examples/LinearArray/Experiment.hs b/examples/LinearArray/Experiment.hs
--- a/examples/LinearArray/Experiment.hs
+++ b/examples/LinearArray/Experiment.hs
@@ -22,7 +22,7 @@
     experimentDescription = "Model Linear Array as described in " ++
                             "the examples included in Berkeley-Madonna." }
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators = 
   [outputView defaultExperimentSpecsView,
    outputView $ defaultTableView {
diff --git a/examples/LinearArray/MainUsingCairo.hs b/examples/LinearArray/MainUsingCairo.hs
--- a/examples/LinearArray/MainUsingCairo.hs
+++ b/examples/LinearArray/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) (model 51)
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) (model 51)
diff --git a/examples/LinearArray/MainUsingDiagrams.hs b/examples/LinearArray/MainUsingDiagrams.hs
--- a/examples/LinearArray/MainUsingDiagrams.hs
+++ b/examples/LinearArray/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) (model 51)
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model 51)
diff --git a/examples/MachRep3/Experiment.hs b/examples/MachRep3/Experiment.hs
--- a/examples/MachRep3/Experiment.hs
+++ b/examples/MachRep3/Experiment.hs
@@ -24,7 +24,7 @@
 t = resultByName "totalUpTime"
 n = resultByName "runIndex"
 
-generators :: WebPageCharting r => [WebPageGenerator r]
+generators :: ChartRendering r => [WebPageGenerator r]
 generators =
   [outputView defaultExperimentSpecsView,
    outputView $ defaultDeviationChartView {
diff --git a/examples/MachRep3/MainUsingCairo.hs b/examples/MachRep3/MainUsingCairo.hs
--- a/examples/MachRep3/MainUsingCairo.hs
+++ b/examples/MachRep3/MainUsingCairo.hs
@@ -9,4 +9,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (CairoRenderer PNG) model
+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
diff --git a/examples/MachRep3/MainUsingDiagrams.hs b/examples/MachRep3/MainUsingDiagrams.hs
--- a/examples/MachRep3/MainUsingDiagrams.hs
+++ b/examples/MachRep3/MainUsingDiagrams.hs
@@ -11,4 +11,4 @@
 import Model
 import Experiment
 
-main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model
+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
