diff --git a/Simulation/Aivika/Experiment.hs b/Simulation/Aivika/Experiment.hs
--- a/Simulation/Aivika/Experiment.hs
+++ b/Simulation/Aivika/Experiment.hs
@@ -31,6 +31,10 @@
         Series(..),
         SeriesEntity(..),
         SeriesProvider(..),
+        SeriesListWithSubscript,
+        SeriesArrayWithSubscript,
+        seriesListWithSubscript,
+        seriesArrayWithSubscript,
         View(..),
         Generator(..),
         Reporter(..),
@@ -47,7 +51,6 @@
 import Data.Array
 import Data.Maybe
 import Data.Monoid
-import Data.String.Utils (replace)
 
 import qualified System.IO.UTF8 as UTF8
 import System.Directory
@@ -63,8 +66,10 @@
 import Simulation.Aivika.Dynamics.UVar
 import Simulation.Aivika.Dynamics.EventQueue
 import Simulation.Aivika.Dynamics.Parameter
+import Simulation.Aivika.Statistics
 
 import Simulation.Aivika.Experiment.HtmlWriter
+import Simulation.Aivika.Experiment.Utils (replace)
 
 -- | It defines the simulation experiment.
 data Experiment = 
@@ -118,6 +123,21 @@
 -- | Represents the series. It is usually something, or
 -- an array of something, or a list of such values which
 -- can be simulated.
+--
+-- The array and list of series are treated as a sequence of
+-- separate sub-series that have a subscript which can be
+-- optionally specified explicitly. By default, the subscript
+-- is numeric but it may be any string.
+--  
+-- At the same time, if the array or list of numeric values
+-- is wrapped in monad 'Simulation' or 'Dynamics' then the
+-- underlying numeric array and list are already treated as
+-- a sampling statistics or list of numbers in time point.
+--
+-- Moreover, if the array or list of numbers is contained in
+-- reference 'Ref' or variable 'Var' then the array and list
+-- of such values are also treated as a sampling statistics
+-- or list of numbers in time point.
 class Series s where
   
   -- | Return the simulatable entity with the specified name
@@ -136,8 +156,16 @@
                    -- ^ Return the name.
                    providerToDouble :: Maybe (Dynamics Double),
                    -- ^ Try to return the data as double values.
+                   providerToDoubleStats :: Maybe (Dynamics (SamplingStats Double)),
+                   -- ^ Try to return the statistics data in time points.
+                   providerToDoubleList :: Maybe (Dynamics [Double]),
+                   -- ^ Try to return the list of double values.
                    providerToInt :: Maybe (Dynamics Int),
                    -- ^ Try to return the data as integers.
+                   providerToIntStats :: Maybe (Dynamics (SamplingStats Int)),
+                   -- ^ Try to return the statistics data in time points.
+                   providerToIntList :: Maybe (Dynamics [Int]),
+                   -- ^ Try to return the list of integer values.
                    providerToString :: Maybe (Dynamics String),
                    -- ^ Try to return the data as strings.
                    providerSignal :: Maybe (Signal ())
@@ -388,7 +416,13 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ liftSimulation s,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $ fmap returnSamplingStats s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation $ fmap return s,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ liftSimulation $ fmap show s,
                                         providerSignal   = Nothing }] }
 
@@ -398,7 +432,19 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ liftSimulation $ fmap fromIntegral s,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $
+                                          fmap returnSamplingStats $
+                                          fmap fromIntegral s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation $
+                                          fmap return $
+                                          fmap fromIntegral s,
                                         providerToInt    = Just $ liftSimulation s,
+                                        providerToIntStats =
+                                          Just $ liftSimulation $ fmap returnSamplingStats s,
+                                        providerToIntList =
+                                          Just $ liftSimulation $ fmap return s,
                                         providerToString = Just $ liftSimulation $ fmap show s,
                                         providerSignal   = Nothing }] }
 
@@ -408,7 +454,11 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Nothing,
+                                        providerToDoubleStats = Nothing,
+                                        providerToDoubleList = Nothing,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ liftSimulation s,
                                         providerSignal   = Nothing }] }
 
