diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012, 2013, 2014 David Sorokin <david.sorokin@gmail.com>
+Copyright (c) 2012-2015 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,7 +1,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.DeviationChartView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -208,11 +208,11 @@
          rs2     = deviationChartRightYSeries view $
                    deviationChartTransform view $
                    experimentResults expdata
-         exts1   = extractDoubleStatsEitherResults rs1
-         exts2   = extractDoubleStatsEitherResults rs2
+         exts1   = resultsToDoubleStatsEitherValues rs1
+         exts2   = resultsToDoubleStatsEitherValues rs2
          exts    = exts1 ++ exts2
-         names1  = map resultExtractName exts1
-         names2  = map resultExtractName exts2
+         names1  = map resultValueName exts1
+         names2  = map resultValueName exts2
          names   = map Left names1 ++ map Right names2
          signals = experimentPredefinedSignals expdata
          signal  = resultSignalInIntegTimes signals
@@ -220,7 +220,7 @@
      results <- liftIO $ requireDeviationChartResults st names
      let stats   = deviationChartStats results
      handleSignal signal $ \_ ->
-       do xs <- forM exts resultExtractData
+       do xs <- forM exts resultValueData
           i  <- liftDynamics integIteration
           liftIO $
             forM_ (zip xs stats) $ \(x, 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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalHistogramView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -188,8 +188,8 @@
          rs      = finalHistogramSeries view $
                    finalHistogramTransform view $
                    experimentResults expdata
-         exts    = extractDoubleListResults rs
-         names   = map resultExtractName exts
+         exts    = resultsToDoubleListValues rs
+         names   = map resultValueName exts
          signals = experimentPredefinedSignals expdata
          signal  = filterSignalM (const predicate) $
                    resultSignalInStopTime signals
@@ -197,7 +197,7 @@
      results <- liftIO $ requireFinalHistogramResults st names
      let values = finalHistogramValues results
      handleSignal signal $ \_ ->
-       do xs <- forM exts resultExtractData
+       do xs <- forM exts resultValueData
           liftIO $
             forM_ (zip xs values) $ \(x, values) ->
             modifyMRef_ values $ return . (++) x
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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.FinalXYChartView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -219,15 +219,15 @@
                    finalXYChartTransform view $
                    experimentResults expdata
          ext0    =
-           case extractDoubleResults rs0 of
+           case resultsToDoubleValues rs0 of
              [x] -> x
              _   -> error "Expected to see a single X series: simulateFinalXYChart"
-         exts1   = extractDoubleResults rs1
-         exts2   = extractDoubleResults rs2
+         exts1   = resultsToDoubleValues rs1
+         exts2   = resultsToDoubleValues rs2
          exts    = exts1 ++ exts2
-         name0   = resultExtractName ext0
-         names1  = map resultExtractName exts1
-         names2  = map resultExtractName exts2
+         name0   = resultValueName ext0
+         names1  = map resultValueName exts1
+         names2  = map resultValueName exts2
          names   = map Left names1 ++ map Right names2
          signals = experimentPredefinedSignals expdata
          signal  = filterSignalM (const predicate) $
@@ -238,8 +238,8 @@
      results <- liftIO $ requireFinalXYChartResults st name0 names
      let xys = finalXYChartXY results
      handleSignal signal $ \_ ->
-       do x  <- resultExtractData ext0
-          ys <- forM exts resultExtractData
+       do x  <- resultValueData ext0
+          ys <- forM exts resultValueData
           i  <- liftParameter simulationIndex
           liftIO $
             forM_ (zip ys xys) $ \(y, xy) ->
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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.HistogramView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -182,8 +182,8 @@
          rs      = histogramSeries view $
                    histogramTransform view $
                    experimentResults expdata
-         exts    = extractDoubleListResults rs
-         names   = map resultExtractName exts
+         exts    = resultsToDoubleListValues rs
+         names   = map resultValueName exts
          signals = experimentPredefinedSignals expdata
          n = experimentRunCount $ histogramExperiment st
          build   = histogramBuild view
@@ -210,7 +210,7 @@
                 runPlotTitle
      hs <- forM exts $ \ext ->
        newSignalHistory $
-       mapSignalM (const $ resultExtractData ext) $
+       mapSignalM (const $ resultValueData ext) $
        filterSignalM (const predicate) $
        resultSignalInIntegTimes signals
      return $
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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.TimeSeriesView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -190,8 +190,8 @@
          rs2     = timeSeriesRightYSeries view $
                    timeSeriesTransform view $
                    experimentResults expdata
-         exts1   = extractDoubleResults rs1
-         exts2   = extractDoubleResults rs2
+         exts1   = resultsToDoubleValues rs1
+         exts2   = resultsToDoubleValues rs2
          signals = experimentPredefinedSignals expdata
          n = experimentRunCount $ timeSeriesExperiment st
          width   = timeSeriesWidth view
@@ -221,12 +221,12 @@
            let transform () =
                  do x <- predicate
                     if x
-                      then resultExtractData ext
+                      then resultValueData ext
                       else return (1/0)  -- the infinite values will be ignored then
            in newSignalHistory $
               mapSignalM transform $
               pureResultSignal signals $
-              resultExtractSignal ext
+              resultValueSignal ext
      hs1 <- inputHistory exts1
      hs2 <- inputHistory exts2
      return $
@@ -240,7 +240,7 @@
                           toPlot $
                           plotLines $
                           plot_lines_values .~ filterPlotLinesValues (zip (elems ts) (elems xs)) $
-                          plot_lines_title .~ resultExtractName ext $
+                          plot_lines_title .~ resultValueName ext $
                           def
                    return (ps, drop (length hs) plotLineTails)
           (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)
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,7 +1,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.Types
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
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,7 +1,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.Utils
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
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,7 +3,7 @@
 
 -- |
 -- Module     : Simulation.Aivika.Experiment.Chart.XYChartView
--- Copyright  : Copyright (c) 2012-2014, David Sorokin <david.sorokin@gmail.com>
+-- Copyright  : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>
 -- License    : BSD3
 -- Maintainer : David Sorokin <david.sorokin@gmail.com>
 -- Stability  : experimental
@@ -203,11 +203,11 @@
                    xyChartTransform view $
                    experimentResults expdata
          ext0    =
-           case extractDoubleResults rs0 of
+           case resultsToDoubleValues rs0 of
              [x] -> x
              _   -> error "Expected to see a single X series: simulateXYChart"
-         exts1   = extractDoubleResults rs1
-         exts2   = extractDoubleResults rs2
+         exts1   = resultsToDoubleValues rs1
+         exts2   = resultsToDoubleValues rs2
          signals = experimentPredefinedSignals expdata
          n = experimentRunCount $ xyChartExperiment st
          width   = xyChartWidth view
@@ -234,15 +234,15 @@
                 runPlotTitle
          inputHistory exts = 
            forM exts $ \ext ->
-           let x = resultExtractData ext0
-               y = resultExtractData ext
+           let x = resultValueData ext0
+               y = resultValueData ext
                transform () =
                  do p <- predicate
                     if p
                       then liftM2 (,) x y
                       else return (1/0, 1/0)  -- such values will be ignored then
-               signalx = resultExtractSignal ext0
-               signaly = resultExtractSignal ext
+               signalx = resultValueSignal ext0
+               signaly = resultValueSignal ext
            in newSignalHistory $
               mapSignalM transform $
               pureResultSignal signals $
@@ -260,7 +260,7 @@
                           toPlot $
                           plotLines $
                           plot_lines_values .~ filterPlotLinesValues (elems zs) $
-                          plot_lines_title .~ resultExtractName ext $
+                          plot_lines_title .~ resultValueName ext $
                           def
                    return (ps, drop (length hs) plotLineTails)     
           (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)
@@ -269,7 +269,7 @@
               ps2' = map Right ps2
               ps'  = ps1' ++ ps2'
               axis = plotBottomAxis $
-                      laxis_title .~ resultExtractName ext0 $
+                      laxis_title .~ resultValueName ext0 $
                       def
               updateLeftAxis =
                 if null ps1
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:         3.0
+version:         3.1
 synopsis:        Simulation experiments with charting for the Aivika library
 description:
     This package complements the Aivika and Aivika Experiment packages with
@@ -15,7 +15,7 @@
 category:        Simulation
 license:         BSD3
 license-file:    LICENSE
-copyright:       (c) 2012-2014. David Sorokin <david.sorokin@gmail.com>
+copyright:       (c) 2012-2015. David Sorokin <david.sorokin@gmail.com>
 author:          David Sorokin
 maintainer:      David Sorokin <david.sorokin@gmail.com>
 homepage:        http://github.com/dsorokin/aivika-experiment-chart
@@ -91,8 +91,8 @@
                      lens >= 3.9,
                      data-default-class < 0.1,
                      colour >= 2.3.3,
-                     aivika >= 3.0,
-                     aivika-experiment >= 3.0
+                     aivika >= 3.1,
+                     aivika-experiment >= 3.1
 
     extensions:      MultiParamTypeClasses
 
diff --git a/examples/BassDiffusion/Model.hs b/examples/BassDiffusion/Model.hs
--- a/examples/BassDiffusion/Model.hs
+++ b/examples/BassDiffusion/Model.hs
@@ -1,14 +1,16 @@
 
+-- This is the Bass Diffusion model solved with help of 
+-- the Agent-based Modeling as described in the AnyLogic 
+-- documentation.
+
 module Model (model) where
 
-import System.Random
 import Data.Array
 
 import Control.Monad
 import Control.Monad.Trans
 
 import Simulation.Aivika
-import Simulation.Aivika.Experiment
 
 n = 100    -- the number of agents
 
@@ -36,13 +38,13 @@
           return (i, p)
      return $ array (1, n) list
      
-definePerson :: Person -> Array Int Person -> Ref Int -> Ref Int -> Simulation ()
+definePerson :: Person -> Array Int Person -> Ref Int -> Ref Int -> Event ()
 definePerson p ps potentialAdopters adopters =
   do setStateActivation (personPotentialAdopter p) $
        do modifyRef potentialAdopters $ \a -> a + 1
           -- add a timeout
           t <- liftParameter $
-               randomExponential (1 / advertisingEffectiveness)
+               randomExponential (1 / advertisingEffectiveness) 
           let st  = personPotentialAdopter p
               st' = personAdopter p
           addTimeout st t $ selectState st'
@@ -52,7 +54,8 @@
           let t = liftParameter $
                   randomExponential (1 / contactRate)    -- many times!
           addTimer (personAdopter p) t $
-            do i <- liftIO $ getStdRandom $ randomR (1, n)
+            do i <- liftParameter $
+                    randomUniformInt 1 n
                let p' = ps ! i
                st <- selectedState (personAgent p')
                when (st == Just (personPotentialAdopter p')) $
@@ -64,7 +67,7 @@
      setStateDeactivation (personAdopter p) $
        modifyRef adopters $ \a -> a - 1
         
-definePersons :: Array Int Person -> Ref Int -> Ref Int -> Simulation ()
+definePersons :: Array Int Person -> Ref Int -> Ref Int -> Event ()
 definePersons ps potentialAdopters adopters =
   forM_ (elems ps) $ \p -> 
   definePerson p ps potentialAdopters adopters
@@ -81,14 +84,12 @@
   do potentialAdopters <- newRef 0
      adopters <- newRef 0
      ps <- createPersons
-     definePersons ps potentialAdopters adopters
      runEventInStartTime $
-       activatePersons ps
-     return $
+       do definePersons ps potentialAdopters adopters
+          activatePersons ps
+     return $ 
        results
-       [resultSource
-        "potentialAdopters" "Potential Adopters"
-        potentialAdopters,
-        resultSource
-        "adopters" "Adopters"
-        adopters]
+       [resultSource 
+        "potentialAdopters" "potential adopters" potentialAdopters,
+        resultSource 
+        "adopters" "adopters" adopters]