@@ -418,7 +468,11 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just s,
+                                        providerToDoubleStats = Just $ fmap returnSamplingStats s,
+                                        providerToDoubleList = Just $ fmap return s,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ fmap show s,
                                         providerSignal   = Nothing }] }
 
@@ -428,7 +482,13 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ fmap fromIntegral s,
+                                        providerToDoubleStats =
+                                          Just $ fmap returnSamplingStats $ fmap fromIntegral s,
+                                        providerToDoubleList =
+                                          Just $ fmap return $ fmap fromIntegral s,
                                         providerToInt    = Just s,
+                                        providerToIntStats = Just $ fmap returnSamplingStats s,
+                                        providerToIntList = Just $ fmap return s,
                                         providerToString = Just $ fmap show s,
                                         providerSignal   = Nothing }] }
 
@@ -438,7 +498,11 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Nothing,
+                                        providerToDoubleStats = Nothing,
+                                        providerToDoubleList = Nothing,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just s,
                                         providerSignal   = Nothing }] }
 
@@ -448,7 +512,13 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ readRef s,
+                                        providerToDoubleStats =
+                                          Just $ fmap returnSamplingStats $ readRef s,
+                                        providerToDoubleList =
+                                          Just $ fmap return $ readRef s,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ fmap show (readRef s),
                                         providerSignal   = Just $ refChanged_ s }] }
 
@@ -458,7 +528,19 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ fmap fromIntegral (readRef s),
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap returnSamplingStats $
+                                          fmap fromIntegral (readRef s),
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap return $
+                                          fmap fromIntegral (readRef s),
                                         providerToInt    = Just $ readRef s,
+                                        providerToIntStats =
+                                          Just $ fmap returnSamplingStats (readRef s),
+                                        providerToIntList =
+                                          Just $ fmap return (readRef s),
                                         providerToString = Just $ fmap show (readRef s),
                                         providerSignal   = Just $ refChanged_ s }] }
 
@@ -468,7 +550,11 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Nothing,
+                                        providerToDoubleStats = Nothing,
+                                        providerToDoubleList = Nothing,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ readRef s,
                                         providerSignal   = Just $ refChanged_ s }] }
 
@@ -478,7 +564,13 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ readVar s,
+                                        providerToDoubleStats =
+                                          Just $ fmap returnSamplingStats $ readVar s,
+                                        providerToDoubleList =
+                                          Just $ fmap return $ readVar s,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ fmap show (readVar s),
                                         providerSignal   = Just $ varChanged_ s }] }
 
@@ -488,7 +580,19 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ fmap fromIntegral (readVar s),
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap returnSamplingStats $
+                                          fmap fromIntegral (readVar s),
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap return $
+                                          fmap fromIntegral (readVar s),
                                         providerToInt    = Just $ readVar s,
+                                        providerToIntStats =
+                                          Just $ fmap returnSamplingStats (readVar s),
+                                        providerToIntList =
+                                          Just $ fmap return (readVar s),
                                         providerToString = Just $ fmap show (readVar s),
                                         providerSignal   = Just $ varChanged_ s }] }
 
@@ -498,7 +602,11 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Nothing,
+                                        providerToDoubleStats = Nothing,
+                                        providerToDoubleList = Nothing,
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ readVar s,
                                         providerSignal   = Just $ varChanged_ s }] }
 
@@ -508,7 +616,13 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ readUVar s,
+                                        providerToDoubleStats =
+                                          Just $ fmap returnSamplingStats (readUVar s),
+                                        providerToDoubleList =
+                                          Just $ fmap return (readUVar s),
                                         providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
                                         providerToString = Just $ fmap show (readUVar s),
                                         providerSignal   = Just $ uvarChanged_ s }] }
 
@@ -518,7 +632,19 @@
     SeriesEntity { seriesProviders =
                       [SeriesProvider { providerName     = name,
                                         providerToDouble = Just $ fmap fromIntegral (readUVar s),
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap returnSamplingStats $
+                                          fmap fromIntegral (readUVar s),
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap return $
+                                          fmap fromIntegral (readUVar s),
                                         providerToInt    = Just $ readUVar s,
+                                        providerToIntStats =
+                                          Just $ fmap returnSamplingStats (readUVar s),
+                                        providerToIntList =
+                                          Just $ fmap return (readUVar s),
                                         providerToString = Just $ fmap show (readUVar s),
                                         providerSignal   = Just $ uvarChanged_ s }] }
     
@@ -537,3 +663,481 @@
                       join $ forM (assocs s) $ \(i, s) ->
                       let name' = name ++ "[" ++ show i ++ "]"
                       in seriesProviders $ seriesEntity name' s }
+
+-- | Represents a list with the specified subscript.
+data SeriesListWithSubscript s =
+  SeriesListWithSubscript { seriesList          :: [s],
+                            seriesListSubscript :: [String] }
+
+-- | Represents an array with the specified subscript.
+data SeriesArrayWithSubscript i s =
+  SeriesArrayWithSubscript { seriesArray          :: Array i s,
+                             seriesArraySubscript :: Array i String }
+
+-- | Add the specified subscript to the list.
+seriesListWithSubscript :: Series s => [s] -> [String] -> SeriesListWithSubscript s
+seriesListWithSubscript = SeriesListWithSubscript
+
+-- | Add the specified subscript to the array.
+seriesArrayWithSubscript :: (Ix i, Series s) => Array i s -> Array i String
+                            -> SeriesArrayWithSubscript i s
+seriesArrayWithSubscript = SeriesArrayWithSubscript
+
+instance Series s => Series (SeriesListWithSubscript s) where
+  
+  seriesEntity name s = 
+    SeriesEntity { seriesProviders = do
+                      let xs = seriesList s
+                          ns = seriesListSubscript s
+                      join $ forM (zip3 [1..] xs ns) $ \(i, s, n) ->
+                        let name' = name ++ n
+                        in seriesProviders $ seriesEntity name' s }
+    
+instance (Ix i, Series s) => Series (SeriesArrayWithSubscript i s) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders = do
+                      let xs = seriesArray s
+                          ns = seriesArraySubscript s
+                      join $ forM (zip (assocs xs) (elems ns)) $ \((i, s), n) ->
+                        let name' = name ++ n
+                        in seriesProviders $ seriesEntity name' s }
+
+instance Series (Simulation (SamplingStats Double)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats = Just $ liftSimulation s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Simulation (SamplingStats Int)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $ fmap fromIntSamplingStats s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Just $ liftSimulation s,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Dynamics (SamplingStats Double)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats = Just s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Dynamics (SamplingStats Int)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats = Just $ fmap fromIntSamplingStats s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Just $ s,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Ref (SamplingStats Double)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats = Just $ readRef s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Ref (SamplingStats Int)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ fmap fromIntSamplingStats $ readRef s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Just $ readRef s,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Var (SamplingStats Double)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats = Just $ readVar s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Var (SamplingStats Int)) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ fmap fromIntSamplingStats $ readVar s,
+                                        providerToDoubleList = Nothing,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Just $ readVar s,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Simulation [Double]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $ fmap listSamplingStats s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Simulation [Int]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation $
+                                          fmap (map fromIntegral) s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $ liftSimulation $ fmap listSamplingStats s,
+                                        providerToIntList =
+                                          Just $ liftSimulation s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Dynamics [Double]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ fmap listSamplingStats s,
+                                        providerToDoubleList =
+                                          Just s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Dynamics [Int]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats s,
+                                        providerToDoubleList =
+                                          Just $ fmap (map fromIntegral) s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $ fmap listSamplingStats s,
+                                        providerToIntList =
+                                          Just s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Ref [Double]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ fmap listSamplingStats $ readRef s,
+                                        providerToDoubleList =
+                                          Just $ readRef s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Ref [Int]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $ readRef s,
+                                        providerToDoubleList =
+                                          Just $ fmap (map fromIntegral) $ readRef s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $ fmap listSamplingStats $ readRef s,
+                                        providerToIntList =
+                                          Just $ readRef s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Var [Double]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ fmap listSamplingStats $ readVar s,
+                                        providerToDoubleList =
+                                          Just $ readVar s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Series (Var [Int]) where
+  
+  seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $ readVar s,
+                                        providerToDoubleList =
+                                          Just $ fmap (map fromIntegral) $ readVar s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $ fmap listSamplingStats $ readVar s,
+                                        providerToIntList =
+                                          Just $ readVar s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Simulation (Array i Double)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation $
+                                          fmap elems s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Simulation (Array i Int)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $ liftSimulation $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToDoubleList =
+                                          Just $ liftSimulation $
+                                          fmap (map fromIntegral) $
+                                          fmap elems s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $ liftSimulation $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToIntList =
+                                          Just $ liftSimulation $
+                                          fmap elems s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Dynamics (Array i Double)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToDoubleList =
+                                          Just $ fmap elems s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Dynamics (Array i Int)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap (map fromIntegral) $
+                                          fmap elems s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems s,
+                                        providerToIntList =
+                                          Just $ fmap elems s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+
+instance Ix i => Series (Ref (Array i Double)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readRef s,
+                                        providerToDoubleList =
+                                          Just $ fmap elems $ readRef s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Ref (Array i Int)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readRef s,
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap (map fromIntegral) $
+                                          fmap elems $ readRef s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readRef s,
+                                        providerToIntList =
+                                          Just $
+                                          fmap elems $ readRef s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+
+instance Ix i => Series (Var (Array i Double)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readVar s,
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap elems $ readVar s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats = Nothing,
+                                        providerToIntList = Nothing,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
+
+instance Ix i => Series (Var (Array i Int)) where
+
+   seriesEntity name s =
+    SeriesEntity { seriesProviders =
+                      [SeriesProvider { providerName     = name,
+                                        providerToDouble = Nothing,
+                                        providerToDoubleStats =
+                                          Just $
+                                          fmap fromIntSamplingStats $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readVar s,
+                                        providerToDoubleList =
+                                          Just $
+                                          fmap (map fromIntegral) $
+                                          fmap elems $ readVar s,
+                                        providerToInt    = Nothing,
+                                        providerToIntStats =
+                                          Just $
+                                          fmap listSamplingStats $
+                                          fmap elems $ readVar s,
+                                        providerToIntList =
+                                          Just $
+                                          fmap elems $ readVar s,
+                                        providerToString = Nothing,
+                                        providerSignal   = Nothing }] }
diff --git a/Simulation/Aivika/Experiment/FinalStatsView.hs b/Simulation/Aivika/Experiment/FinalStatsView.hs
--- a/Simulation/Aivika/Experiment/FinalStatsView.hs
+++ b/Simulation/Aivika/Experiment/FinalStatsView.hs
@@ -25,6 +25,7 @@
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
 import Simulation.Aivika.Experiment.SamplingStatsWriter
+import Simulation.Aivika.Experiment.SamplingStatsSource
 
 import Simulation.Aivika.Dynamics
 import Simulation.Aivika.Dynamics.Simulation
@@ -109,12 +110,12 @@
          providers = concat protoproviders
          input =
            flip map providers $ \provider ->
-           case providerToDouble provider of
+           case providerToDoubleStatsSource provider of
              Nothing -> error $
                         "Cannot represent series " ++
                         providerName provider ++ 
-                        " as double values: simulateFinalStats"
-             Just input -> input
+                        " as a source of double values: simulateFinalStats"
+             Just input -> samplingStatsSourceData input
          names = map providerName providers
          predicate = finalStatsPredicate $ finalStatsView st
          exp = finalStatsExperiment st
@@ -142,7 +143,7 @@
                liftIO $ withMVar lock $ \() ->
                  forM_ (zip xs values) $ \(x, values) ->
                  do y <- readIORef values
-                    let y' = addSamplingStats x y
+                    let y' = addDataToSamplingStats x y
                     y' `seq` writeIORef values y'
      return $ return ()
 
diff --git a/Simulation/Aivika/Experiment/LastValueView.hs b/Simulation/Aivika/Experiment/LastValueView.hs
--- a/Simulation/Aivika/Experiment/LastValueView.hs
+++ b/Simulation/Aivika/Experiment/LastValueView.hs
@@ -22,10 +22,9 @@
 import Data.IORef
 import Data.Maybe
 
-import Data.String.Utils (replace)
-
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
+import Simulation.Aivika.Experiment.Utils (replace)
 
 import Simulation.Aivika.Dynamics
 import Simulation.Aivika.Dynamics.Simulation
diff --git a/Simulation/Aivika/Experiment/ListSource.hs b/Simulation/Aivika/Experiment/ListSource.hs
new file mode 100644
--- /dev/null
+++ b/Simulation/Aivika/Experiment/ListSource.hs
@@ -0,0 +1,88 @@
+
+-- |
+-- Module     : Simulation.Aivika.Experiment.ListSource
+-- Copyright  : Copyright (c) 2013, David Sorokin <david.sorokin@gmail.com>
+-- License    : BSD3
+-- Maintainer : David Sorokin <david.sorokin@gmail.com>
+-- Stability  : experimental
+-- Tested with: GHC 7.6.3
+--
+-- It represents an optimized source of data to construct the list.
+--
+
+module Simulation.Aivika.Experiment.ListSource
+       (ListSource,
+        providerToDoubleListSource,
+        providerToIntListSource,
+        ListData,
+        listSourceData,
+        listDataList,
+        ListRef,
+        newListRef,
+        addDataToListRef,
+        readListRef) where
+
+import Data.IORef
+import Control.Monad
+
+import Simulation.Aivika.Dynamics
+import Simulation.Aivika.Statistics
+import Simulation.Aivika.Experiment
+
+-- | Represents the optimized source of data for constructing the list.
+data ListSource a = SingleValueSource (Dynamics a)
+                  | MultipleValueSource (Dynamics [a])
+
+-- | Represents the optimized data by which the list will be created.
+data ListData a = SingleValueData !a
+                | MultipleValueData [a]
+
+-- | Try to return the source of list data by the specified provider.
+providerToDoubleListSource :: SeriesProvider -> Maybe (ListSource Double)
+providerToDoubleListSource provider =
+  case providerToDouble provider of
+    Just x -> Just $ SingleValueSource x
+    Nothing ->
+      case providerToDoubleList provider of
+        Just x -> Just $ MultipleValueSource x
+        Nothing -> Nothing
+        
+-- | Try to return the source of list data by the specified provider.
+providerToIntListSource :: SeriesProvider -> Maybe (ListSource Int)
+providerToIntListSource provider =
+  case providerToInt provider of
+    Just x -> Just $ SingleValueSource x
+    Nothing ->
+      case providerToIntList provider of
+        Just x -> Just $ MultipleValueSource x
+        Nothing -> Nothing
+
+-- | Get data from the source in the current time point.
+listSourceData :: ListSource a -> Dynamics (ListData a)
+listSourceData (SingleValueSource x)    = x >>= return . SingleValueData
+listSourceData (MultipleValueSource xs) =
+  do ys <- xs
+     zs <- forM ys $ \y -> return $ y `seq` y
+     return $ MultipleValueData ys  -- it contains strict data, which is important for big models 
+
+-- | Return the list of values contained in the specified data.
+listDataList :: ListData a -> [a]
+listDataList (SingleValueData x)    = [x]
+listDataList (MultipleValueData xs) = xs
+
+-- | Represents a reference to the list, optimized to work with the source of data.
+newtype ListRef a = ListRef { listRef :: IORef [ListData a] } 
+
+-- | Create a new list reference.
+newListRef :: IO (ListRef a)
+newListRef = fmap ListRef $ newIORef []
+
+-- | Add data to the list reference.
+addDataToListRef :: ListRef a -> ListData a -> IO ()
+addDataToListRef (ListRef r) a = modifyIORef r (a :)
+
+-- | Read the list contained in the reference.
+readListRef :: ListRef a -> IO [a]
+readListRef (ListRef r) =
+  do x <- readIORef r
+     return $ concat $ map listDataList x 
diff --git a/Simulation/Aivika/Experiment/SamplingStatsSource.hs b/Simulation/Aivika/Experiment/SamplingStatsSource.hs
new file mode 100644
--- /dev/null
+++ b/Simulation/Aivika/Experiment/SamplingStatsSource.hs
@@ -0,0 +1,68 @@
+
+-- |
+-- Module     : Simulation.Aivika.Experiment.SamplingStatsSource
+-- Copyright  : Copyright (c) 2013, David Sorokin <david.sorokin@gmail.com>
+-- License    : BSD3
+-- Maintainer : David Sorokin <david.sorokin@gmail.com>
+-- Stability  : experimental
+-- Tested with: GHC 7.6.3
+--
+-- It represents an optimized source of statistical data.
+--
+
+module Simulation.Aivika.Experiment.SamplingStatsSource
+       (SamplingStatsSource,
+        providerToDoubleStatsSource,
+        providerToIntStatsSource,
+        SamplingStatsData,
+        samplingStatsSourceData,
+        addDataToSamplingStats) where
+
+import Simulation.Aivika.Dynamics
+import Simulation.Aivika.Statistics
+import Simulation.Aivika.Experiment
+
+-- | Represents the optimized source of data for the statistics.
+data SamplingStatsSource a = SingleValueSource (Dynamics a)
+                           | MultipleValueSource (Dynamics (SamplingStats a))
+
+-- | Represents the optimized data to be included in the statistics.
+data SamplingStatsData a = SingleValueData !a
+                         | MultipleValueData (SamplingStats a)
+
+-- | Try to return the source of statistical data by the specified provider.
+providerToDoubleStatsSource :: SeriesProvider -> Maybe (SamplingStatsSource Double)
+providerToDoubleStatsSource provider =
+  case providerToDouble provider of
+    Just x -> Just $ SingleValueSource x
+    Nothing ->
+      case providerToDoubleStats provider of
+        Just x -> Just $ MultipleValueSource x
+        Nothing -> Nothing
+        
+-- | Try to return the source of statistical data.
+providerToIntStatsSource :: SeriesProvider -> Maybe (SamplingStatsSource Int)
+providerToIntStatsSource provider =
+  case providerToInt provider of
+    Just x -> Just $ SingleValueSource x
+    Nothing ->
+      case providerToIntStats provider of
+        Just x -> Just $ MultipleValueSource x
+        Nothing -> Nothing
+
+-- | Get data from the source in the current time point.
+samplingStatsSourceData :: SamplingStatsSource a -> Dynamics (SamplingStatsData a)
+samplingStatsSourceData source =
+  case source of
+    SingleValueSource x -> x >>= return . SingleValueData
+    MultipleValueSource x -> x >>= return . MultipleValueData
+
+-- | Add data from the source to the statistics.
+addDataToSamplingStats :: SamplingData a
+                          => SamplingStatsData a
+                          -> SamplingStats a
+                          -> SamplingStats a
+addDataToSamplingStats d stats =
+  case d of
+    SingleValueData x -> addSamplingStats x stats
+    MultipleValueData x -> combineSamplingStats x stats
diff --git a/Simulation/Aivika/Experiment/TableView.hs b/Simulation/Aivika/Experiment/TableView.hs
--- a/Simulation/Aivika/Experiment/TableView.hs
+++ b/Simulation/Aivika/Experiment/TableView.hs
@@ -25,10 +25,9 @@
 import System.IO
 import System.FilePath
 
-import Data.String.Utils (replace)
-
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
+import Simulation.Aivika.Experiment.Utils (replace)
 
 import Simulation.Aivika.Dynamics
 import Simulation.Aivika.Dynamics.Simulation
diff --git a/Simulation/Aivika/Experiment/TimingStatsView.hs b/Simulation/Aivika/Experiment/TimingStatsView.hs
--- a/Simulation/Aivika/Experiment/TimingStatsView.hs
+++ b/Simulation/Aivika/Experiment/TimingStatsView.hs
@@ -22,11 +22,10 @@
 import Data.IORef
 import Data.Maybe
 
-import Data.String.Utils (replace)
-
 import Simulation.Aivika.Experiment
 import Simulation.Aivika.Experiment.HtmlWriter
 import Simulation.Aivika.Experiment.TimingStatsWriter
+import Simulation.Aivika.Experiment.Utils (replace)
 
 import Simulation.Aivika.Dynamics
 import Simulation.Aivika.Dynamics.Simulation
diff --git a/Simulation/Aivika/Experiment/Utils.hs b/Simulation/Aivika/Experiment/Utils.hs
--- a/Simulation/Aivika/Experiment/Utils.hs
+++ b/Simulation/Aivika/Experiment/Utils.hs
@@ -11,8 +11,11 @@
 --
 
 module Simulation.Aivika.Experiment.Utils
-       (divideBy) where
+       (divideBy, replace) where
 
+import Data.List
+import Data.List.Split
+
 -- | Divide into the groups removing those elements
 -- that satisfy the predicate.
 divideBy :: (a -> Bool) -> [a] -> [[a]]
@@ -21,3 +24,7 @@
     []  -> []
     xs' -> ys : divideBy p xs''
            where (ys, xs'') = break p xs'
+
+-- | Replace the string.
+replace :: String -> String -> String -> String
+replace old new = intercalate new . splitOn old
diff --git a/aivika-experiment.cabal b/aivika-experiment.cabal
--- a/aivika-experiment.cabal
+++ b/aivika-experiment.cabal
@@ -1,5 +1,5 @@
 name:            aivika-experiment
-version:         0.2.1
+version:         0.2.2
 synopsis:        Simulation experiments for the Aivika library
 description:
     This package allows defining simulation experiments for the Aivika
@@ -12,13 +12,13 @@
 category:        Simulation
 license:         BSD3
 license-file:    LICENSE
-copyright:       (c) 2012. David Sorokin <david.sorokin@gmail.com>
+copyright:       (c) 2012-2013. David Sorokin <david.sorokin@gmail.com>
 author:          David Sorokin
 maintainer:      David Sorokin <david.sorokin@gmail.com>
 homepage:        http://github.com/dsorokin/aivika-experiment
 cabal-version:   >= 1.2.0
 build-type:      Simple
-tested-with:     GHC == 7.4.1
+tested-with:     GHC == 7.6.3
 
 extra-source-files:  examples/MachRep3.hs
 
@@ -31,11 +31,13 @@
                      Simulation.Aivika.Experiment.TimingStatsView
                      Simulation.Aivika.Experiment.TimingStatsWriter
                      Simulation.Aivika.Experiment.SamplingStatsWriter
+                     Simulation.Aivika.Experiment.SamplingStatsSource
                      Simulation.Aivika.Experiment.FinalStatsView
                      Simulation.Aivika.Experiment.Histogram
                      Simulation.Aivika.Experiment.ExperimentSpecsView
                      Simulation.Aivika.Experiment.ExperimentSpecsWriter
                      Simulation.Aivika.Experiment.FinalTableView
+                     Simulation.Aivika.Experiment.ListSource
                      Simulation.Aivika.Experiment.Utils
                      
     build-depends:   base >= 3 && < 6,
@@ -45,10 +47,10 @@
                      directory >= 1.1.0.2,
                      filepath >= 1.3.0.0,
                      utf8-string >= 0.3.7,
-                     MissingH >= 1.2.0.0,
+                     split >= 0.2.2,
                      network >= 2.3.0.13,
                      parallel-io >= 0.3.2.1,
-                     aivika >= 0.5.1
+                     aivika >= 0.5.4
 
     extensions:      FlexibleInstances
                      
